Imagine an office building with a broken elevator. Further imagine the people that work in this building have complained incessantly to the building’s management about having to climb all of the stairs to get to their respective offices. The situation has gotten out of hand and management is forced to do something about this. So they hire a consultant to help them figure out the cost to make this go away.
After two months of investigation and research, the consultant comes back to management with the following assessment. “Based on our research, the cheapest you can get the elevator fixed for and have it done right is $1,250,000.00”.
Enraged by that dollar amount, management brings in a more creative consultant to look into things. The whole while, the tenants are complaining more and more.
At the end of this second investigation, management purchases and installs floor-to-ceiling mirrors by the stairs on each floor. Miraculously the complaining stopped and the problem has been solved. Or has it…
I know that some of you are thinking that this is going to be a lesson in doing things the right way versus cutting corners, but that’s not where I’m going with this. Instead, a more important observation needs to be made. The lesson I’m about to illustrate to you is one that I learned towards the middle of my career, but I wish I’d known the very first day.
Here’s the summary of the report from the second, more creative consultant.
“Research has shown that people enjoy looking at themselves. Even if the person doesn’t consider themselves to be overly attractive, they still cannot resist the urge to peek at themselves in a mirror. Given this angle, I think you can get the occupants to stop complaining by installing mirrors by the stairs so that they have many opportunities to view themselves as they walk. This whole process should take less than 2 days and cost you less than $5,000.00”
What did the second consultant know that the first did not?
The fledgling problem solver invariably rushes in with solutions before taking time to define exactly what is the problem that’s being solved.
In this example, the first consultant was trying to solve the problem of getting the elevator fixed in the most reliable way. Unfortunately, that wasn’t the problem that management was trying to solve.
Management was trying to solve the problem of stopping the workers from complaining.
It’s vitally important during your career that you frame all of your conversations carefully so that you and whoever you’re collaborating with are working on solving the same problems at the same time.
On this site, when I talk about successful software, I’m always referring to software that doesn’t force any of the developers to pay the cost for that system.
What is that cost? Well, in dealing with software there are two primary costs that always play a part in that equation. They are so intertwined that I often refer to them as a single unit, even though there really are two separate costs.
The number one cost that software makers have to pay for a sub par system is Time. As we all know, Time is the single most valuable resource known to man. Once it’s gone, it’s gone forever. I find that younger people don’t really think about this that much, but if you’re in that group, you need to really pay attention to where the time in your life is going. You don’t want to reach old age and look back and wonder where the fukk it all went.
The software industry is notorious for forcing insane hours and irresponsible overnight heroics. That shit ain’t cool at all.
Note: I strenuously encourage everyone to take the time to click (and read the contents of) that link I posted above. Here it is again, to make sure you can find it. It’s long, but well worth it. Even if you don’t read it, I’m sure most of you have your own stories to tell about the fukked up time demands of our craft.
For a significant portion of my career, I thought that this was just the way it was supposed to be. I’ve had to work long hours so often that it seemed like it was just part of the job. In addition, it wasn’t just me, it was all of us. Everyone worked ridiculous hours because we all thought “that’s just how it is in software”.
I didn’t know any better back then.
Eventually I began to notice that it’s really me who controls how much of my free time I have to devote to my job. Not by being a thug and just gangsta-ing my way out of extra hours. No, not like that at all. Rather by improving my skill at my craft via imposing the disciplines passed down from the Gurus about how to build maintainable systems.
Once I got better, the need for this type of overtime just went away. My job was taking hours off my personal life, because I was going about this shit all wrong.
My code always suffered from one or more of the four plagues, and as a result it always took a long time to do stuff. I simply did not know how to build code that was prepared for change. As a matter of fact, I’d get extremely pissed when they wanted something changed.
This was because I spent a lot of time and effort to get it to match the spec perfectly, and then these bastards would come along and want to change it in some way that completely invalidated everything I’d just built. So I always argued about why it should be left alone and I always looked for work arounds to whatever it was that they wanted that didn’t involve me changing the code.
We clearly weren’t trying to solve the same problem.
Management was trying to solve the problem of making the software more valuable. I was trying to solve the problem of me not having to spend more time on something that matched the previous spec perfectly. I was trying not to pay the Time Tax.
As much as I hate to admit it, I was wrong and they were right. The entire reason for my existence at my place of employment was to use my skills to make the software more valuable. If I wasn’t doing that, then why did they need my Black ass there? They didn’t.
To them, they didn’t care how long it took me. They just needed shit done and they needed me to make it happen.
Eventually I learned to anticipate change and stopped filling my code with plagues that basically made rapid changes impossible… then I started having to pay the Time Tax for other people’s code. Ugh.
Most software ninjas are salaried. In the United States, this means that no matter how much you work above and beyond 40 hours, you still get paid the exact same amount as if you had only worked 40 hours. There is no financial compensation for working extended hours.
It logically follows then, that for every hour you work beyond 40, your per-hour pay becomes less and less.
Say you make 50k annually. That equates to about $23.96 per hour. If you had to work two hours of overtime on any given day, then your hourly wage for that day has effectively been reduced to $19.16. That’s a 20% reduction in salary for the day. In other words, you worked two additional hours to get the same money that you were already making.
The very minute this happens, you’re losing money and lots of it. Well, I guess I can say instead that you’re giving money away.
Note: It’s possible (but unlikely) that you don’t have to pay the Money Tax (maybe you’re a contractor and you get to bill for every hour you work or you work for a company that has awesome compensation packages).
When I say a software ninja has to “pay the price” for poorly constructed systems, I’m always referring to the Time Tax and probably always the Money Tax too.
The goal for every one of us should be to build the software so that we can finish every assignment in the time allotted and not one nanosecond more.
I don’t mean that your delivery cycles should have less work in them either. I mean that whatever the work is that your team has decided to do, you should be skilled enough to do all of that work without a single nanosecond of overtime.
Furthermore, should the nature of that work change mid-stream, you still shouldn’t have to spend a single nanosecond more than the original allotment because you should’ve built the system to embrace change.
When you don’t leave your implementations room to grow, you end up paying the Time Tax sooner or later. Don’t put yourself or your team members in this position.
Now there are times when the volume of work is so large that there just isn’t enough time in a standard work day to get it all done, no matter how boss your skills are. This usually happens in startups or very small companies where everyone is needed to pitch in and go the extra mile.
In these situations, your team must decide how much personal time you all are willing to give to the tasks at hand. I can’t make that call for you.
However, if the volume of work requires 30 extra hours of overtime on its own, don’t you turn that 30 hours into 100 hours or more because of your garbage crafting skills.
Notice that in this entire article, I’m only referring to what poorly coded systems cost you as a software ninja. I haven’t even begun to mention the many ways the business suffers such as low morale, loss of money, and missed opportunities.
Your goal is to increase your own personal money and free time while decreasing extra work-hours. You want your Time Tax to trend towards zero while your personal money and free time trend up.
If the Time Tax is trending up, then your money pile and personal-life pile will certainly be trending down. This is inescapable.
Try to never get the Time Tax levied against you.
Learn to build software that’s conducive to change and learn it quickly. If you build it wrong, somebody is going to have to pay the piper sooner or later.
This too, is inescapable.