| | Leave a comment Building software is like building a house in many ways. When building a house, we have to have a good foundation, strong pillars, proper plumbing and wiring, and so on and so forth. When building software, we need to have a good design, clear and concise code, proper wiring of components, etc. There is one subtle difference between building software and building a house though. Usually when we build a house, we rarely make large renovations such as adding a story, moving around walls and windows, putting in a new electrical system, or modifying the foundation. Software, on the other hand, needs to be modified and updated quite often due to changes in business caused by new opportunities, changes triggered by the economy, mergers and acquisitions, and so on. Life expectancy of a software product is generally between 3 to 5 years before major updates are required. A great number of software products require such updates much earlier in their lifecycle. In the world of software something that works is not necessarily something that can be easily modified, extended, or maintained. General observation is that the chunk of cost of software is not what’s spent on building it in the first place, but what it takes to maintain and extend it over the years. There are several attributes of quality software. I will list the most important ones from business standpoint below: Reliability Software functions each and every time in a predictable manner. You can’t afford to have your “Save” button save your documents sometimes but not others. Maintainability It’s easy to maintain software. Fixing a bug, for example, does not spawn another bug. Or moving your database to another server does not require code changes. Scalability Software can easily keep up with business growth and does not require code modifications as the user base or usage grows. This also goes hands in hands with efficiency, which is another attribute of quality software. Extendibility It is relatively painless to add new features. Also the addition of new features does not break old features. Reusability The entire software itself or certain parts of it can be reused to create new software to address other business uses. There are many other attributes of quality software, for example, usability, security, fault tolerance, etc., hence a lot of thought goes into building a quality product. The Challenge When building software, quality is something that is baked in from the beginning, and can’t be sprinkled on top after the fact. Also creating quality software requires additional time, effort, and possibly investment into proper tools. This creates an interesting problem for business users and the technical leadership alike: how to balance quality of software with investment that may or may not bring any positive ROI. There are software development methodologies such as Agile that promise quality software with minimum time-to-market. The problem with such methodologies is that if not understood correctly and followed properly, they do not yield promised results. I have come across many companies claiming to use to use Agile, for example, that are only disguising their chaotic software development under Agile’s name. I evaluate each situation and devise a plan accordingly. Quality of software is definitely important to me, but having an entrepreneurial mindset, I understand and appreciate business challenges as well. For experienced technical teams creating quality software even with time and budget constraints is relatively easy. For teams that are not as experienced, this remains to be a challenge, that often times result in major disasters.