There’s a lot to master in any job, but with software engineering particularly the learning never ends.
So how do we know when we’ve learned enough to do our job properly, and consider ourselves fully qualified? What level of knowledge divides a master from a merely competent beginner?
That’s a tricky one to answer, but one thing’s for sure; to be effective in one’s job as a developer, it’s vitally important to enjoy learning. All of us involved in developing software are on a journey, acquiring knowledge and (hopefully) experiencing success. But more important than the successes are the failures – because we always learn the most when we make mistakes.
Not too long ago, I presented a talk at the Øredev conference, in which I shared some of the mistakes I’ve made over the years and what I learned in the process. If you want the full gory detail, do check it out:
For everyone else, I’ve condensed the talk into a sort of cheat sheet of mistakes that made me who I am today. There’s no substitute for experiencing them first hand, but perhaps this list might make it less painful for you if you’re in a similar situation:
Zero investment will always yield zero return
For me, this mistake came early in my career, when I found myself languishing in a cushy ‘temporary job’ that became a lot less temporary than I’d originally envisaged.
It’s easy to miss an opportunity when we only have the vantage point of our own comfort zone. If and when we find ourselves in a situation where we’re coasting, it can often feel like others are holding us back; “if only the situation were different, things would be easier”...
To keep moving forward and develop your skills, you need to leave that comfortable world you know and try something new. And, since you are the only person who is in control of your own destiny, you are the only one that can make that happen.
Time spent is not important relative to actual progress
Another classic mistake is to compare our own journey in software development, and all the failures and successes we experience, to those of others. We can’t control what other people do, but we can control our own actions.
Comparing your journey to others is like apples vs. oranges… if you start doing this you’re going to have a hard time.
Conversely, if someone is not as far along the journey as you, that doesn’t make them not as good, or unproficient. We all learn differently; never forget how hard it was to learn things when you first started.
Don’t perpetuate the status quo
I think we’re all guilty of this at some points in our careers. Don’t do things just because everyone else is, or because “it’s always been done that way”. I’ve heard this line from consultants, directors, and other people who really should know better.
We can only improve our industry by continually questioning things, pushing the boundaries to find out where things break and working out new ways to do things better. If you don’t know why something is done a certain way, ask the question. You might find there’s a good reason, but you should never be afraid to ask.
The personal touch is key
When you’re trying to change things, or improve upon work that’s already been done, it’s very easy to hurt people’s feelings. Criticising code can also insult the person/organisation responsible for it, even if it’s unintentional.
It’s easy to think you are being objective and still offend someone’s feelings – the fact is that observations can come across very differently than what is intended. So always remember the people you are working with are people and have a connection to the things they have created. And more often than not, there was probably some information relevant to an apparently ‘bad decision’ that made it worthwhile – but is not obvious from the outside.
And finally, always expect to fail
This is the big one. Failure is inevitable, yet it always hits us hardest when we least expect it. If we can learn to expect it, to always have failure in the back of our mind as a possibility, then we’re ready for it when it happens. This way we can react to correct things more quickly, hopefully minimising the impact on ourselves and others.
Mistakes are always going to happen; it’s just a matter of time, regardless of how good you are or how much support you have from those around you. But the experience needn’t be negative if you can use it to improve and prepare for next time.
So my parting advice… relish your mistakes – they’re key to your development, and the rest of your journey.