One of my mentors at Apple used to say “With infinite time and infinite resources, an engineer will produce nothing”. I believe this to be true. This is because given infinite time and infinite resources an engineer will build and rebuild the same project over and over again. Each time better using new lessons they learned and new materials and techniques that have become available. For example they will build the equivalent of a bridge then a new type of steel will come out. Well they want to use that new type of steel so they would tear down the bridge and build it again with this new steel. Or perhaps a new technique for building bridges is found that is better. They will tear down the bridge again a second time and rebuild the bridge again and so on. Each time the bridge is better than the last bridge but the construction never truly ends. In the end the bridge is almost never usable by actual commuters because it is always under construction.
Producing quality software is always a challenge. But in order for quality software to truly be quality software the software needs to be used by customers, that is it needs to ship. Or to use Steve Jobs phrase “real artists ship”. This means it needs to be shipped to a client in a certain amount of time while it is still relevant to the client. Or often to meet a deadline where it is meeting a client needs. Meaning that the engineer is time constrained on a project and resource constrained as well since no client has infinite budget.
Because software development and software engineers are always constrained by deadlines creating Quality software is always a challenge. It is always a series of tradeoffs and choosing the best alternatives available given non-infinite time and non-infinite resources to build the project. We want to produce quality but are constrained by the world in one way or another.
A lot of young engineers and even young teams believe that if they follow a certain process this alone will produce quality. They may in fact be correct in their case, but creating quality is about more than a process. It is about a mindset and a personal responsibility that is taken to heart. This mindset is more important than the system – it trumps the system. With this mindset an engineer will always look to improve the existing system over time. The systems and processes have changed greatly from decades ago when developers used to work on the software that is still used in banking transactions today, but they managed to create quality even though they didn’t have all the features of modern compilers and other systems available today. It is about taking that personal responsibility to heart and using every opportunity you have as a engineer on a time and resource constrained project to produce the best quality you possibly can.
It is a mindset that leads the software developer to take that extra time to make sure everything is correct and they are trying to improve the quality of projects over time. Every time you touch a project to strive to improve the quality of the code so that the project is always better off than before. For the engineer to take extra time to test every possible scenario and to check that the solutions they are using will work and are the best solutions possible within the constraints. As engineers We are always constrained by deadlines and time available to work on a project but it’s about maximizing the value and benefit to the user. Always remembering that the customer or user (not you) is the ultimate decider of what is quality. Since it is their money that will buy the product and their reviews you will see posted about your products.
This is why creating quality is about personal responsibility. Taking every opportunity available to try and improve the project you work on, the code you write, the project being worked on as well as improving yourself as a software engineer. Steve McConnell, one of the lead engineers on an early version of Excel, recommends programmers need to read books every year to improve their craft and improve as engineers. I agree with this and it’s all encompassed in a mindset that leads to continuous improvement of yourself, your code and the projects you work on over time, so that quality continually improves over time.
Quality software can only come from within.