Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The senior dev

The senior dev

A presentation by Luciano Mammino(@loige) about what it takes to be recognised as a Senior Software Engineer:

The goal of this slides deck is to:

- Discuss what is expected from a senior software engineer (skills, mindset, duties)
- Packed with opinions (my own and more)
- For devs to be inspired
- For managers to hire, set expectations, support, and evaluate

Luciano Mammino

March 10, 2022
Tweet

More Decks by Luciano Mammino

Other Decks in Technology

Transcript

  1. Agenda Discuss what is expected from a senior software engineer

    (skills, mindset, duties) Packed with opinions* (my own and m o re) For devs to be inspired For managers to hire, set expectations, support, and evaluate Photo by Alexander Milo on Unsplash * opinions are subjective
  2. Hello 👋 I'm Luciano 14 years in the industry Senior

    Architect at fourTheorem Co-author of Node.js design Patterns ❤️ Node.js, AWS & learning Rust 🦀 Let's connect Blog Twitter LinkedIn GitHub Twitch YouTube nodejsdesignpatterns.com
  3. A senior engineer The definition changes in every company There

    are many levels of seniority: senior, staff engineer, principal, etc. My definition: moves projects & people forward ("Force multiplier") Team player, not a hero (or rockstar, superstar, magician, unicorn, etc.) Photo by Rudolfo Spott on Unsplash
  4. It’s not just about time or age 5 years of

    experience At least 28 years old More time ?== more senior… Photo by Elena Koycheva on Unsplash
  5. Skills Tech skills (hard skills) Soft skills 🤗 Somewhat important!

    🔥 Very important! Photo by Moritz Mentges on Unsplash Photo by Icons8 Team on Unsplash
  6. T-shaped profile Master at 1 thing Proficient at many other

    things Example: Master at backend & API development Can do some frontend Can do some IaaC Understands cloud architectures Photo by Lucas van Oort on Unsplash
  7. Broad understanding Understand the platform Architecture Code Structure Testing Deployment

    process Scalability model Photo by Jen Theodore on Unsplash
  8. Understand tradeoffs Eg. Monolith vs Microservices Memory vs CPU Highly

    Scalable vs low latency Reusable vs bespoke Complex (but powerful) vs Simple (but limited) Optimizes for the most relevant ones Understands the short vs long term impact of these tradeoffs Photo by Pickled Stardust on Unsplash
  9. Flexible Comfortable with different programming languages …and paradigms: OOP vs

    Functional Declarative vs Imperative Compiled vs Interpreted Can solve the same problem in different ways and with different tools Photo by Wesley Tingey on Unsplash
  10. Bug catcher Understands and refines user stories Can write different

    types of test: Unit Integration E2E Can find and discuss edge cases Keeps track of technical debt and helps to pay it back Photo by Benjamin Balázs on Unsplash
  11. Good advisor Understand patterns and best practices Can suggest patterns

    that have good long term effects …and avoids other that might lead to problems Suggests but does not mandate Photo by Diego PH on Unsplash
  12. Active lever Ask hard questions Takes leadership to find what

    they don’t know Is a bridge between product and technology Know when (and how) to say NO Photo by Florian Olivo on Unsplash
  13. Understand the business What’s the purpose? What’s the long term

    vision? What’s the strategy? What are the unique strenghts? What are the main weaknesses? How can technology help? Photo by Stephen Dawson on Unsplash
  14. Communication! Can talk with all the stakeholders Can explain uncertainties

    and propose ideas on how to address them Can talk about failures and learnings Can write docs & deliver presentations Can make complex topics digestable Photo by Hugo Jehanne on Unsplash
  15. Supports management Planning Drive cerimonies Keep in track priorities and

    technical debt Can split complex tasks into manageable parts Understands and leverages team strengths Pulls in the right people at the right time Photo by Jason Goodman on Unsplash
  16. Autonomy Can drive projects that require research and grind But

    aware of avoiding silos Knows how to get unstuck Ask for help Research and experiment Read the docs Read and understand existing code Photo by Taelynn Christopher on Unsplash
  17. Focus on delivery Negotiates expectations What does it mean to

    be successful in the current environment Positive attitude: Don’t blame the system Propose solutions Facilitate conversations Help to find compromises Confidence that hard problems can be solved even if we don’t know how yet Photo by Annie Spratt on Unsplash
  18. Go 1 level deeper Don’t stop at the layer you

    are familiar with What happens in the underlying layers? E.g. How does the HTTP protocol work? How does TCP work? UTF-8, SHA512, DNS, etc. 🎥 The computer science iceberg Discend one level at the time Build prototypes to test your understanding Photo by Oleksandr Horbach on Unsplash
  19. Have fun Learning new stuff can be fun You can

    build utilities and side projects Showcase what you learned to your peers Can you apply these learnings at work? Hackaton and free study days are a great way to spend work time for engineering growth Photo by Nathan Dumlao on Unsplash
  20. Pair programming Try to pair with as many people as

    possible within the org You can probably learn something from everyone (even from the most junior) You can probably teach something to everyone (even to the most senior) Not everyone loves pair programming, so try alternatives: Interactive code reviews Show and tell sessions Photo by Geran de Klerk on Unsplash
  21. Create content Articles, Talks, Videos, Twitter threads, Etc. You don’t

    need to be an expert to share something new you learned Make it a habit Creating content will massively improve your communication skills ⚛️ Atomic essays Photo by Florian Klauer on Unsplash
  22. Keep a positive attitude With enough time and money the

    team can probably solve everything With sligthly less money and time you can find decent compromises 😅 Don’t be picky about technology or style Support other people’s ideas (even if you would have done it differently) Photo by Nathan Dumlao on Unsplash
  23. Do the hard work Volunteer for that refactoring that no

    one wants to do Get involved in parts that people generally avoid because they are hard or messy Try to make things a little bit better! Photo by Jess Zoerb on Unsplash
  24. Additional resources Progression.fyi Career Ladders 20 Micro-Habits Of High-Impact Software

    Engineers Engineering levels at Carta Photo by Sharon McCutcheon on Unsplash