Ever wondered how some developers maintain their passion for their craft after decades in the business? How do they continue to contribute at the highest level? Where do they source their motivation to keep learning? How do they find time to do all this and share their knowledge?
Conversely, you’ve likely heard about developers who have battled professional burnout. Those who “evacuated” from coding to management? Or worse, continued to code but completely ceased learning? Or even regressed in their abilities. What might have gone awry in their careers? Could their errors have been avoided?
This blog post encapsulates over two decades of my journey as a software engineer. I was fortunate to encounter the right people at opportune moments, just when I was ready to learn from them. Their willingness to impart their knowledge, patience, and genuine skill aided in shaping my potential and understanding the path to achievement. In the following, I’ve attempted to convey the career advice I’ve gleaned from them. Naturally, I’ve incorporated my own experiences and suggestions as well. So, without further delay, buckle up and let’s dive in!
Prefer listening over reading?
Software craftsman vs a factory worker
You’re probably familiar with a legend of two wolves. TLDR: There are always two wolves fighting within us, symbolizing opposite forces such as order and chaos, good and evil. Ultimately, only one animal prevails – the one we feed the most.
This legend effectively represents two approaches to our careers as software developers: the “factory worker” and the software craftsman.
A factory-worker developer:
In most factories, a worker is simply responsible for arriving on time and performing tasks given by their manager until the shift ends. We’ve encountered developers who fit this description, haven’t we? They aren’t invested in whether their project succeeds, whether users receive a responsive and well-performing app, or whether the company they work for thrives or goes bankrupt.
Such developers are often reluctant to learn new things. After all, exploring new frameworks, programming languages, and libraries can seem daunting and risky. What if they make a mistake? It feels safer to stick to the old and trusted methods, which have served them well in their careers thus far. Moreover, if they possess unique knowledge, they typically keep it to themselves out of fear of becoming replaceable if they were to share it. In summary, a factory worker tends to engage just enough in their work to avoid being fired. Consequently, their employers compensate them just enough to ensure they won’t quit. Although a factory worker’s job typically lacks passion and may even be disliked, it provides stability, which is their top priority.
A giga-chad software craftsman:
On the other hand, we have software craftsmen. The word that best characterizes them is responsibility. They take responsibility for their education, skillset, and project success.
A craftsman seeks not only to own a project’s technical stack but also to influence business decisions. This does not mean cancelling sprints or altering user stories. Rather, craftsmen are interested in solving problems, not merely closing tickets. They consistently strive to add value to the app.
Balancing the introduction of new features with maintaining the quality of the code is key for a craftsman. In most cases, reserving 10% of sprint capacity for regular Boyscout refactoring suffices. However, occasionally, a release may need to be delayed. This is the kind of impact on business decisions that a craftsman seeks. Finally, craftsmen actively promote the sharing of knowledge within a team. They strive to cultivate an environment where developers learn new things almost every day and hold each other to the highest standards. After all, the more proficient your colleagues are, the easier it becomes to work on the project. This is because continual self-improvement is always a top priority for a craftsman.
How about you? Which “wolf” are you? Even the most skilled software craftsmen have days when they feel like giving up. Similarly, a factory worker often dreams of engaging in challenging and ambitious projects. Ultimately, it depends on which animal you choose to feed most often…
Let’s be clear: I don’t write these words to seem superior to developers who prefer routine tasks. I’m merely suggesting that this approach might not be the best for staying competitive in IT over the next 20+ years. It’s almost impossible to have a team made up entirely of craftsmen. Developers who simply “want to do what they’re told and go home” will always be in demand. But I worry that the level of technology, self-development, and daily challenges might not meet their satisfaction, especially over time.
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 or inspiring your current project might be, a day will come when you’ll have to leave. So, what should craftsmen look for when selecting their new assignments?
Truthfully, there isn’t a straightforward answer. Nonetheless, most successful software engineers I know prioritize the following traits:
Mastery:
A perpetual state of self-development. Being able to finish every day having learned something new. This is the true mastery every craftsman seeks, and it’s not confined to technical skills! Aspects such as communication and public speaking are also worth considering.
A crucial aspect of this mindset is the ability to receive feedback, analyze it, and utilize it for your growth. In my view, delivering constructive feedback is just as important. We seldom operate in isolation and fostering a healthy, honest, and dynamic team environment is of utmost importance.
While striving for mastery, it’s common to fall into the trap of comparing yourself to others. There will always be someone more intelligent, experienced, or talented. Comparing yourself to these individuals is only beneficial as a source of inspiration. Instead, consider comparing yourself to who you were six months ago. Even slight improvements are a cause for celebration.
Ownership:
When you’re unwell, you typically don’t instruct a doctor on how to treat you, do you? Instead, you would prefer them to diagnose you and propose a treatment plan. You don’t advise them on the medical equipment to use or which tests to order.
Ownership implies the freedom to choose the tools necessary to tackle the challenges you face. Of course, such a partnership with a client doesn’t develop overnight and it isn’t without cost. The ability to choose the technical stack, shape processes, and select team members, means you also bear the ultimate responsibility for a project’s success. If anything goes wrong, the blame falls squarely on you. However, true craftsmen embrace this responsibility. They maintain extreme honesty and transparency with their clients, owning up to their mistakes when they occur.
Purpose:
Do you aspire to make a significant impact with your app? To create a disruptive change, transform people’s lives, or work for a company that aligns with your core values? In essence, to be part of something more significant than just another team building yet another app? Finding such a purpose can greatly enhance your motivation.
However, it’s important to note that not all developers need this extra motivation. For some, it may not matter whether they’re creating a world-changing application or just another shopping assistant. If they can find mastery and ownership in what might be considered a “basic” project, they would be equally motivated.
Before you start hunting for your dream job, I recommend you spend some time defining it precisely. Consider what projects you’ll be working on, who you’ll be working with, and in what aspects of mobile software development you’d like to become an expert—whether that’s security, TDD, UI, or something else. Think about your desired salary and location. The more specific you are, the better.
Once complete, consider what skills this job might require. What areas of your craft would you need to enhance to be eligible for this role? What type of portfolio should you present to spark the interest of your potential employer?
When evaluating job offers, focus on those that will help you develop the skills needed for your dream job. Don’t hesitate to inquire about these during an interview. Ensure the team you’re considering can aid in improving these areas. If the project meets enough of these criteria, it should be a worthwhile choice for advancing your career.
Beware: it’s often NOT the most prestigious one, and frequently not the one with the highest hourly rate.
But what if I’m stuck?
Having the option to transition to another project is a blessing. However, life is complex and at times, personal circumstances may hinder you from exiting your current job.
Alternatively, you may value your company but feel unchallenged because you haven’t been assigned a demanding project. Or perhaps you feel overlooked for promotions despite your best efforts?
In other words: you feel stuck.
Regardless of the reason, there is good news. Your current skills and knowledge have brought you this far. To move forward, all you need to do is acquire new ones.
Ok, but where should I start? Since you’re reading this, you’ve already taken the first step: searching for knowledge online. Next, consider joining mobile developers’ groups on social media and subscribing to newsletters. Also, be sure to attend local mobile meetups and socialize. Ask people about their current projects, their experiences with your desired tech stack, and more. Perhaps they have side projects you could assist with? Working on a robust open-source project is a cost-effective way to learn good practices.
An honest conversation with your manager is also essential. Arguably, the most insightful question you can ask your boss is “Why am I on the payroll?“. Understanding precisely which daily tasks “pay for your breakfast” is invaluable. Focus on those tasks and consider delegating the rest. If your boss is reasonable, they should agree right away. It’s a win-win situation.
Consider rephrasing the question to ask about your most valuable skills. The answer might surprise you. Years ago, I mustered the courage to ask a client this exact question. To my surprise, they didn’t value my ability to produce high-quality code. As a non-technical person, they couldn’t distinguish good code from bad. Instead, my ability to explain technical concepts in a language they could understand was why they asked me to lead that project. It was a revelation for me.
Lastly, I’d like to briefly discuss the topic of work ethics. In IT, hard work outshines talent consistently. It’s a simple equation. No matter your starting point, with enough effort, you’ll eventually match the skills of the top developers in the industry.
Want some numbers to support this concept? I’m happy to provide. Suppose you aim to improve by 1% each week. Over a course of 50 weeks (almost a year), you won’t be merely 50% better. Owing to the power of cumulative percentage, you’ll actually be 64% better. This effect amplifies with time. It’s likely why many NBA players experience a breakout season in their third year.
Additionally, increasing a chosen skill by 1% doesn’t seem like a daunting task. You’ll see initial results swiftly and effortlessly. As progress becomes increasingly challenging over time, self-improvement will have already become a habit for you.
Career as an investment
The career of a craftsman is akin to an investment. It involves investing time and effort in return for personal growth and monetary compensation. Like all investments, it’s important to occasionally pause and calculate the ROI (Return on Investment).
Here are several questions to consider to determine whether your current job or project aligns with your career goal. You can either move toward this goal or drift away from it. Unfortunately, there is no middle ground.
- Can I practice the skills I want to improve?
Are you able to do that on a daily basis? Can you work alongside experienced mentors and rock-star developers and learn from them? Or perhaps you’re the smartest person in the room? If that’s the case, might it be time to find a new room? - What are my relationships with the client?
How does a client perceive you? As a partner 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 you? Can you honestly say that you “pay for your breakfast“? - How long should this investment take?
Like any investment, it’s helpful to set a time horizon for your current project. If by a specific date you’re still struggling to hone the skills you need, perhaps it’s time to cut your losses and move on?
Ultimately, each investment could result in a net gain, net loss, or break even. However, there’s a caveat: you must learn to view these outcomes from a proper perspective.
Historically, even the most successful investment assets have experienced ups and downs. The key is to accurately assess the fundamentals of the asset. If these are solid, it’s possible to confidently weather the turbulent times. However, if the asset is a sinking ship, perhaps it’s worth cutting the losses and moving on?
Summary
We began with two contrasting approaches to our task as a software engineer: that of a craftsman and a factory worker. However, as the tale of the two wolves illustrates, it is impossible to be the perfect craftsman at all times. Ultimately, it’s about which “wolf” we decide to feed the most.
Next, we discussed the traits to consider when choosing the next project. Most successful software engineers seek positions that offer mastery and ownership. If a project also aspires to make a difference, that’s an added bonus.
If you find yourself stuck in your current job, remember that you’re likely one new skill away from turning your career around. Regardless of your talent, education, or background, if you commit to working hard, you can catch up with the best in the business. It’s not mere pep talk, it’s pure math.
It’s always valuable to view your career as an investment. Like any good investment, it needs to be regularly evaluated. Each decision you make can either bring you closer to your career goal or take you further away from it.
Don’t miss any new blogposts!
By subscribing, you agree with our privacy policy and our terms and conditions.
Disclaimer: All memes used in the post were made for fun and educational purposes only
They were not meant to offend anyone
All copyrights belong to their respective owners
The thumbnail was generated with text2image
Some images were generated using Leonardo AI