Reasons to write code;
- Make money
- Save money
- Stay out of jail
- For fun
The 4 reasons
In the majority of cases the company or organisation you work for is trying to make money. We can quite often follow the work to the money;
- Add feature
- Make an existing feature more usable
So we can make things and charge money for the things. As long as we earn more than we spend, we win (unless it’s a loss leader …). However, it is not always easy to follow the work to the money;
- Record metrics of feature use
- Reduce bandwidth usage for a web page
Firstly collecting data about a feature enables you to know you are actually making money and is critical to ensuring you follow the correct direction of travel. The second example could be to make the page load faster (I’m assuming you measured before and after) and we know that fast load times are essential for user retention.
We can see that making money is a synonym for adding value. Value can be quite a vague concept and certainly value for my team is not always the same as yours.
Spending less, seems like a good idea. Some easy options;
- Use less expensive cloud compute resources
- Add a feature to email rather than print and post.
The connection between the change and the saving is direct and tangible. Some are less easy to spot;
- Change the database schema, so it uses less space, so you can use a cheaper compute or storage for your database
- Make a feature easier to use, so support calls are reduced
It is still fairly straight forward to join-the-dots and demonstrate the link between the secondary (or tertiary) effects and doing work (spending money). Even more tenuous;
- Write tests
- Make a build less ‘flaky’
- Refactor the code
As the link between the work and the value becomes longer, and in some cased more technical and developer centric, it becomes less obvious, even if it can be reasoned about. Reasoning about it is not the end though. Often you cannot easily put a cost now figure on the work, though this does not stop you and your team discussing the relative merits of any proposal and acting accordingly.
Even subjective reasoning (rather than data driven) can give your team justification to do work that will Save Money;
- making code easier to understand ⇒️ so it is easier to add new features
- reduce failures in deployment ⇒️ so less time is wasted fixing it
- reduce time to build ⇒ less time wasted waiting
Of course appearing to Save Money can have the opposite effect, use an under resourced cloud compute instance on your database, it performs poorly and you lose customers. Measurement and instrumentation is key to making good decisions then moving forward or changing tack.
Stay out of jail
Most industries, financial, medical, government, etc. have to regulations to follow. This is especially true of for security, data protection and auditing. Whilst in most cases, you may not actually end up in jail, failure to comply could result in some negative impact, possibly including some form of prosecution, commercial wrist slapping, or brand damage.
The objective here is not just to do ‘what is required’ but to do so effectively, that is without making Make money or Save Money more difficult.
As it turns out you are allowed to write software just for fun or personal interest. Depending on your organisation you may or may not get paid to do exactly that. In most cases though this is something you do on your own time. You can still have fun doing the other 3 but that is not the driver.
For fun means for just because you want to scratch that intellectual itch. It can mean learning, but if that learning is not pertinent to the product at hand, it’s probably just for fun.
Show me the money
The money I’m really taking about making or saving is really any kind of value. Value is not always easy to pin down but some easy examples;
- Money (we’ve done this one)
- People (we don’t call people resources)
- Resources (real resources like utility compute or stationary)
So remember …
If the work you are doing is not Making money, Saving money or Staying out of jail …
… then you are doing it For fun † so make sure;
- Your work is required
- It’s at the top of the priority list
† If it’s not even fun then what are you doing?