Making good software takes a lot of things and people working together. When baking a cake, the result can be good or bad, depending on all the ingredients and processes used. Just like baking, making software takes the right ingredients and processes so that the resulting product is good. But what are the attributes of good software?
Finding Important Attributes of Good Software
For people that have worked in the software industry for any length of time, defining good software usually bring up lots and lots of answers. These answers involve a range set of topics from technology stacks all the way to process efficiencies and team dynamics.
Here however, I will attempt to crystallize a lot of ideas into only 3 essential attributes of good software. Here they are:
A good software is a useful, properly working and maintainable software.
I know that this statement sounds a bit simplistic but it is not. In fact, every word in this sentence is packed with meaning. Across upcoming articles, I will attempt to unpack each of these words. For now however, let me expand a bit on this simple definition.
1. Good Software is Useful
Usefulness comes first on my list of essential attributes of good software. At this point, you can safely say duh! Of course, good software should be useful. However, there is so much packed into making software useful that it deserves a few more words.
Making useful software implies that you understand your users and you understand what problems they are trying to solve.
Whether they try to fill out their taxes or launch a satellite into orbit, your users will use your software for a specific purpose or let’s say a limited set of related purposes.
Understanding your users and the problems they try to solve takes lots of effort and collaboration with your users. This is probably one of the most difficult problems in software development.
So, make sure the software you’re trying to build is useful.
2. Good Software Works Properly
So far, you have a good understanding of what your users are trying to accomplish and what sort of problems they are trying to solve. Now, you want to build some good software.
Secondly on my list of attributes of good software comes another very simple attribute: properly working software. And again you can safely say duh! However, having a properly working software is a very loaded statement as well. Properly working software is a certain way the software works so that it is useful software. Software that works the right way to deliver usefulness or value to the user is good software.
With this important distinction, we can look at some aspects that would determine users to say that “this software works well”:
- Good software is simple and intuitive. In other words, good software is as simple as it can be for the user to accomplish their task and goals so they can derive value in an efficient way. If software is not intuitive, or unnecessarily complex, the user will struggle to extract the value they’re expecting to derive from using the software.
- Good software presents the correct data at the right time. Keeping with my desire to keep things simple, designing good software has a lot to do with knowing how to show relevant information, so the user can derive value from using the software.
- Good software works fast, or is responsive. This is another loaded statement, but looking from the user perspective again, you don’t want the user to say “why is this so slow?”.
3. Good Software Can Be Changed
When you make good software to work properly, it only follows that this good software needs to be build correctly and efficiently. Making useful software takes many tries and failures. It is a process that happens through many cycles of putting software in front of users and getting relevant feedback from them.
One of the most difficult problems to solve in software engineering is solving the disconnect between the makers of the software and the users of the software. It never ceases to amaze me how large this divide can actually be.
In my career I have worked primarily with making software but I have also had the privilege to work with customers of the software I helped make. My eyes have been wide open many times and was surprised to see how our users were using our system.
Having this reality at the forefront of software development, should help you put focus and effort in the right place. One of these places to focus is ensuring that changes and improvements can easily be integrated in the software. This again, leads to a creating an efficient team that can take changes and integrate them into the software.
Building good software that works properly requires both a good development team as well as a good software building process.
Is Your Software A Good Software?
If you take all the terms and details of software development and boil them down to the essentials, you should always focus on the software product itself. That’s what you should judge success by. If your software is useful, properly working and maintainable then you have a good software. If not, then you can focus on making your software better. Making better software should also focus on the same three principles: make your software more useful, make it work properly and make it easy to change.