Slide 1

Slide 1 text

The senior dev An opinionated take Luciano Mammino (@loige) 2022-03-10

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Meta slide loige.link/senior These slides are already online if you want to grab them! šŸ‘‡

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

Skills Tech skills (hard skills) Soft skills šŸ¤— Somewhat important! šŸ”„ Very important! Photo by Moritz Mentges on Unsplash Photo by Icons8 Team on Unsplash

Slide 8

Slide 8 text

Tech skills

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

Broad understanding Understand the platform Architecture Code Structure Testing Deployment process Scalability model Photo by Jen Theodore on Unsplash

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

Soft skills

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

How to grow

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

Additional resources Progression.fyi Career Ladders 20 Micro-Habits Of High-Impact Software Engineers Engineering levels at Carta Photo by Sharon McCutcheon on Unsplash

Slide 30

Slide 30 text

We cannot excel at everything Photo by Marek Szturc on Unsplash

Slide 31

Slide 31 text

But we should know our strengths and weaknesses Photo by Marek Szturc on Unsplash

Slide 32

Slide 32 text

Work with our team to amplify strenghts and compensate weaknesses Photo by Marek Szturc on Unsplash

Slide 33

Slide 33 text

ā€¦and strive to get better every day! Photo by Marek Szturc on Unsplash

Slide 34

Slide 34 text

Thanks! Luciano Mammino (@loige) loige.link/senior Cover photo by TK on Unsplash