Making Good Software

A blog by Alberto G (Alberto Gutierrez)

Written by Alberto Gutierrez

April 14th, 2011 at 4:14 pm

What is the mission of any software developer?

with 5 comments

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.

Rentability
dollar
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.

Quality
bug
Measures how well an application does what is supposed to do.

Main responsibles: System administrators, DBA, developers, QA.

Maintainability
bug
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:

  1. Rentability is the most important metric. No rentability = failure.
  2. 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.

The mission

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.

5 Responses to 'What is the mission of any software developer?'

Subscribe to comments with RSS or TrackBack to 'What is the mission of any software developer?'.

  1. […] Y como cosa del destino acaba de publicar un artículo (el blog es en inglés) muy bueno: ¿Cual es la misión de cualquier desarrollador? […]

  2. I agree that rentability (according to your definition) is the most important factor. Many developers just ignore that and focus too much on the other 2. We will need to balance between quality and rentability as well as maintability.

    I think usually, bank system has a really high maintainability, right? Why you give bank system as an example of low one?

    Khang Vo

    16 Apr 11 at 6:58 pm

  3. The main responsibility of the programmer is to do just enough work to not get fired and not outshine workmates.

    Calvin Goldstein

    18 Apr 11 at 6:14 am

  4. Great article, as always!

    But how does rentability applies to free software?

    Rony

    18 Apr 11 at 1:57 pm

  5. Hi guys, thanks for your comments! And sorry for the late response..

    @Khang: When I say that legacy banking systems have low maintenability, I mean that it takes a lot of money, resources and risk to maintain them… I think we are using low and high maintainability with the same menaning but opposite semantics.

    @Rony: I didn’t mention on purpose money on rentability, even thought is usually the main metric… The rentability of a software is actually subjective to the stakeholders, which for open software are the very same developers. In this case is something particular for every developer, for some of them, is rentable if it is fun, for other if it comes with prestige, or if is something that you can put on your c.v…

    Alberto Gutierrez

    18 Apr 11 at 2:28 pm

Leave a Reply