Getting hired at a better team/company as a software engineer.

This is not exactly a guide but some thoughts I have had recently after interviewing a few candidates for SE roles.

The Challenge of Hiring Modern Software Engineers

I've been conducting numerous interviews recently, hiring software engineers for both my team and other teams within my company. While I've met many wonderful candidates, I've noticed a concerning pattern: many engineers lack the fundamental skills needed for modern software engineering teams.

Common Interview Challenges

Here are some recurring issues I've encountered:

  • Python developers who struggle with basic Python concepts and problem-solving
  • Mid to senior engineers unable to articulate system architecture decisions or describe systems they've built
  • Candidates with limited experience handling production incidents
  • Engineers unfamiliar with contemporary software development practices

Modern Software Engineering Isn't Rocket Science

Software engineering is surprisingly approachable – that's partly why I was drawn to it. While building great software requires careful consideration, and there's room for both "10x engineers" and reliable team players, the fundamental principles remain consistent.

For anyone looking to understand these fundamentals, I highly recommend reading "Software Engineering at Google". While some might argue, "but we're not operating at Google's scale!" the core principles apply universally.

Evaluating Your Team's Engineering Culture

I strongly recommend reading "The Phoenix Project". This novel follows Parts Unlimited's transformation from traditional enterprise software development to embracing DevOps principles. It's an excellent benchmark: if your team's processes align more with the "before" than the "after," it's time for change – either within your team or by finding a new one.

Escaping a Stagnant Team

Start by trying to elevate your current team. Introduce modern practices and tools, demonstrate their benefits, and encourage adoption. However, if you consistently face resistance or apathy toward improvement, it might be time to move on.

Remember: to join a better team, you need to level up your skills first. Hiring managers are hesitant to bring on engineers who haven't kept pace with modern practices or shown thoughtful system ownership.

Pro tip: You don't need to work overtime to improve. Dedicate just one hour daily to learning new skills or trying new debugging approaches. This investment will make you more productive during your regular working hours.

Professional Development Strategy

To position yourself for better opportunities:

  • Read essential software engineering books (both traditional and audiobooks)
  • Follow conference talks (e.g. PyCon for Python developers)
  • Subscribe to engineering blogs from top tech companies
  • Practice coding regularly (whether through LeetCode, personal projects, or contributions to open source)
  • Understand DORA metrics and capabilities
  • While coding challenges and system design interviews aren't perfect, they're valuable when combined with real-world knowledge
  • Use resources like System Design Primer to start learning about larger systems, even if you have not worked on them yourself.

Finding time for professional development can be challenging, especially if you have young children. However, you must invest in yourself before expecting others to invest in you.

The Path Forward

As the saying goes, "Look after the pennies, and the pounds will look after themselves." Master the fundamentals, embrace best practices, and you'll naturally evolve into a better software engineer. The key is consistent, deliberate improvement rather than dramatic overnight changes.