Skip to content

Design as the silver bullet (my take)

While I agree with most of what  Elvis say. There is a need to look deeper, there are open ends:

1.) How do you determine individuals are “qualified and prepared”?

2.) Assuming you can consistently solve point 1, if the individual does not care, is not motivated, then all preparedness and qualifications, and even professionalism wont help.

3.) Assuming all the above are covered, there still is the human condition. Meaning we are creatures of interpretations, and this adds to the complexity.

I think design is important, but seldom does the designers have the full picture of what’s being designed. We want to approach software design, as an architect approaches the design of a building. The problem is that the best architects, do an extreme amount of research before starting the design process. Things like:

  • Location.
  • Elevation
  • Soil
  • Dispersion,
  • Region
  • Are earthquakes common place in this region?
  • Are hurricanes or tornadoes common place here?

Among many other things they consider before putting pencil or pen to paper, or going into CAD. When the above is decided they work out the best materials for the location, and design they envision. They then analyze costs and what not, make compromises and arrangements to mitigate costs.

After all this they start what we (developers/software engineers) call the design process, and that’s making drawings or mock ups, showing it to the client, changing to the tastes/needs of the client, when everything is agreed upon, then the plans are made and drawn, there may be a need to adjust the budget here. Then we have peer reviews in the form of all the revisions, etc.. needed to get approval for construction.

So this is a very time consuming process, and one that most Software designers don’t even bother with. Most don’t know or care where the application is going to run, or an idea of the resources need for said application, or whether the application really benefits from a heavily threaded system, or if going that route may be even more detrimental performance wise. They just don’t know or care. I’m sure there are numerous exceptions to this, and there are quite capable designers that take all the above in consideration, but I believe they are the minority.

Some of you may ask: So, If I want to design an application, I should take into consideration and know about, the Operating System, the Web server, whether threads may help or make it worst, etc?

My answer is a conclusive yes! You should research and know about all of this to make inform decision on what is needed and why. For example: IIS and Apache are completely different servers, and have different requirements maintenance overheads, performance tweaks, etc.. Same goes for the DB, and how you deal with replication, etc..

If you do all the above, it’s easier for the DB engineers to prepare and optimize querys, etc.. for the application, because there is a clear picture, of what is expected of the DB. Same goes for the other parts of the equation.

So yes, properly designing software is hard, but really what that’s worth having or building isn’t hard? The problem in my view is not the silver bullet (I personally don’t think there is one) but I do think the approach described in worst is better is better than the approach that’s being nurtured in the enterprise, working but needs occasional reboots it’s great to good. Everything below that is good to ok.

This is a very interesting topic, and complex topic, hence all the papers and research around it.