There is a depth to software that you don't appreciate until it stares you in the face. We focus on our tiny little part and see a vast sea of complexity, but in the grand scheme of things ...
We're like the PhD student laboring at the edge of knowledge. Our world looks like this:
Here's what everyone else sees:
I see this a lot when talking with engineers of all sorts. We think our thing is hard and complex and full of nuance, but that other thing? Oh that's easy, you just ...
This is the illusion of explanatory depth. You don't understand the problem until you try to solve it. At least explain in great detail. Step by step. With no handwavey motions.
Those times when you want to say "And then you just ...", that's your clue that you've reached the limit of your understanding. A rhetorical trick that makes you look smart at the pub, but flops in an interview.
A good interviewer will follow that up with an "Okay, but how do you do that? What do I do first?". At this point it's paramount that you say "I don't know", if you don't.
Why am I telling you this? Because I've had a picture in my head for a while.
The backend iceberg comes to mind when people say NextJS and friends are full-stack frameworks. Just because it runs on the server, doesn't make it backend.
And it comes to mind when someone goes "Wait what?" after I mention that our React app has about 30,000 lines of code. But it's powered by about 1,000,000 lines of backend code.
A lot happens in the backend.
NextJS et al can make a decent Backend for Frontend – focused on finding data for the UI of a specific app. Not quite "full-stack", if you ask me.
Here's what the full backend needs to do:
- serve static files
- store static files
- serve data
- store data
- maintain data consistency
- enable business analytics
- enable longitudinal data insights
- user metrics
- product metrics
- insights for engineers (logs)
- run asynchronous processes
- run periodic tasks
- retry policies for failures
- ingest data from external systems
- send data to external systems
- reconcile data between systems
- keep itself running
- alert when there's a problem
- keep your domain model
- evolve your domain model
- work with clients across versions
- work with users across versions
- assign/maintain feature flags
It takes an ecosystem my friend.
PS: I'm probably forgetting a bunch of things, hit reply
PPS: that's not how icebergs float, I know
I write articles with real insight into the career and skills of a modern software engineer. "Raw and honest from the heart!" as one reader described them. Fueled by lessons learned over 20 years of building production code for side-projects, small businesses, and hyper growth startups. Both successful and not.
Subscribe below 👇
Join Swizec's Newsletter and get insightful emails 💌 on mindsets, tactics, and technical skills for your career. Real lessons from building production software. No bullshit.
"Man, love your simple writing! Yours is the only newsletter I open and only blog that I give a fuck to read & scroll till the end. And wow always take away lessons with me. Inspiring! And very relatable. 👌"
Senior Mindset Book
Get promoted, earn a bigger salary, work for top companiesLearn more
Have a burning question that you think I can answer? Hit me up on twitter and I'll do my best.
Who am I and who do I help? I'm Swizec Teller and I turn coders into engineers with "Raw and honest from the heart!" writing. No bullshit. Real insights into the career and skills of a modern software engineer.
Want to become a true senior engineer? Take ownership, have autonomy, and be a force multiplier on your team. The Senior Engineer Mindset ebook can help 👉 swizec.com/senior-mindset. These are the shifts in mindset that unlocked my career.
Curious about Serverless and the modern backend? Check out Serverless Handbook, for frontend engineers 👉 ServerlessHandbook.dev
Want to Stop copy pasting D3 examples and create data visualizations of your own? Learn how to build scalable dataviz React components your whole team can understand with React for Data Visualization
Did someone amazing share this letter with you? Wonderful! You can sign up for my weekly letters for software engineers on their path to greatness, here: swizec.com/blog
By the way, just in case no one has told you it yet today: I love and appreciate you for who you are ❤️