What is important in an application?
In software development there are only three measurable areas that encapsulate all that is important in an application: Rentability, quality and maintainability.
||Ultimate goal of any application. Determines if the amount of time and resources spent in maintaining the application are worth.
Main responsibles: Business, sales, marketing.
||Measures how well an application does what is supposed to do.
Main responsibles: System administrators, DBA, developers, QA.
||Measures how long it takes and how much it cost to successfully deploy a change/new development from the change request until is available for use.
Main responsibles: Management, developers, QA.
From these metrics, is important to understand two things:
- Rentability is the most important metric. No rentability = failure.
- Quality and maintainability are only important because they have an impact in the rentability. They basically represent the cost of maintaining and fixing the application.
Some examples of these metrics would be:
- Bank legacy applications. Very high rentability, very high quality but very bad maintainability.
- Successful web start-ups. High rentability, low quality and good maintainability. New web-apps that manage to get a lot of attention, with a lot of bugs, but with a small core that is easy to change.
I find it quite interesting how many developers seem to ignore these three previous areas, the mission of any software developer should be: Increase the rentability of the application through the quality and maintainabilaty.
Is important to note how code is not mentioned. The code is not an end, is a mean. If what you are doing doesn’t improve the quality or the build process, then, don’t do it. This maybe interpreted as an attack against some programming techniques, in particular refactoring, but is not. Refactoring plays an important role in maintainability, as any other engineering practice, they serve a bigger purpose, and is not the code, is rentability.
Maximising the quality
Some of the main aspects of quality to look for are:
Correctness: Correctness is about expectations. A software feature is correct if it fulfils the expectations of the customer.
Traceability: Traceability is about being able to explain what happened in the application in the past and why it happened.
Supportability: Supportability is about how easy is to fix possible errors/corruptions in the application
Usability: Usability is about how good the overall user experience is on the application, is usually about performance, UI design…
Robustness: Robustness measures how gracefully the application handles edge cases.
Scalability: Scalability is the ability to handle growing amounts of work in a graceful manner
Improving the maintainability of the application
One of the main specific areas where developers can make a bigger difference is the build. Having a bad build process is one of the biggest productivity killers in software development. A build process comprehends all the stages a change goes through since a developer commits it until it reaches production, including all the QA and deploys activities. The output of a successful build is a set of new features that work as expected in production. Any build process has two main characteristics.
Reliability. The reliability of the build process is a measure on how frequently builds that were supposed to be successful turned out to have bugs, and how critical these bugs were.
Performance. Performance is a measure of how long it takes to make a build attempt.
But is worth remembering that a non reliable build is useless, no matter how fast it is.