Design : Changing Definitions

When I started working, software design used to be a phase where all senior ppl in team worked on trying to define what needs to be coded. The idea of this phase was to create an artifact which detailed the design to such a level that it could be given to the developer, who in turn would just code as per the design and everything will be great.
This process & steps are exactly how things would happen in any other engineering domain like construction, electrical engineering with the architects and engineers deciding on the design & workers creating the product from the blueprint.
BUT what promoters of such design phase and distinction forgot was that software industry is different. Here we dont have dumb workers in software, infact this distinction is not necessary as all are knowledge workers. Thus came the problems of changing design or code being different than the design. Secondly what the above approach forgets is that software development is not yet a defined or a predictive process but rather an empirical one and thus cannot be approached in the same way.

What I feel is that design should be evolutionary rather than planned and thus should be taken as part of coding and refactoring phase done by the developers. I am not totally declaring the design as a dead and redundant phase.. but only trying to change its definition and scope. As a phase, there should be design in each iteration where we identify the contracts (UI, interfaces with external applications, Business Interfaces) with their Api and its behavior. Also we should have robust coding and architecture guidelines specific to the project besides the generic ones.

The contract - behavior information along with project specific development guidelines are sufficient for the developer to create a code-base meeting the needs and infact there are high chances that they will discover a new Api or a need to modify one to address the needs better. That is the time they should help evolve the design in consultation with the design authority rather than avoiding following the design which is the usual stance. Infact the design should be expected to evolve over time & iterations and the code-base expected to become more robust with refactorings during the iterations. Also the development guidelines should keep getting evolved.

Infact one of the better ways to ensure a living development guideline is having it on the wiki instead of word document :). Infact same holds true for the design also ... it should be an artifact which is available in developers IDE itself allowing him to evolve it rather than as a separate UML diagram :)

If this appears greek mumbo-jumbo .. some of my thoughts are better explained by Martin Fowler in his article - Is Design Dead?

3 comments:

Anonymous said...

Well done!
[url=http://qqjwzdax.com/gvum/ltff.html]My homepage[/url] | [url=http://mwzxsyok.com/xndd/cdmk.html]Cool site[/url]

Anonymous said...

Thank you!
My homepage | Please visit

Anonymous said...

Good design!
http://qqjwzdax.com/gvum/ltff.html | http://wnbztcnj.com/fzkz/yjse.html