One Year at Shopify
Iāve been working at Shopify for one year now.
Before I joined Shopify, Iād determined that my next career goals were roughly the following:
- Build something cool and new with experimental technology, like JavaScript or edge computing.
- Gain the respect of my peers for the work I do.
- Make an impact and be recognized for that impact by company leadership.
In December 2021, I started on the performance team. We focused on measuring and improving the speed of Shopifyās online stores āĀ and there are a bunch of online stores.
What a terrific team that was! Everyone was super humble, empathetic, and genuinely smart.
A few months into 2021, I got pulled into a new project now known as Hydrogen. This started as a close collaboration with our CEO Tobi, Cathryn, Duncan and a few other people.
Tobi announced Hydrogen at Unite in June, and we launched the developer preview in November.
Itās been a wild ride. Here are some things Iāve learned while working at Shopify.
Alignment is Key
The first thing that jumped out to me when I joined Shopify was that folks are passionate. Developers debate ideas and technology and implementations all the time, and the debates are fierce.
Iām a conflict-averse person, so this caught me off-guard. At first, it felt like everyone was super opinionated for the sake of being opinionated. Almost abrasive in some cases.
However, I soon realized this was a key part of the culture: building alignment is important.
You could be working with the smartest people in the world, but if youāre not aligned, itās all for naught. If youāre pushing in different directions, this means youāre not pushing forward!
This comes up all the time, and I donāt think thereās a silver bullet to keeping alignment within teams other than to constantly be raising questions, debating, and working together with the goal of forward progress.
My aversion to conflict surfaces a weakness in this area: I donāt like to tell people when I think theyāre wrong. It makes me super uncomfortable.
Iāve already experienced a couple instances of choosing comfort over conflict, and led to team members working on things that really didnāt align with the overall goal of the project.
Iām trying to get better at this!
Naivety-Driven Development
When we started building Hydrogen, we had a decision to make.
Every other modern JavaScript framework had invented their own way of fetching data for a given route, hydrating that on the page, and fetching more data for future page navigations on the client. If these words made no sense to you, donāt worry āĀ it doesnāt matter.
It felt icky to be inventing yet another unique strategy when this cool new experimental thing called React Server Components had been announced last December.
I remember us saying in Slack, āItās a bummer we canāt just use server components.ā
So, one day, I decided to experiment with building a version of server components that matched the pattern set forth in the demo repo and see if we could make it work in Hydrogen.
I did some really, really gross coding, yāall.
I tried and failed dozens of times to get it to work.
And I did all of this without first reading through Reactās internals to understand the spec or how the React team had intended on building and scaling server components.
All I did was try to match the input and output of the streaming response from the server and turn it into a thing that created React elements on the page.
At this point, I should admit: Iām not a React expert.
Iāve dabbled with React before by creating fun frameworks and using it to build side projects and work projects.
But you should see all the smart React people that work at Shopify. They know how to useMemo
in the right places, how to organize large React projects, and how to distribute and maintain complex React libraries.
However, I think that being a naive developer helped me to get out of my comfort zone and try to explore server components in a way that I wouldnāt have otherwise tried to do.
If only I knew the sins I was committing with each (failed) incantation of server components, Iād have quit before I even started.
I think being naive and experimental can be super healthy, and Iāve leaned into this quite a bit over the past year.
Of course, itās important to update your experiments with real knowledge and better practices once you discover them. But for new stuff, itās an effective strategy.
Humility and Ego
I think itās super important to be humble.
Whenever I encounter another person who is super ego-driven, it really turns me off and makes it difficult for me to work with them. Because of this, I try as much as possible to be humble in my work.
Humility is a superpower. It allows you to put your shield down, be curious, and ask questions. When youāre not humble, itās easy to become arrogant and ignore new ideas.
You donāt want to be too humble, though. Sometimes itās best to acknowledge something or take credit and move on. Otherwise, it can be a distraction or even a detractor from the work.
Iāve also had to reckon with my own ego in the past year. When working on a high-profile project like Hydrogen, itās easy to get swept up in the hype of it all and get a big head.
Discarding my ego has been a continual, intentional process. I have to constantly remind myself: āIām not doing this for me; Iām doing it as part of a larger goal.ā
This isnāt easy! Iāll get occasional reminders that āsting.ā Someone else getting credit for a thing I helped build, someone else getting to ship that big new feature, etc.
But these tradeoffs have benefits. New people get exposure to a project, new people get to advance in their careers, and new people get to share the burden of ownership and maintenance.
Managing Expectations
I think humility and ego are closely related to one of the most critical things Iāve learned this year: managing expectations.
When youāre working on a team in āstealth modeā on an exciting new project, itās easy to let your mind run wild and get super hyped on something.
Even if youāre not working on a big project, you can fall into the trap of thinking the results of your work are going to be well-received and put on a golden pedestal for all to see.
I generally try to set my expectations lower than average.
Hereās what that looks like in practice:
- People will respond āmehā about the thing Iāve built
- It wonāt end up on the first page of Hacker News
- It will work, but itās not going to change the whole world
This goes on and on with a dozen different variations.
I started leaning into this practice after reading Brene Brownās Rising Strong which talks about how unmet expectations often lead to resentment (and shame spirals).
One important thing here is that you donāt set your expectations too low. That can lead to apathy. If you think what youāre building is shit, then youāre going to put a shit effort into something.
For this reason, Iāve found itās healthy to set my expectations slightly below average.
Managing Reality
So, reality check. Here are some outcomes of the work Iāve done in the past year:
- We successfully announced Hydrogen at Unite
- We successfully launched a developer preview this fall
- Weāve grown the team to more than 10 people
- Hydrogen did end up on the front page of Hacker News
- Because of our early work on server components, weāve been collaborating with Meta and the React core team, and we got some cool shout-outs during React Conf 2021
- Iāve chatted with people I never dreamed Iād meet, including the React team, the Tailwind team, the Vercel team, the Cloudflare team, and creators of Vue & Vite
- Hydrogen has been featured on some cool software development newsletters and podcasts
- Oh, and this website is built with Hydrogen š
Iām quite happy with how the year has gone.
One thing thatās resonated with me is the idea that building things should be fun. At the end of the day, Iām building cool things, and it should be fun to do those things.
I want to surround myself with people who take their work seriously but donāt take themselves too seriously.
Whatās next?
Revisiting the career goals Iād determined before joining Shopify:
- Build something cool and new with experimental technology, like JavaScript or edge computing. Hydrogen is an experimental JavaScript technology built for the edge (Oxygen).
- Gain the respect of my peers for the work I do. My peers are great, and I think thereās a mutual respect.
- Make an impact and be recognized for that impact by company leadership. Yep, this happened.
So whatās next? I do not know.
I donāt think itās realistic to ātopā the year Iāve had. Some of this comes back to setting below-average expectations, but I think itās important to realize that a lot of projects donāt succeed and donāt have impact. I need to be prepared for that.
One path forward is to become a #thoughtleader on social media and tweet about React constantly. I would need to say controversial things to get picked up by the algorithm. Then I could tour the world and speak at conferences about React and JavaScript and whatās in and whatās not and get promoted and then tweet some more.
In practice, I find it very hard to do this. It just aināt me. So I guess Iāll continue to be myself.
In the meantime, Iām going to double-down on human relationships at work ā fostering team culture, mentoring (and being mentored), and continuing to learn.
Cheers!