Categories
Software Architect

Architectural Tradeoffs

97 Things Every Software Architect Should Know – 22/97

Every software architect should know and understand that you can’t have it all. It is virtually impossible to design an architecture that has high performance, high availability, a high level of security, and a high degree of abstraction all at the same time. There is a true story which software architects should know, understand, and be able to communicate to clients and colleagues. It is the story of a ship called the Vasa.

In the 1620’s Sweden and Poland were at war. Wanting a quick end to this costly war, the King of Sweden commissioned the building of a ship called the Vasa. Now, this was no ordinary ship. The requirements for this ship were unlike any other ship of that time; it was to be over 200 feet long, carry 64 guns on two gun decks, and have the ability to transport 300 troops safely across the waters into Poland. Time was of the essence, and money was tight (sound familiar?). The ship architect had never designed such a ship before. Smaller, single gun deck ships were his area of expertise. Nevertheless, the ship’s architect extrapolated on his prior experience and set out designing and building the Vasa. The ship was eventually built to specifications, and when the eventful day came for the launch, the ship proudly sailed into the harbor, fired its gun salute, and promptly sank to the bottom of the ocean.

The problem with the Vasa was obvious; anyone who has ever seen the deck of a large fighting ship from the 1600’s and 1700’s knows that the decks on those ships were crowded and unsafe, particularly in battle. Building a ship that was both a fighting ship and a transport ship was a costly mistake. The ship’s architect, in an attempt to fulfill all of the kings wishes, created an unbalanced and unstable ship.

Software architects can learn a lot from this story and apply this unfortunate event to the design of software architecture. Trying to fulfill each and every requirement (as with the Vasa) creates an unstable architecture that essentially accomplishes nothing well. A good example of a tradeoff is the requirement to make a Service-Oriented Architecture (SOA) perform as well as a point-to-point solution. Doing so usually requires you to bypass the various levels of abstraction created by an SOA approach, thereby creating an architecture that looks something like what you would typically order at your local Italian restaurant. There are several tools available to architects to determine what the tradeoffs should be when designing an architecture. Two popular methods are the Architecture Tradeoff Analysis Method (ATAM) and the Cost Benefit Analysis Method (CBAM). You can learn more about ATAM and CBAM by visiting the Software Engineering Institute (SEI) websites at http://www.sei.cmu.edu/architecture/ata_method.html and http://www.sei.cmu.edu/architecture/cbam.html respectively.

'Coz sharing is caring
Categories
Software Architect

Avoid Scheduling Failures

97 Things Every Software Architect Should Know – 21/97

Failed projects can happen for a multitude of reasons. One of the most common sources of failure is altering the project schedule in midstream without proper planning. This kind of failure is avoidable, but it can require major effort on the part of multiple people. Adjusting the time line or increasing resources on a project are not normally of concern. Problems start when you are asked to do more in the same time line or when the schedule is shortened without reducing the workload.

The idea that schedules can be shortened in order to reduce cost or speed up delivery is a very common misconception. You‘ll commonly see attempts to require overtime or sacrifice ?less important scheduled tasks? (like unit-testing) as a way to reduce delivery dates or increase functionality while keeping the delivery dates as is. Avoid this scenario at all costs. Remind those requesting the changes of the following facts:

  1. A rushed design schedule leads to poor design, bad documentation and probable Quality Assurance or User Acceptance problems.
  2. A rushed coding or delivery schedule has a direct relationship to the number of bugs delivered to the users.
  3. A rushed test schedule leads to poorly tested code and has a direct relationship to the number of testing issues encountered.
  4. All of the above lead to Production issues which are much more expensive to fix.

The end result is an increase in cost as opposed to a reduction in cost. This is normally why the failures happen.

As an Architect you will one day find yourself in the position of having to act quickly to increase the likelihood of success. Speak up early. First try to maintain quality by negotiating the originally planned timeline. If a shortened schedule is necessary then try to move non-critical functionality to future release(s). Obviously this will take good preparation, negotiating skills and a knack for influencing people. Prepare by sharpening your skills in those areas today. You will be glad you did.

'Coz sharing is caring