RailsConf 2023

Breaking the Grind: Crafting Your Ideal Software Engineering Career Build

Breaking the Grind: Crafting Your Ideal Software Engineering Career Build

by Ole Michaelis

In the talk titled "Breaking the Grind: Crafting Your Ideal Software Engineering Career Build," speaker Ole Michaelis explores the intricate journey of building a successful software engineering career through metaphorical parallels to role-playing games (RPGs). He introduces the concept of 'skill trees' commonly found in RPGs to represent various career skills and paths in software engineering. The talk emphasizes the diverse roles and competencies essential for growth in the field, encouraging attendees to view their skills as tools within a structured framework.

Key Points Discussed:
- Importance of understanding career as a multifaceted journey rather than a simple trajectory from junior to senior roles.
- Introduction of the 'Career Vectors' tool to categorize skills into six key dimensions: Hands-On, Strategy, Delivery, Management, Commercial Knowledge, and Domain Depth.
- Each skill is likened to a different 'node' on the skill tree, where engineers can unlock new achievements, advance their expertise, and branch into new areas.
- Anecdotes from the speaker's personal experiences, including his progression from a software engineer to an engineering manager, highlighting the differing skill sets required at each stage.
- Discussion of practical skills such as debugging, programming principles (like SOLID principles), prioritization of tasks, and the significance of hands-on experience and delivery in attaining project goals.
- Exploration of commercial awareness, emphasizing the need to understand how one’s work translates into value for the company and its customers.
- Additional insights into effective communication strategies, team management, and personal development techniques, including non-violent communication and feedback mechanisms.
- The importance of adapting to team dynamics and cultural differences while pursuing personal career growth.

Michaelis concludes by reinforcing that individuals must take responsibility for their career development and suggests utilizing the 'Career Vector' framework to assess current skills against desired career goals. His talk encourages engineers to think strategically about their learning paths and to actively engage in building out their professional toolset for continued success in software engineering.

00:00:19.880 Thanks for coming to my talk.
00:00:25.320 I have a lot of material prepared and I know I talk very fast. When I prepped, I aimed for 15 minutes, but I'm now aiming for 30. If you realize I'm speeding and it's too fast, just give me a note. This talk is for you, after all, and I'm aware of the content. So please feel free to give me feedback.
00:00:50.059 If you want to follow along on your device, just scan that QR code. It will lead you to the same board that I'm using. You'll also find some Easter eggs on the board that I won't have time to explain, as I've had to cut some material out of this talk.
00:01:15.180 This is a mirror board you can tag along with. I trust your ability to decide whether to focus on the board or to listen to me as I walk you through it.
00:01:37.200 When I was 18 in 2006, I spent a lot of time online, playing as a level 60 holy priest in a game. We were one of the first to defeat Ragnarok, and I was incredibly invested in that world. I was so focused that I didn't even finish high school.
00:01:47.820 Who would have thought that, 20 years later, the skills I picked up at that time would actually come in handy? That's essentially what I want to talk about today.
00:02:00.300 I joined a company called Ian Simple in 2016, and that's when my journey began. Although I've been a software engineer for much longer, this is where my ideas started gaining momentum.
00:02:19.379 At Ian Simple, we help you manage and register domains automatically. You can use our API to manage these tasks. If you're interested, feel free to talk to me or my co-worker Juan about the domain part of our services.
00:02:31.140 What I will discuss today pertains mostly to Ian Simple’s internal processes, rather than the products we sell. I’m part of the registrar operations team; and no, we’re not sitting in a cellar, as this was the only place I could find server access.
00:02:43.140 Our responsibility is integrating with the different registrars we work with. A year ago, I became the engineering manager of this team, and I learned a few things along the way.
00:03:02.340 Becoming an engineering manager is not merely a promotion—it's a career change. It requires a different skill set, as you are now leading people who are doing the job you once did.
00:03:15.060 When I think of skills, I like to think of them as tools. Each skill I have solves a particular problem. However, unlike a toolbox where tools are sorted, the way I have ordered my skills hasn’t always made sense.
00:03:30.420 For a long time, I didn't categorize my skills; I didn’t think of compartments or buckets to place them in. I was stuck in the metaphor of a toolbox, returning to it whenever I faced a problem at work. I'd reflect on what I knew and which skills I had that could help solve the issue.
00:03:48.780 Someone may need a hammer to solve one problem, while another might require a more precise tool. Part of my job as an engineering manager involves helping people grow. One of the significant tools I learned about is called 'Career Vectors.' This concept isn’t something I developed; it comes from Marie Williams, who also runs workshops.
00:04:06.659 This tool helps categorize skills into six vectors: Hands-On, Strategy, Delivery, Management, Commercial, and Domain Depth. Hands-On refers to the tasks you perform daily as a software engineer, like writing code and using your editor. Strategy involves the skills necessary to move the company forward over the upcoming months.
00:04:26.160 Delivery combines those skills—it’s pushing code out, moving the product forward, and finally shipping progress. Understanding how your organization operates is integral to management. Commercial aspects involve grasping how money is made at your company.
00:04:46.440 Domain Depth is the knowledge about the industry in which you work. For us at Ian Simple, it's about domains, but for other companies, it could be different.
00:05:02.640 Seeing this reminded me of a familiar concept—Final Fantasy 10's skill tree. I suddenly realized that I could categorize my skills into this skill tree, and I wanted to explain this to you. For those who haven't played Final Fantasy 10, it's a great game and worth your time.
00:05:27.600 This skill tree allows various characters to play and level up, and as you gain experience, you unlock new abilities. It's a great metaphor for how we can build our skills over time.
00:05:44.400 The skills we acquire can be akin to leveling up in a game, where we may not all progress at the same rate, but ultimately, we have the potential to learn similar things, albeit at different speeds.
00:06:02.760 This concept led me to a personal experiment: I wanted to draw a similar graph or tree to illustrate the skills in software engineering and organize them effectively.
00:06:17.340 Before we dive deeper, let me mention a fantastic vacation spot: everything I'm sharing is from my perspective. I recognize that experiences may differ, and if you have insights that challenge my convictions, I'd love to have a one-on-one discussion after the talk.
00:06:36.420 But as I discussed my ideas during this rehearsal, I found it hard to fit all the content in, which may still happen today—but we will skip some obvious topics.
00:06:54.540 What I want you to take away from this talk is to get an overview of various skills and practices covering our discussion today. Each topic is rich enough to deserve a dedicated talk.
00:07:18.840 I'd like you to walk away with a list of things you want to explore further. It's essential to empower yourself to search for these topics and learn about them, even if we can’t cover all of them in detail today.
00:07:46.440 The first branch I want to discuss is the Hands-On branch. Starting with the basics involves knowing your editor, Git, and also studying Computer Science essentials such as algorithms and databases.
00:08:02.640 One critical area is data structures—something I wish I'd focused more on during my education. I've come to realize that writing code primarily involves lists and hashes, solving nearly all the problems I've encountered over the years.
00:08:23.580 Debugging is another crucial skill. Let’s be honest, debugging can be frustrating. I categorize debugging into three stages: the first is putting print statements throughout the code to track variables.
00:08:44.160 If that doesn’t solve the issue, you might resort to using more advanced debugging tools, such as GDB or graphical debuggers in modern IDEs.
00:09:01.260 I want you to remember one principle that I find crucial for code quality: the SOLID principles. These are not just patterns; they encompass structures that lead to high-quality, maintainable code.
00:09:17.520 Problem-solving, of course, is at the heart of software engineering. We're paid to find solutions, and part of that involves providing meaningful code reviews.
00:09:35.280 Reviews should focus on providing insights that automated tools can’t offer. It's critical to leave your ego at the door when writing comments during reviews.
00:09:53.700 Also, learn to prioritize not just which problems to solve, but which problems to tackle first. Good programming means solving the right problems, and I want you to pay attention to those areas throughout this presentation.
00:10:07.920 Next, I want to address the delivery branch. This area involves getting code out the door, moving the product forward, and managing the necessary processes that accompany this.
00:10:33.660 Project management is an essential skill with existing methodologies like Scrum, Kanban, or Shape Up—something we’re currently embracing at our company.
00:10:52.560 Understanding Agile principles is vital as well, as we often end up creating our own mix of methodologies that resonate best with our team’s needs.
00:11:02.960 Delegating work is essential, especially as you advance in your career. Working in teams involves understanding how to break down large tasks into manageable pieces.
00:11:22.620 Proactive communication is vital—giving updates to your team is key to keeping the project moving and identifying blockers early.
00:11:42.340 A valuable skill is finding your personal productivity hacks. There are countless tools and methods out there. For me, planning my day through a more sophisticated version of a to-do list has worked well.
00:12:02.520 However, productivity is personal, and I encourage you to explore what works best for you.
00:12:21.580 The next category is commercial—a broad notion that encompasses understanding your company's money-making mechanisms. What are the value propositions? Why would a customer want to buy from you?
00:12:40.860 You may need to delve into budgeting and finance as well, but you needn't go too deep unless it aligns with your role's requirements.
00:12:58.920 User experience and interaction design also play roles here. It’s quite fascinating how design tactics can influence purchasing behaviors.
00:13:17.420 Understanding product thinking is quintessential. Every change you make should factor in its impact on the user and overall product.
00:13:37.040 Another aspect that comes into play is public speaking—it's integral to sales, as I’m doing right now. Promoting your company serves as part of your commercial functionality.
00:13:55.640 Effective communication through writing is also vital. Adapting to your company's voice and producing engaging documents can leave a lasting impact.
00:14:13.020 Conducting competitive analysis to understand how competitors are performing can provide insights that shape your product direction.
00:14:32.200 The second half of commercial development involves active listening to customer feedback—truly understanding their issues while objectively pushing your vision.
00:14:44.900 Having vision can set you apart; customers only see part of the picture.
00:15:03.020 Now, let's discuss strategy, which entails providing long-term value over the upcoming months. Effective project planning and understanding Agile strategies are crucial components.
00:15:15.720 Understanding and defining company culture is also important. Culture is not just written down; it's something that is lived daily.
00:15:38.640 Kaizen—an approach to continuous improvement—is significant for teams. Implementing a plan, checking its results, and taking action based on findings is essential.
00:15:57.500 Good reporting that offers accountability in both directions is crucial. Making tough calls and staying focused on what truly matters is paramount.
00:16:16.500 In June, I spoke at a conference in Dublin. One speaker recounted his experience implementing a boring credit card form. Instead of treating it as a mundane task, he made it an enjoyable challenge—a true lesson in mindset.
00:16:40.660 Even the most tedious tasks can be transformed with creativity, and doing so can lead to improved employee satisfaction and user engagement.
00:17:03.700 Understand your company thoroughly. This insight comes from the belief that your understanding is a crucial part of your ability to succeed.
00:17:24.380 Understanding important business metrics means not just focusing on what’s easy but digging deeper for insights that genuinely matter.
00:17:45.420 This leads us to Domain Depth, which is essential for grasping the finer details of your company and industry. The focus here is on continuous learning through experience.
00:18:06.020 I recommend taking notes frequently. Often, I let my cognitive processing happen through writing, even while I might not recall the specifics later.
00:18:28.140 One of the most vital components of mastering domain depth is fostering a growth mindset. Embrace challenges and view failures as opportunities to grow.
00:18:49.120 The next category is Organizational Development, which I consider extremely important. Every team member articulating their thoughts effectively is crucial.
00:19:10.200 Understanding the team 'clock'—the phases of forming, storming, norming, and performing—is essential for navigating team dynamics effectively.
00:19:27.700 Cultural differences among team members require sensitivity and adaptability, recognizing how individual backgrounds influence workplace behavior.
00:19:45.080 Retrospective meetings are a beneficial practice, allowing your team to agree on areas for improvement.
00:20:00.320 Communication is a branch that I want to focus on. Nonviolent Communication is a powerful technique I've found beneficial for professional and personal relationships.
00:20:16.420 This model enables one party to influence the conversation, helping clarify needs and fostering understanding.
00:20:34.320 Another model I appreciate is the Four-Ears Model. It's enlightening to understand that the way a message is received can differ based on perception.
00:20:54.320 Lastly, I want to highlight the importance of listening actively. Being a great listener can enhance your overall effectiveness in teamwork.
00:21:12.620 Understanding the difference between management and leadership is critical, as is the notion of leading by example.
00:21:31.280 In conclusion, building your career is your responsibility, and ensuring your career satisfaction requires active engagement.
00:21:53.200 So remember, career development isn’t a simple linear path from junior to senior roles. Complexity and nuance shape your individual journey.
00:22:14.420 I hope you found value in my talk today. If anyone has questions, I'm happy to discuss them. Thank you!