How to get deep, technical expertise as an engineer
Learnings from Ben Holmes: YouTuber, Software Engineer at Astro, and Web Framework creator
Hey everyone, Jordan here đ
Today, we have a special post where youâll learn how to gain deep, technical expertise from Ben Holmes. Ben is a young Software Engineer working at Astro who created his own web framework and makes YouTube videos explaining how to build tools we use every day from scratchâlike React, Server-Side Rendering, streaming, and more.
Before we begin, I also wanted to thank the 50+ new paid subscribers in the past week.
As a reminder, this is the last week to lock in the $5 price before it goes to $12. Check the benefits of a paid subscription here
Why I reached out to Ben
Iâve been following Ben and his videos for the past few months, and have learned a ton from him. In his videos, he tackles topics I donât see anyone else cover, like Building React Suspense from scratch and Building Server Components from scratch.
He teaches you how technologies work under the hood, not just how to use them.
From my experience, this level of knowledge differentiates senior engineers from junior and mid-level engineers.
Hereâs a YouTube short of Ben packing a ton of deep, technical information on how you could implement React Suspense from scratch:
When I dug more into Benâs background, I saw he graduated just 4 years ago.
I was impressed by his depth of knowledge and how well he explained technical concepts. I reached out so we could all learn from him.
âď¸ Main takeaways
How to gain deep, technical expertise
How to stand out as a developer
How learning in public and open-source can grow your career
â ď¸ Disclaimer: I paraphrased the discussion for brevity. The wording retains the tone and essence of what was said.
đ Benâs career journey
Jordan: Can you walk me through your journey from when you started coding?
Ben: Yeah. I first started coding in high school in a video game coding class. We had to learn about state management and model game objects. I liked it a lot and later realized programming was lucrative, so I thought, âThatâs good! Iâll keep doing this.â
My first internship was in 2015âalso in high school. I made a lot of mistakes, but it was one of the most rewarding internships for how much I learned. It was in the Angular 1 & jQuery days, so I was building an image cropper which taught me a lot about web fundamentals. I also learned that I could apply what I learned in the game coding class to more practical web applications.
I had a couple more internships, but my first one in college was at Peloton when it was growing in hype in 2019. Where my first internship involved a lot of hacky JavaScript, the internship at Peloton taught me about enterprise frontend. They were into functional programming and used React, Typescript, and GraphQL. I learned about documentation, error handling, architecture, API design, and technical leadership.
A key lesson I learned at Peloton was to take initiative and be an owner for an underserved area. I saw that our error handling was inconsistent in GraphQL and didnât have a clear owner, so I drafted a plan and got the right people together to discuss it. That turned me into a leader even as a junior dev.
I found a similar ownership opportunity for our documentation. Our docs were haphazardly posted to different Jira boards and Confluence pages, so I started writing an architecture doc to summarize our tech stack. It only took a few hours, but it gained me recognition as âthe docs guyâ on our team.
Jordan: Wow, itâs crazy how similar our stories are. At Gusto, I drove API consistency patterns with senior devs. Even as a mid-level, I noticed the problem, took the initiative to drive the fix, and became an owner in that area.
What youâre saying also ties to the Becoming a go-to person article and the article about influence and leadership with Irina Stanescu on how anyone can be a leader.
đ§ Gaining deep technical knowledge
Jordan: What impact do you think having varied experiences had on your growth?
Ben: Learning more than one language is helpful for noticing different patternsâlike functional, object-oriented, and procedural code.
Itâs most helpful to to start by not using a framework then graduate to using oneâlike NextJS, React, Rails, Django, etc.
Or start with a framework, build it quickly, then challenge yourself to strip the framework away and rebuild.
Rebuilding my personal site without a framework was my greatest learning experience. I had ambitious goals that I previously relied on React to solve, like an embedded video player and a swipe animation between every page.
I challenged myself to only use templating languages. I had no build system. I had to invent my own static site generator. Iâd have to invent a bundler if I wanted to use Typescript. I could Google the APIs, but I canât just use React and call it a day.
Challenging myself like that, in the long term, was the road that got me my job today.
It taught me how single-page routing works, what bundlers actually do, and more. I eventually open-sourced what I built as a general-purpose framework. This caught the eye of Astroâs cofounder and eventually led to my full-time position at the company.Â
Challenging yourself to not use a framework will force you to learn the low-level APIs that underpin the tools we use every day. If you share what you learn in public, you will stand out.
Jordan: Agreed. One of the first things I teach mid-level developers looking to get to Senior is to understand the tools they use. Think about how itâs implemented under the hood. Over time, youâll pick up the patterns needed to make these tools yourself.
Jordan: How did you pick the level of depth you stop at? You probably donât want to reinvent the Typescript compiler, for example. Or write assembly code.
Ben: The general idea is, âSet constraints to learn something better.â For example, you could challenge yourself to build a beautiful piece of art using only 1 div. Youâre forced to deeply understand what you can do with a single div to build crazy animations.
I set the constraints based on what I want to learn the most. The constraints should help you learn but also allow you to finish the project. Donât set so many that you need to reinvent the entire universe.
đľâđŤ Approaching challenging problems
Jordan: Whatâs your process when youâre implementing these tools from scratch and get stuck?
Ben: Iâm a bit hardheaded and I avoid looking at how itâs already done as much as possible. I try to only look at the end product. It works well to an extent, but if you need to look at how itâs done in open-source code, donât feel bad. Itâs a tool you can use and learn from.
Also, the tech community is a small world. There are a lot of Discord and Slack communities, each with great support channels.
Explaining the issue alone helps you build communication and debugging skills.
Next.js, React, frameworks, and languages generally all have their own communities.
(I found the above 2 links by googling: âNext.js discord communityâ and âReact.js discord communityâ)
đ¤ Pair programming & Getting it working first
Ben: Iâm a big advocate of pair programming for learning. You learn a lot just by watching someoneâs process.
I learned one of my most valuable lessons watching a coworker: get it working first, then figure out if we should refactor or throw it away.
I struggled with a technical problem for 6+ hours until I paired with a teammate who quickly solved the problem by adding a few global variables. When he did that, it helped us realize the existing design didnât make sense. I thought, âI would have spent 3 hours trying to fit that into my system.â
Jordan: Thereâs a saying that goes along with this from
: âMake it work, make it right, make it fast.âBen: Yep, that was one of my big âahaâ moments that changed the way I work.
đť Keeping up with new tech
Jordan: There is a lot of âinputâ you can receiveânewsletters, videos, articles, etc. How do you keep up with it all and make time to actually learn by doing?
Ben: I donât read programming books and I usually donât follow step-by-step tutorials.
If you understand how to build things without the framework, you will understand commonalities between them and pick up new tools faster. Some APIs are constant, like click listeners in the browser. Keeping up becomes less stressful once you know the fundamentals.
A lot of the new info teaches you âhow to use the toolâ differently, like when new versions of React come out. In general, adopt late. Donât feel pressured to use something as soon as it comes out. Wait for the ecosystem to find best practices.
đ§âđť Value of open-source community
Jordan: How valuable is it to get involved in open-source?
Ben: Itâs good to open-source even the smallest library you can. You end up getting that âsupportâ or âfront-deskâ role that talks to other devs.
You learn:
How to scope your project
Tricks from people all around the world
Communication skills. Youâll field tough feature requests and bug reports, making you both a roadmap writer and a support squad. You can also convert issue reporters into contributors by collaborating on a pull request.Â
Contributing to existing open-source repos is also a great idea because you understand how the tools you use work under the hood.
Jordan: Agreed with the communication skills. I havenât done much open-source, but in my Path to Senior Handbook, I had to reject a few contributions because they were outside the scope of the repo and I could feel it flexing my communication muscles.
đ Learning in public
Jordan: How has learning in public played a role in your growth as an engineer?
Ben: A ton. Especially YouTube shorts, which cap at 1 minute. It forces you to find the most important parts of what you want to explain.
Itâs like the quote, âIf I had more time, I would write a shorter letter.â It forces that.
You need to communicate succinctly with other engineers and your manager. The shorts have enabled me to turn anything into an elevator pitch.
My formula is usually Problem â Solution.
Hereâs an example YouTube short of me doing this on better TailwindCSS animations:
đĄ Top advice for growing technical skills
Jordan: Whatâs your top advice for engineers to grow their technical skills?
Ben: Understand the fundamentals and tools you use. Read the official docs. As a frontend engineer, I use MDN and web.dev. They both teach the fundamental principles rather than only how to get past your current problem. The docs are often more readable than you think.
Jordan: I fell victim to not doing that early in my career. I often looked for the quickest thing I could copy-paste and move on. But Iâve switched now to reading the docs and itâs helped me solve problems and understand whatâs happening without googling so often.
Jordan: What mindset helped you get to where you are today?
Ben: Find your knowledge boundary. Where are you not sure how something works? Explore that area and figure out how it works. Then repeat.
đ TL;DR
Become an owner by taking initiative in underserved areas of the codebase and product. You can do this regardless of your level.
See a full article on this topic hereSet constraints to enforce learning. Try removing some of the tools you use and figuring out how you would build your product without them. In Benâs case, he took away React, a Bundler, and CSS frameworks.
Learn in public. Ben created his own web framework, but if he didnât learn in public, Astro may have never reached out to him because they wouldnât have known about what he made. Also, learning in public forces you to improve your communication.
Seek out official communities. Ben is in touch with Discord and Slack communities for the primary technologies he uses, like React and Astro. These are great places to learn and get help.
Pair program more. You learn so much from watching other peopleâs process.
âMake it work. Make it right. Make it fast.â Make the program work first. Optimize later. It will tell you if what youâre trying to do will even work in the first place, regardless of the design.
Refer to official docs. The official docs will help you understand how things work at a fundamental level, rather than just googling to solve your exact problem. This will help you work faster in the long term.
Understand the fundamentals and tools you use. This was Benâs biggest tip for gaining deep, technical expertise. Know the foundations in whichever tech stack youâre usingâthe pieces that rarely change. For backend engineers, it can be how servers receive and return responses for example. For frontend engineers, itâs how browsers, JavaScript, HTML, and CSS work.
Thank you again to Ben Holmes for sharing his experiences and lessons đ
Hereâs where you can find more from him: YouTube (main social), X / Twitter, GitHub
đŁ Shout-outs of the week
- by is a great way to put into practice what Ben taught in the article. John writes a practical coding challenge each week that teaches you the fundamentals and how many of the tools we use work under the hood. by is another great resource.
Developing essential soft skills for engineers and leaders by
on â A compilation of actionable advice for how to develop each soft skill and a resource to pick up to learn more.Insecure vibes are a self-fulfilling prophecy by
on and 5 Non-verbal behaviors killing team health by on both help you resolve behaviors you may be doing without realizing it.
đ Job Board
Iâm experimenting with a High Growth Engineer job board for the next few weeks. Iâll prioritize remote jobs to share with you all. Note: I do get a commission if youâre hired.
Senior Software Engineer, SMS Team - Remote US @ OneSignal - $160-$180k base
Senior Software Engineer, User Data Team - Remote US @ OneSignal - $160-$180k base
Test Automation Lead, Engineering Productivity - Remote US @ OrderGroove - $140k+ TC
Senior Software Engineer, Product & Data - Remote Global @ Mento
Thank you for your continued support of the newsletter and the growth to 55k+ subscribers đ
- Jordan
P.S. Here are a few other things which may interest you:
Path to Senior Engineer Handbook (8.8k+ stars)âEverything you need to get to Senior
My LinkedIn: I write daily content to 60k+ engineers. Iâm also ramping on Twitter/X
Newsletter sponsorships: Feel free to reply to this email or check the Sponsorship packages
Did you find this issue valuable? If so, there are two ways you can help:
You can also hit the like â¤ď¸ button at the bottom of this email to help support me or share this with a friend. It really helps!
Thank you for mentioning Implementing Jordan!
Great interview! Especially the constraints part is important for me because otherwise I would end up learning assembly language đ