How you pay for technical debt

You are a developer working on a bespoke accounting software for your client. You need to deduct PAYE for the employees when the payroll runs.

PAYE in Kenya currently stands at 30% and for all you know, it has always been like that. So now you have a choice, simply multiply payout by 70% to get the net pay or write out a taxation module with appropriate config files that control what actually gets charged. In the first option you will only spent a minute or so writing the code, the second option obliterates your weekend. What option would you go with? Why?

Like any good consultant if you asked me what to chose, I would say it depends, but if it was my personal choice then second option it is. Now just to be clear I love my weekends as much as any other bloke. But the repercussions for the first decision are way too painful for me to bear. Here is my why.

Unplanned work

As a modern developer, you get to do a lot of planning. From sprint planning sessions to daily standups detailing what you are going to do, plans abound. And why not, planning gives us a special power,it allows us to see not just what happened but also what is going to happen.

Lurking in the shadows is unplanned work.

    Like matter and antimatter, in the presence of
    unplanned work, all planned work ignites with incandescent fury, incinerating everything around it

What is unplanned work?

Unplanned work is when you are late to go to work but you wake up to a flat tire

Unplanned work is when facebook decides to shut down parse and your entire backend is written on top of it

Unplanned work is when you get a bout of the flu during release week

Get the idea?

Obviously some unplanned work is out of your control, but a good chunk of it actually is. That good chunk is the one that arises when you don’t take any steps to mitigate project risks.

You see risk does not play nice, if you don’t actively attack it, it will attack you. It’s primary weapon of choice is….. You guessed it, unplanned work.

Flat tire? No problem spare wheel good and ready to go and factored in some buffer time before first engagement of the day

Facebook shuts down parse? No problem you only need satisfy the interfaces you had defined and inject them in lieu of parse.

Got a flu? Your code was always in deployable state with a working Continuous Integration process in production

Is my choice any clearer? You see by choosing the first option I would have let the beast of risk and unplanned work right in.

For one weekend sacrificed doing it right I have mitigated the risk of:

  1. Government changing its tax policy
  2. Client hiring expatriates, they don’t pay PAYE
  3. Client instituting institutional wide deductibles
  4. etc

You can bet that any of the above scenarios is going to cost you way more than a weekend.

By taking the first option you took time on usury. You traded in a small amount of time now for a much bigger amount of time later. On the short term you may be able to get away with it but remember all dues eventually must be paid.