My Speech on Important Points in Considering Software Architecture
August 9, 2009 1 Comment
In a recent posting, My Speech on Using Technology to Solve a Business Problem, I transcribed the contents of a speech I performed for Toastmasters. In this posting I will share the follow up speech I did titled “Important Points in Considering Software Architecture”.
The speech was developed for a non-technical audience using layman’s terms and examples. I really tried hard in the speech to simplify the ideas of software architecture. The night I did the speech, there were three speakers speaking about different topics with an audience of about 20 people. At the end of the evening, I was voted as “Best Speaker” by the audience members. I felt good about that; Toastmasters really is a great organization to help you grow your public speaking.
Ok, here is the speech!
In my last speech I talked about being effective as a member of the Information Technology field. I briefly discussed steps involved in developing a solution – from concept to development. In this speech, I will take this one step further and go over another important step in the overall software development process. I will discuss important points to consider in the area of software architecture.
Software architecture is the fundamental design of a computer program. Consider the architecture of a car. A basic architecture of a standard car should have four wheels, an engine, fuel tank, etc. The architecture of a car also defines how these components will work together to produce a working vehicle. In software, it is the same idea. The basic architecture of a computer program dictates how the computer program will work, and how it will work together with other computer programs. Along with this basic architecture are proven design patterns. Design patterns are fundamental patterns that are proven and reliable and used as a template for developing pieces of your applications. To put this in perspective, imagine someone attempting to develop a new car without knowledge of how current cars work and what their fundamental “design patterns” are. Consider the time that would be saved and the ease of future maintenance if they could build this new car upon an existing template. Would it not make sense to take in the knowledge of an existing proven design, and use it as a base model for your new software applications? Of course you may improve on top of the initial fundamental design while still keeping the fundamental concept of how the car works as per the basic car “design pattern”.
Looking at the option of being able to reuse existing components as building blocks or even sometimes main features to your software application is important. Why re-invent the wheel? Consider, when developing a new car, the cost savings that could be had in re-using standard components that have already been developed and proven on previous model years. Why start from scratch? Again, software design is very similar. Purchasing pre-existing components that have been developed by third party vendors or that are freely available could be highly beneficial. Take the following example: Your application requires a rich user experience that is highly functional with a look and feel very similar to Microsoft Word. Your development team could spend one month developing and testing this new feature themselves, but this time could have an estimated cost of $10,000. Meanwhile, there are dozens of vendors out there who are offering this as a component, or a “building block” that you can plug into your application to give you the functionality you need. All that your development team has to do is customize these proven components to suit the needs of the application. This could have an estimated cost of $1,000 for the license to use the components, and maybe another $1,000 worth of development time to customize the components as you need to. In this example, you could easily see an overall savings of $8,000.
Modularity is an important factor to consider as well when designing your software application. To be modular, is to be described as, something that consists of “plug-in units” which can be added together and on top of one another to make the system larger or to improve its capabilities. As an example, think of a modular cabinet system where you can purchase additional cabinets and add them together to make one larger cabinet. This saves you money because you don’t have to throw away your existing cabinet when you need something bigger or better. In software the same ideas apply. You can design an application to be modular so that future enhancements can be developed faster without having to re-design the application from scratch or change it to be able to add additional functionality. As an example: Part of your application contains information about customers, and now new changes will require the application to contain information about about your customer’s suppliers. Being able to develop an independent “unit” that can be plugged into the application that contains this supplier information, limits the amount of changes that need to be made to the existing program. This will save time in the future.
Designing a good workable software architecture takes time and practice, but if done properly will save you even more time in the future as you begin to work on implementing this design. Using effective and proven design patterns, pre-made components from 3rd party vendors, and keeping modularity in mind can help your development team come up with a stable and effective software architecture.