π©βπ»π¨βπ»What makes a Developer professional?π¨βπ»π©βπ»
β© Introduction
The technology industry keeps growing, and the demand for skilled developers is increasing daily - even after the rise of the AI and the No-Code industries. However, a long-aged debate is on what it truly means to be a professional and highly valuable developer.
In a fast-paced and ever-changing tech landscape like the current one, developers are required to have a wide range of skills and attributes, not only including hard technical skills but also the infamous soft skills.
In this weekβs issue, I aim to explore some of the most controversial and debated topics surrounding the developer job: from the challenges of writing tests to the importance of continuous learning, this issue wants to explore what truly makes a developer professional, valuable, and in-demand in today's digital world.
π§βπ« Be responsible, efficient, and proactive. But also technically great.
Hey there, fellow developers! β
Today we're going to talk about what makes a developer professional and highly valuable in the tech industry. π°π»
Have you ever heard someone say that certain decisions within a company are always made by CEOs or CTOs? π€ I often heard things like:
We donβt write tests because we are not given enough time to do it - management thinks tests are a waste of time. π‘
I donβt study that much because our companies does not give us time or money to do it during working hours. β³
I often receive wrong analysis and tickets are full of missing details, then itβs impossible to avoid bugs and defects. πͺ²
Well, I disagree with this kind of thinking! As developers, we have the power to make important decisions, especially when it comes to technicalities and implementation decisions. π
Technical decisions must come from technical people, writing tests included π΄π’
Many people believe that management should be the ones making all technical decisions, but I think differently - they should work with us to better understand the business needs and enable us to ensure the quality of the product. π€
Speaking of quality, tests are crucial! π¨βπ¬ They guarantee the quality and dictate the success of our work. If anyone ever tries to discourage or question the tests, stand up for your work and explain why it's so important for the product's success. π
Remember that quality of work is always given for granted: if things go well, itβs considered normal π if things donβt work properly, someone will be disappointed. π’
This is ok because itβs a valid assumption that the work of someone should be good. We must ensure that our work meets this expectation and to do that, we definitely need tests to make sure no one except developers makes the call of writing tests or not. β
We are the technical guys, we have the technical skills and expertise to decide how to do our work and we should let no one except other developers discuss that. π§βπ»
π Learning is a developer's responsibility, not the companyβs one
As developers, we all know the importance of constantly learning and improving our skills. While it would be great if companies provided us with consistent training, it's ultimately our responsibility to keep up with the industry standards. ποΈββοΈ
Letβs be clear on this one: I strongly believe that companies should guarantee time and budget for a developer to be invested in learning during work hours. Companies must understand that learning is part of the job and consider it as a valid task during the day.
We are the developers - so itβs our responsibility to enforce this belief and make everyone understand how much important it is. There are two main things you can do as a developer to enforce this in a company:
Make it clear during interviews: when you are discussing a new position, ask about learning and make sure to understand if the company offers time and/or money to support your learning. If you think itβs not enough, be nice but say it and try to understand if you can obtain more.
Make it explicit when you obtain something thanks to your learning: especially if the company still doesnβt support you that much, and your learning came from personal time, be sure to make explicit that you were able to do better thanks to that - this will give you arguments to ask for more.
Remember!
If the company offers benefits to support your learning, be sure to respect this and make the most out of it. Itβs totally ok to fight to obtain benefits you think you deserve, but donβt forget that you have to proof that you actually deserve it.
With great powers comes great responsibilities.
Still, I want to be sure that another concept is very clear: your learning and continuous improvement are your responsibility, not someone else. You should always invest time in continuous improvement outside of work, even if the company offers you some of it because itβs up to you to invest in your career.
If you're not getting better you're getting worse [Joe Paterno]
As Joe Paterno suggests, if you donβt get better you actually get worse, because things constantly change and improve, so if you remain stuck you slowly lose value. Be sure to find a sustainable way to constantly invest in your learning.
Solve problems, not simply write code β¨οΈ
Avoid being a mere executor - always ask questions, consider trade-offs, and understand the why behind everything you do. It's not just about your coding skills, but your problem-solving abilities, too. π
Typically, this is one of the biggest signs of seniority for a Developer:
Junior devs are typically expected to simply get a task and develop the code required for it
Middle devs are expected to go a bit further and ask why we need that task and consider some alternatives
Senior devs are expected to do even more - they donβt simply ask why, but also try to understand the complete problem/opportunity that lies behind that task, entering the conversation way before the task even exists and considering all the aspects of the problem to find the best solution possible considering all the constraint (money, time, etc..) - and also consider that the solution might even not involve coding at all!
By becoming able to solve actual business problems, you'll become a well-rounded professional developer, and that's something that no AI or no-code platform can ever replicate. π
So, remember - you've got the power to create great work, make important decisions, and be a valuable asset to any company. Keep learning and keep pushing yourself, and you'll be unstoppable. πͺ
Until next time, happy coding! π€π©βπ»π¨βπ»
Danβs take ππ»ββοΈ
Iβve always been very bold on this topic, not accepting compromises. π
Right after I started to be perceived as Middle and not Junior anymore, I started to develop a very strong approach to be sure that my job was respected and I was given trust. I think the main thing that helped me achieve this more than most of my colleagues (even when I wasnβt skilled like I am today) was that itβs always been clear to me that you continuously have to earn trust and proof that you can handle responsibilities. πͺ
You canβt just expect responsibility and trust to be blindly given to you.
I always tried to learn and grow in order to be able to justify my requests and my choices and gain the trust of people working with me: you need to gain authority.
Here are some practical tips I can give you to address the topics β¬οΈ
π Learning is a developer's responsibility, not the companyβs one
Find a sustainable pace to start investing some of your free time in learning. You donβt need to start with much: keep in mind that 1cm every day means 365cm after one year.
Consistency is key. You might consider investing as low as 15/25 minutes a day or a couple of hours at the weekend.
Give yourself goals. Having clear goals will help you with motivation and consistency in the long term.
If your company does not allow for learning time in working hours (which is far more valuable than budget, IMHO) try to ask your manager if there are chances to introduce some. You can start with as low as 1 hour per week or just obtain to be allowed to invest time in learning between tasks.
To obtain these benefits when it doesnβt exist, remember to consistently point out every time a personal learning session becomes useful on the job and share your learning with the team, then use this evidence to sustain your point.
If your company already offer you some time for learning during working hours, be sure to make the most out of it; be the one that proposes initiatives like book clubs, mobbing session around a topic, small talks and discussion on a given topic, etc. They pay you to learn, so approach this professionally.
Technical decisions must come from technical people, writing tests included π΄π’
Become good enough to be able to apply high-level skills without impacting time execution. Continuous improvement is fundamental to building your skills and you must do this first, to become able to send pushes back and take full responsibility for the technical parts.
Focus on the skills that make you reliable and avoid you to stop working on unplanned work like bugs: learn TDD, Trunk-Based Development, CI, CD and Lean principles.
Donβt consider your job done and ready for deployment until you are happy with the test suite that covers it and you are confident enough about the code.
Always consider trade-offs, because there is no perfect design, and no perfect solution, there is always a trade-off somewhere. You have to consider them to take the best decision possible and not invest too much into something compared to its value.
Improve your soft skills in order to be able to get the most out of conversations, especially with non-tech people.
Solve problems, not simply write code β¨οΈ
Donβt consider your job to begin when you receive a ticket. Strive for being involved in the development process of a feature from the beginning, when the idea/problem/opportunity raise and be part of all the refinements, analysis, exploration and experiments - all those tasks that should happen before coding.
Approach problems from a business point of view, not simply technical: consider the budget the company has, the money already spent, and the time we have in order to achieve the result. Avoid building a castle if a small house is enough, even if building a castle is technically intriguing. We are supporting a business, not playing a game.
Consider the full picture and you will solve problems way better than ever. Ask questions about the origin of the problem/opportunity/idea, ask questions and deep dive into the complexity of the problem to understand the real need.
In general, be proactive and donβt accept dysfunctional approaches to work. Try to improve all the things, not only yourself but also the company as a system, the team, communications in general, etc.
Strive for excellence in everything from technical details to people management. Be an example for others of what excellence means so that you have the authority to require excellence from everyone else.
Go Deeper π
π Books
- Professional PHP - a book about being professional as a developer with a focus on the technical part. Examples are in PHP but are applicable to all OOP languages.
- The Pragmatic Programmer - Brings together pragmatic advice on everything from personal career fulfilment to more effective architecture.
- Non-Violent Communication - Nonviolent communication has been developed specifically to enable people to be able to cooperate and communicate effectively with the people around them.
- Practice Perfect - is a valuable read for everyone who wants to help their employees grow and excel through practice.
π© Newsletter issues
- How to Get Better at Learning from Experience [Range Widely newsletter by David Epstein]
- Why most software teams are inefficient [Craft Better Software newsletter by Daniel Moka]
- What is Code Quality? β [Refactoring newsletter by Luca Rossi]
- You can't be agile without CI/CD and TDD [Optivem Journal by Valentina CupaΔ]
π Blog posts
- 12 Essential Habits to Learn to Become a Professional Software Developer
- On Being a Professional Software Engineer
- Continuing Learning In Software Development
ποΈ Podcast episodes
- Habits of Successful Software Engineers - Getting to Code Quickly and Model Thinking [Developer Tea podcast]
- How to Learn Efficiently in Software Development [Simple Programmer Podcast]
- Beyond Becoming a Software Engineer [Think Like a Developer]
π¨π»βπ« Online courses
- Exercism - the best online learning tool to learn programming languages and discover new Katas
- Mastering Backend - Backend developer learning journey platform
- Frontend Masters - Frontend developer learning journey platform