Coding Without Limits
Let’s imagine a developer’s life without limits.
What would we be able to accomplish if we were not victims of time pressure, blockers, inherited code bases, political games or economic distress?
What if we could dedicate all the time in the world to design and build our solutions with no dependencies blocking our way. Just a clean slate sprinkled with hope and glory in a perfectly functional organisation surrounded by magic money trees. Wouldn’t that be nice?
Let’s face it, we all have those days where we feel like external pressure and other constraints are limiting our abilities. But what are these factors?
“I don’t have enough time”
Maybe our time is limited by yet another artificial deadline. Or management is not allowing us to use some extra time to pay down some of the technical debt we’ve introduced in the past few months. We might also feel like we could use better technologies to improve our lives but either higher forces disagree with us or the code base is just too much of a mess to upgrade.
This is mostly what most of our limitations come down to, lack of time. Deadlines exist for very good reasons, they might sometimes be exploited by a bad management team, but without a deadline, Parkinson’s Law almost always applies:
Work expands so as to fill the time available for its completion.
Think about how many of your side projects haven’t seen the light of day and have been left unfinished. This is most likely because you allocated unlimited time for their completion.
Deadlines can be a great productivity tool if used correctly. They should be aligned to a clear scope that is achievable. Without deadlines and goals, we would probably lack the necessary focus to move a project forward.
The same applies to our everyday lives. We set our life goals and we start by planning ahead the first few steps towards reaching our goals. We make adjustments to our plans as we go depending on the change of circumstances. We still do this even though we know our time on this planet is limited. We don’t really know when our clock will stop ticking but that’s the beauty of it, we know there is a time limit but we don’t know what it is, we still feel like there is going to be enough time. Would we act in the same way if we were immortal and we had unlimited time to achieve our goals? Probably not. What if we were told we only have one year left to live? Most of our goals would probably become pointless. We would reprioritise. Maybe our dream was to travel the world? I guess we would do that instead.
In short, deadlines help to focus and prioritise. It doesn’t matter if the projects are your own, or your company’s or it’s just freelance work. Having time limits can help to avoid procrastination.
“I’m working on it”
As developers, we like to chase perfection. It is one of the reasons why we can very easily become addicted to refactoring. Refactoring might give you that instant gratification you are probably not getting from your day to day development tasks at work. My advice would be to try and figure out a way to fix this counterproductive behaviour and act in the best interest of your company, your career and your well-being by breaking this highly disruptive infinite loop.
Focus more on the actual software design and allow the low-level implementation details to be a little dirtier as long as they are doing the right thing. A broken design will most likely compromise most deadlines and will destroy your motivation, while a not-so-dry but nicely designed working software will usually suffice.
I’m not saying that refactoring is not a worthy activity, I’m only saying we should realise when we are overdoing it. The same applies to a whole load of other things, like trying to achieve 100% test coverage, doing continuous infrastructure changes and spending endless time on other challenging activities that allow us to escape from other tedious work.
Dependencies are another, mostly unavoidable, limiting factor. If we have dependencies blocking our workflow we tend not to be very productive. We don’t want to risk starting new tasks if there’s the possibility that we will have to context-switch later on if the blocker is finally resolved.
There is no panacea to help with this, though, but planning ahead can help reducing blockers. If possible, you could also help the teams you depend on doing the work that’s blocking you, instead of waiting around doing nothing and feeling frustrated.
“I’m don’t know anything about this”
Sometimes we also feel like our lack of skills in some development areas can limit how much we can accomplish. The only solution is to get our hands dirty and try to gain those skills. Sometimes study and practice are enough, but most of the time real-world experience is necessary.
If only we had unlimited time we could learn about every possible technology and gain all the experience we needed, but again, that is not the case. Being proactive and learning things outside of our current scope will help to prevent us from building these virtual walls limiting our ability to do more in the future.
“I’m not allowed”
Politics in companies can also be very limiting, and in various ways. Organisational structures might limit the impact we can have on the overall company success, it might limit how much we can learn and improve and it might limit our career progression. Try to proactively improve the situation, be heard and if that doesn’t work, consider trying to find a less political place to work.
“I can’t think of a better way”
Thinking outside the box can help problem-solving. If your creativity feels limited, you should know that the power of your imagination is not fixed. You can actually train yourself to be more creative. You can read more, play more, meditate, write more and stimulate your creative thinking. Like everything, you can get better at it.
“I need more powerful hardware”
As software engineers, we have a lot of power in our hands, but at the same time, we are still limited by the laws of our physical world. Software is not ethereal, it runs on fixed real hardware, networks are connected by physical cables, concurrency has to be carefully taken into consideration.
These limits are unbreakable, we can make progress and improvements through research, but they will never go away completely. Although we might feel powerless, it’s good to keep in mind that these limitations are what actually makes our job interesting. If building performant software at scale was easy, it would probably be too boring for the sharpest minds looking for a challenge.
“I don’t have enough money”
We also have economical constraints. You might have the best ideas in the world but you know that they would require a fair amount of funding to be materialised. Having to figure out a viable way to bring a new product to market can be both challenging and rewarding.
If we had unlimited funding, would it be easier? Or would we just end up with even bigger ideas? Hard to tell. I’ll let you know if I ever become a Bitcoin billionaire.
You can choose to overcome some of the limits while embracing others. Having time limits, dealing with dependencies and a broken software design, having to learn new skills every day to keep up with the advances intechnology, finding smart ways to fight enterprise politics and hardware limitations with limited money is what makes our job interesting and rewarding.
As engineers, we are not the kind of people who like things to be easy, trying to break the limits is what drives us to do our best every day.
What would coding without limits look like to you?
Tweet your thoughts using the hashtag #CodingWithoutLimits