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
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
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
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
“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
“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
“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
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