Wednesday, June 10, 2009

Software Development Process

A process is the collection of practices followed in an organization.  it identifies the hats worn by people, and the artifacts they produce and consume.  It names the responsibilities that the workers fulfill, and the workflows through which their artifacts pass.  Also, a process likely includes at least some of the tools used, because automation is a big part of getting things done.

Examples of software development processes include RUP (Rational Unified Process), Scrum, and Waterfall.  To make a coding analogy, one might argue that a certain project instantiates a development process just as an object instantiates a class.

A process not only reflects the activities of the participants, it also guides their efforts.  however, keeping with the coding analogy, the humans are the virtual machine in which the process instance runs.  Therefore, people are the heart of any process, and processes are always malleable.  Even if a process purports to be rigid, it will not likely be followed for very long.

Processes can be documented, but a process description is no more a real process than a virus is a living cell.

The metaphor is apt.  Practices are captured in memes.  For example, champions of test driven development self identify as "test infected."  Very few developers who have not actually tried TDD and seen that it changes the way code gets designed could have gleaned this effect just from reading a book.

A good process will reproduce, evolve, and spread its success far and wide.  But just as some organisms can't live in some environments, the ecosystem has to be receptive to the practices embraced in a process for them to take root.  There are no "best practices."  Context is everything.

Successful processes arm decision makers with timely information, and offer guidance for resolving problems.  As a corollary, the more empowered the workers are, the more freely available such information must be, because there are more decision makers shaping progress.  The contrapositive also follows.  Without transparency, success rests on the talents of just a few privileged individuals.

Useful processes permit the measurement of and influence over:
  • Quality
  • Costs
  • Progress
  • Growth
By Quality, of course we mean customer satisfaction.  What's not quite so obvious is that many people in the organization wear the customer hat for various artifacts and services during development.

By Costs, we mean the fiduciary expenditures for salary, tools, training, hardware, and so on.   (This is sometimes more difficult than it would appear, beause a single software effort could have multiple funders, each interested in different features being developed.)

By Progress, we mean the maturing of the artifacts, such as code, documentation, and models, into a consumable or sellable state.  Often, the careful monitoring of progress is especially important to certain stakeholders.

By Growth, we mean the professional growth of the human beings who are developing goods.  This includes skills improvement, job satisfaction, value to the organization, and contributions to the profession and the art.

No comments: