Wednesday, 21 February 2007

Cyclic Development, Microsoft Solutions Framework

How does the principal of "cyclic" or iterative development apply to modern software projects.

The concept of cyclic development, as espoused by Microsoft's solution framework, references and a modern approach to software project development, where in, a project is developed and delivered to a client as a series of iterations... a series of releases that move the software forwards as much as is achievable with the available budget and resources, and which deliver features and benefits which have been prioritised according to their business benefit.

The philosophy behind this approach is that it gives clients the soonest possible benefit of development work done, by getting the results of that work out to the client and put into production, rather than waiting for a longer period of time, in the hope of a system that solves every problem, and deals with every business rule.

Given the pace of change of modern business where requirements can easily change in the few short months between specification and delivery, this kind of iterative approach to development and delivery into production has come to be seen as a way to maximise the return on investment in business software systems, and software systems that provide the foundation for inteligent infrastructures and profit generating business processes.

Monday, 5 February 2007

"Known State" in software development projects

Today a potential client, another UK software company, asked "If you were me, would you hire you?"
Understandably, perhaps, I answered "Yes", and then he asked me to say why I would ... and this is what I said....

The reason why I'm a great person to have build a software project for you is because I do what I call "complete work".
To use the gutteral, I don't do things in a half-arsed way.
I don't provide people with "half a hair cut".
With me you either get a whole haircut, or no haircut at all.

This does not mean that I always finish every project by every deadline.
Nor does it mean that I only ever produce products that spectacularly exceed client's expectations. I aim for this obviously and sometimes achieve it.
But sometimes of course the limitations on resources or time are more important to a client (or one of my own endeavours) than the delivery of a basic set of functionality for a given purpose. I don't claim to be proud of every web page I produce or database product I deliver.

Rather it means that I operate on the basis of "known state".
Every time I work on a project I move it on to a state that is relatively easy to communicate to another developer or a client.
Consequently I can give you a really straight-forward report on progress at each step along the way.

As I work, I don't leave half done modifications in my wake, or to whatever extent that may be necessary, I document any such situations so that anyone who is picking up from where I left off (that person is often me), has a really clear statement of how the pieces currently lie.

There are numerous beneficial consequences of operating in this way.

The first one is it makes my development working very productive. I tend to turn out solutions to software problems at a fraction of the speed that it takes many other software developers. As I trained myself to operate in this way, I noticed a three or four times increase in my productivity.

A second benefit, equally important, possibly more so from the point of view of the client, is that it makes it really easy to accurately answer the question "How is the project progressing?" , and the related question "When are we going to be able to deploy this?"

Its not that my delivery dates are 100% accurate, 3 months ahead of time, it is that they are continuously updated in a realistic way based on the achievement of these mini-milestones - discreet units of complete work. Because I am able to be completely honest about the progress being made on a project, my customers know, as accurately as it is possible to know, when they can expect to be using the next version. Very often the accuracy of this information has as much to do with the success of a project, as does the software itself.