The Human Side of Software Engineering: Reflections on Growth and Impact
I believe it's not so difficult to understand what makes us successful in our careers, but sometimes we need guidance to move forward. So, I dedicated time to read "The Software Engineer's Guidebook," and I'll share some of my thoughts about it, based on my perspective and experience as a Software Engineer and Team Lead.
About the Book
The book, “The Software Engineer’s Guidebook - Navigating Senior, Tech Lead, and Staff Engineer Positions at Tech Companies and Startups”, is written by Gergely Orosz, author of The Pragmatic Engineer Newsletter.
In this book, Gergely shares many perceptions and tips based on his experience. From my point of view, this content is a great opportunity to understand the key points to being successful in your career.
I’ll be careful not to reveal too many spoilers, but some might be inevitable. I’ll do my best.
My Thoughts
Along this reading, I thought about many situations that happened in my career, and I’ll share below the most important insights.
Good Advice for Growth
I didn’t feel this book revealed any big surprises. Most of what I read, I understand as basic behavior a Software Engineer should have.
I believe the last five years acting as a Team Lead changed my perspective, allowing me to understand this book very well. Leading a team helped me see the big picture and understand how to proceed in many situations. Also, this experience allowed me to understand how a company approaches an engineer’s career progression.
Some things we read don’t make sense until we have experience. I believe some examples might be difficult to understand if you’re in an initial position.
Don’t worry, because you can and will get there! But here’s my first thought:
This book explained many things I know today, but I wish someone had told me when I started as a developer.
This is a good book for people starting as Software Developers who need to understand how professional growth works in a company. It’s also a good book for experienced developers who want to ensure they continue growing and stay on the right track.
Take Charge of Your Career
Simply wanting to grow isn’t enough. You need to be in charge of your career. This isn’t your leader’s responsibility; it’s yours. Here’s my second thought:
Think about your career growth and try to answer where you want to be in the next few years. Don’t leave this decision to your leader.
When you know where you want to go, it’s easier to choose the correct path. I know this can be a challenging and stressful exercise, but only you can do it. Not your colleagues, not your leader, not your company. You need to be in charge of your career.
Of course, you can ask for help from an experienced person to clarify paths, understand challenges, or discuss experiences, but only you can decide where to go and how to invest your time.
Deliver Value
Sometimes we work hard and don’t feel recognized. This causes a bad feeling and demotivation. The best way to avoid this is to stay aligned with your leader to understand what’s most important for delivering value. So:
Talk with your leader to understand how you can deliver value for the team, project, other engineers, or the company.
Don’t give up. Wanting to grow doesn’t guarantee success. You need to ensure you’re moving in the right direction and have opportunities where you are.
Asking for feedback is also important to understand if you’re on the right track, need to improve in some areas, or make adjustments. Do this periodically, not just before performance reviews. Remember: your career is your responsibility, so stay in charge.
Understand Why
It’s detrimental to start developing a new feature or bug fix without fully understanding it. We might think we’re being productive by making things faster, but that’s often not the case. Sometimes, we fail. To avoid this, keep this in mind:
Ensure you know why you need to achieve an objective. This way, you’ll understand why, how, and when you need to do something because you’ll see the big picture.
Make sure everything is clear by asking questions, discussing edge cases and side effects. Don’t forget that when it comes to the code, you’re the expert. Only you can reveal certain details that Product folks, Designers, or Stakeholders might not see.
Before development, it’s important to see the big picture. This makes it more likely you’ll achieve the expected objective, enabling you to break it down into smaller parts, understand the main difficulties or challenges, and estimate them accurately.
Clarify to Get Unstuck
I’ve seen many great developers get stuck on issues, struggling to understand what to do. Try to avoid this by understanding and planning your work, and don’t be afraid to seek help.
Even if a problem is large, break it down to understand the challenges and where you’re focusing your efforts. If you don’t know how to do this, ask for help.
When you break a large task into smaller parts, you tend to isolate problems when they occur. Because you’re not focused on solving the entire task at once, but on a specific part, it’s easier to understand the real problem. This prevents you from feeling desperate in daily meetings (or any other meeting) because you’re making progress on a specific piece of the larger puzzle.
Remember: you don’t need to have all the answers, not even as a highly experienced developer. But you do need to be able to break problems down into smaller parts to create a concise plan.
Be Aware of Your Level
Seniority level is another important topic. What are the main differences between a Software Developer and a Software Engineer? Have you considered this? Many people think there’s no difference, but I’ll share my perspective. But first, think about this:
Understand, through conversations with your leader and teammates, how you are performing your work.
A Software Developer can write code, debug, and deliver tasks, but a Software Engineer goes deeper. They can plan a feature, discover and discuss requirements, estimate effort, build a solution, ship it, and maintain it. They can handle the entire process.
A Software Engineer delivers value for the team, not just for themselves. They provide guidance, take initiative, help the team understand software challenges, collaborate effectively, mentor others, and continuously learn. They also understand team and company challenges, quarterly objectives, and can break down large tasks into smaller ones.
I believe this is somewhat controversial and sometimes subjective. It can affect our egos, but believe me, there’s a big difference between someone who knows how to write code and someone who understands why to write code and how it achieves an objective.
Ask your leader and teammates about your deliveries. Seek feedback on your work and performance. Ask your colleagues about their perception of your work. Only this way you’ll really understand where you are and what is the best way to proceed. Think about it!
It Isn’t All About Code
We often think the fastest way to grow is by learning new technologies, frameworks, or design patterns. But we forget that we work with people on a team, so we also need to improve our soft skills, such as communication (asynchronous and synchronous), time management, and collaboration. Keep this in mind:
Even if you’re working as a developer, you’ll deal with people, and human skills are crucial for growth and making yourself understood.
It’s not just you and the machine. There’s a team with you. Don’t forget it. Always communicate well, providing updates on your issues, meetings, and documenting decisions.
Understand When a Task Is Done
It’s amazing to finish an issue and close it, but is that the end? What’s next? Should you follow up to ensure your task or bug fix was applied correctly or solved the main problem? The answer is yes. So, one more thing to keep in mind:
Your task is done when the objective is completed—that is, when your customer confirms everything is okay through feedback.
We always develop a product for a customer, so we need to develop what they need. It’s that simple.
Soft Skills Are Crucial (Sometimes More Than Hard Skills)
Another controversial topic. As you grow in your Software Engineering career, your impact increases. You’ll likely make more contributions that affect the whole team, department, or even company, impacting more people with your work. It’s common to use this expertise to work more closely with Product folks, Designers, Stakeholders, and other Managers to understand what’s truly necessary to make a real impact on the company.
Because of this, foundational abilities are crucial to progressing beyond a Senior Software Engineer career, such as into a Staff Engineer role.
Don’t neglect human skills. Include developing areas like communication, time management, meeting management, stress management, collaboration, emotional intelligence, active listening, empathy, and conflict resolution in your roadmap. Here’s the tip:
As much as you might like to just develop, building relationships with others is inevitable for growth and creating a greater impact.
This usually leads to developing leadership skills, and sometimes you might face decisions about which direction to take - just like it happened to me. But don’t be afraid. This will make you stronger and more capable of facing challenges.
Conclusion
This book has dozens of great tips and pieces of advice, and I’ve shared some of my thoughts about them. While experienced engineers might find some advice familiar, The Software Engineer’s Guidebook provides valuable tips and insights for career progression and is a must-read for those looking to advance to a senior position or beyond.
Every company is different, and you need to understand the rules and expectations for your current role or future aspirations. But these are the basics, and they tend to work well.
As I mentioned, I didn’t find any groundbreaking revelations in this book, but I wish someone had told me these things when I started in IT.
So, if you’re new to this career, I highly recommend this book. If you’re already a Senior or Staff Engineer, this is an excellent resource to remind yourself how you achieved your current role and how to continue growing.
I hope you enjoyed this post and consider reading the book. Remember that I’ve shared my thoughts based on my experience as a Software Engineer and Team Lead. If you have a different point of view, please share it in the comments. I’d love to discuss it.
See you in the next post!