Have you ever wondered why some developers remain passionate about their craft despite decades in the business? How can they continue to contribute at the highest level? Where do they find motivation to keep learning new things? How do they find time to do all that and share their knowledge? How can one have a career like that?
On the other hand, you’ve surely heard about the developers who struggled with professional burnout. Who “evacuated” from coding into management? Or worse: continued to write code but completely stopped learning? Or even regressed in their skillset. What could’ve gone wrong in their careers? Could their mistakes have been prevented?
This blog post is a special one for me. Within, I tried to encompass over two decades of my career as a software engineer. I’ve been blessed to meet the right people at the right time – when I was ready to learn from them. Their willingness to share their knowledge, patience and true craftsmanship helped me understand who I could have become and what it would have taken to achieve this. Below, I tried to relay what I’ve learned from them about driving one’s career. Naturally, I added my own experiences and recommendations into the mix.
Without further ado, strap in, and let’s go!
Software craftsman vs a factory worker
You’re probably familiar with a legend of two wolves.
TLDR: There are two wolves always fighting inside of us. The animals represent opposite forces: order and chaos, good and evil, etc. Ultimately, only one wolf can win – the one we feed the most.
This legend accurately describes two approaches to our careers as software developers: a “factory worker” and a software craftsman:
A factory-worker developer:
In most factories, a worker is only responsible for arriving on time to start their shift. They are instructed precisely what to do by their manager, and they are expected to perform these tasks until the shift ends. We’ve all seen developers that fit this description, haven’t we? They don’t really care if their project succeeds or not. If the users receive a cool-looking, responsive and performant app or not. If the company they work for thrives or goes bankrupt, etc.
Such developers also are reluctant to learn new things. And why should they? Trying out new frameworks, programming languages and libraries sounds difficult. And risky. What if they make a mistake? Nah, it’s better to stick to the old and trusted methods. They got them thus far in their careers after all…If by any chance, they possess unique knowledge, they often jealousy keep it to themselves. If they shared it, they might have become replaceable…
In a nutshell: a factory worker will show only so much engagement in their work that guarantees not being fired. As a result, their employers pay them only enough to make sure they won’t quit. Factory worker’s a job is devoid of passion, often even hated, but it is at least stable. And that’s the number one priority for such people.
A giga-chad software craftsman:
On the other hand, we have software craftsmen. If I had to choose one word to characterize them it would be responsibility. For their education, skillset, project success, etc.
To do that, a craftsman seeks not only an ownership of a project technical stack, but also an ability to impact business decisions. And no – I don’t mean cancelling sprints or changing user stories. You see, craftsmen are interested in solving problems, not just closing tickets. They focus on consistently adding value to the app. And to do that, a craftsman needs to balance introducing new features with maintaining quality of the code. In most cases, it’s enough to “put aside” 10% of sprint capacity for regular, Boyscout refactoring. Sometimes however, a release needs to be delayed. This is the type of impact on business decisions that a craftsman requires.
Finally, craftsmen actively drive the sharing of knowledge in a team. They seek to create an environment where developers learn new things almost daily and hold one another to the highest standards. After all, the more skilled your colleagues are, the easier it gets to work on the project. This is because perpetual self-development will always be the top priority for a craftsman.
How about you? Which “wolf” are you? Even the best software craftsmen have days when they just want to let go. Similarly, a factory worker often dreams about challenging and ambitious projects. It all comes down to which animal you decide to feed more often…
And let’s be clear on one thing: I don’t write these words to appear superior to developers who lean more towards being factory workers. I merely try to point out that this approach might not be the best choice if you want to stay predictive in IT in the next 20+ years. In addition, it’s almost impossible to compose a team consisting exclusively of craftsmen. The developers who just “want to do what they’re told and go home” will still be in demand. Make no mistake there! However, I fear that the technology, self-development factor, and level of challenge of their daily tasks might not be to their satisfaction. Especially over the years…
How do software craftsmen choose the next step in their careers?
Arguably, in IT only one thing is certain – change. No matter how technologically advanced and inspiring your current project is, one day you’ll have to leave. So, what should craftsmen look for when choosing their new assignments?
Honestly, there’s no simple answer. However, most of the successful software engineers I know prioritize the following traits:
A perpetual state of self-development. Being able to finish every day having learned something new. This is the true mastery every craftsman looks for. And it’s not limited to technical skills! It’s worth taking a look at your communication, public speaking, etc.
A critical part of this mindset is being able to receive feedback, analyze it and use it as fuel for your growth. In my opinion, giving good, constructive feedback is equally important. We rarely work alone and establishing a healthy, honest and exciting environment in our team is incredibly important.
While pursuing mastery, it’s easy to fall into a trap of comparing yourself to others. No matter where you look, there’ll always be someone smarter, more experienced, more talented, etc. Comparing yourself to these people makes sense only as a source of inspiration. Instead, try comparing yourself with… who you’ve been 6 months ago. If you’ve improved, albeit slightly, it’s still a cause for celebration.
When you don’t feel well, you don’t usually tell a doctor how to treat you, do you? You rather prefer them to diagnose you and propose a treatment plan. You don’t suggest to them what medical equipment to use, which tests to order, etc.
This is the essence of ownership – the freedom to choose the tools to solve problems you are challenged with. Naturally, such a partnership with a Client does not develop in a day. It also doesn’t come without a cost. Being able to choose technical stack, shape processes and select team members, etc., means you also assume ultimate responsibility for a project’s success. If something goes wrong, there’s only one person to blame. Surprisingly however, true craftsmen welcome such responsibility. They are extremely honest and forthcoming with their Clients. They own their mistakes and transparently admit to them.
Have you ever dreamt of making a difference with your app? Create a true disruption to change the world? To be able to change people’s lives? To work for a company that truly embodies your personal core values? In short, being part of something bigger than yet another team, making yet another app? Finding such a purpose can do wonders to keep you motivated.
It’s also worth pointing out that not all craftsmen really require such additional motivation. Sometimes, it doesn’t make much difference if they create an application aiming to change the world, or just another shopping assistant. If they can find mastery and ownership in such a “basic” project, they would be equally motivated.
Before you start hunting for your dream job however, I’d recommend spending some time defining it precisely. What project(s) will you be working on? With whom? What aspects of mobile software development would be an expert there? Security, TDD, UI, or something else? How much would you like to earn? Where would you like to live? The more precise you’ll get, the better.
When this is done, try imagining what skills such a job might require of you. Which areas of your craft would you have to improve to be considered for this position? What kind of portfolio should you display to pick an interest of your future employer?
When looking at job offers, consider only those that can help you build the skills to move you toward your dream job. Don’t be afraid to ask about them during an interview! Make sure the team you consider joining can help you improve in these fields. If the project ticks enough boxes, it should be a good choice to speed up your career.
Beware: it’s often NOT the most prestigious one! …and often not one with the highest hourly rate.
But what if I’m stuck?
Having an option to move on to another project is a blessing. Life is not an easy game though… Sometimes personal reasons prevent you from leaving your current project.
Alternatively, you might simply value working for your company, but have not been given a challenging project to work on. Or maybe you feel that, despite your best efforts, you are constantly being skipped for promotion?
In other words: you feel stuck.
Whatever the reason, I have some good news for you. Your current skills and knowledge got you this far. To un-stuck yourself, all you need to do is to… acquire new ones.
Ok, but where should I start? Since you are reading this, you’ve already made the first step: trying to look for knowledge online. Next, why not joining mobile developers groups on social media, subscribing to newsletters, etc.? Also, make sure to attend mobile meetups near you and socialise. Ask people what they are currently working on, their experiences with your desired tech stack, etc. Maybe they have side projects you could help with? There’s no cheaper way to learn good practices than working on a decent open-source project.
It’s always worth having an honest conversation with your manager as well. Arguably, the most powerful question you can ever ask your boss is “Why am I on a payroll?”. Knowing exactly which tasks you perform daily “pay for your breakfast” is invaluable. Be sure to concentrate on those and try delegating all the others. If your boss is a reasonable person, they should agree immediately. It’s a win-win situation.
It’s also worth slightly rephrasing that question and asking about your most valuable skills. The answer might honestly surprise you. Years ago, I plucked up the courage to ask one of my Clients this exact question. It turned out that my added value, in their eyes, was not an ability to produce quality code. The Client was a non-technical person. They simply couldn’t distinguish good code from bad one. However, the ability to explain all the “techy” things in a language they were able to understand was the reason I was asked to lead that project. It was an eye-opener for me.
Finally, I’d like to briefly touch on the subject of work ethics.
In IT, hard work beats talent every time. It’s pure maths. Regardless of your point of origin, if you put in enough effort, you’ll eventually catch up with the best developers in the business.
Some numbers to back it up? Your wish is my command. Let’s say you resolve to become better by just 1% every week. Over a span of 50 weeks (almost a year) you won’t be “just” 50% better. Thanks to the power of cumulative percentage, you’ll be 64% better. And it gets even better with time. Arguably, this is why most NBA players have a breakout season in year 3 of their careers. On top of that, raising a selected skill by 1% doesn’t seem like an overwhelming task. You’ll get the first results quickly and easily. When it might get challenging to make progress, self-improvement will already be your habit.
Career as an investment
The career of every craftsman is like an investment. You put in your time and effort in exchange for personal growth and monetary compensation. And as with every investment, we should regularly take a pause to calculate its ROI (Return on Investment).
Here are a bunch of questions you should ask yourself to evaluate if your current job or project brings you closer to your career goal. Because you can either move toward that goal, or drift away from it. Unfortunately, there’s no middle ground…
- Can I practice the skills I want to improve?
Can you do that on a daily basis? Are you able to work with experienced mentors or rock-star developers and learn from them? Or maybe you are the smartest person in the room? If so, maybe it’s time to leave the room?
- What are my relationships with the client?
How does a Client perceive you? As a partner, who is trusted to solve their problems? Or as a factory worker, tasked with moving a ticket across a Jira swimlane?
- What value do I bring to my company?
What is my Client’s ROI from working with me? Can you honestly say that you “pay for your breakfast”?
- How long should this investment take?
As with every investment, it’s always beneficial to set a time horizon for your current project. If by a specific date you are still struggling to practice the skills you need, maybe it’s time to cut the losses and move on?
Ultimately, each investment could either be a net gain, net loss or break even. However, there’s a caveat: you need to learn to look at these things from a different perspective.
Historically, even the most successful investment assets had their ups and downs. The key here is to accurately assess the fundamentals of such an asset. If these are solid, you can confidently wait out the turbulent times. However, if the asset is a sinking ship, maybe it’s worth cutting the losses and moving on?
Finally, we arrive at the conclusion. We started with two opposite approaches to our job as a software engineer: a craftsman and a factory worker. Unfortunately, as the legend about two wolves teaches us, there is no way to be a perfect craftsman all the time. In the end however, it’s all about wolf we choose to feed the most.
Next, we discussed what traits to look for when choosing the next project. Most accomplished software engineers consider only positions that offer mastery and ownership. If a project also aims to make a difference, it’s the icing on the cake.
If you get stuck in your current job, always remember that you are probably one new skill away from turning your career around. No matter the scale of your talent, education or background – if you commit to work hard enough, you can catch up with the best in the business. And it’s not just coaching 🐂💩. It’s pure maths.
It’s always worth looking at your career as an investment. And only a few investments do well unless regularly evaluated… Your every decision can bring you either closer to the ultimate goal of your career, or away from it.