Swizec's articles in the "software" category
I aim to write mindblowing emails with real insight into the career and skills of a modern software engineer. "Raw and honest from the heart!" as one reader described them.
Below are 58 articles filed under software
. Enjoy β€οΈ
Software Engineering Lessons from Production
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. π"
Atoms, molecules, organisms
Here it is: 20+ years of programming experience distilled into 378 words. From the book I'm writing.
Smart core, thin interfaces
Here's an approach to writing code that I've been using for years and couldn't quite put into words until now. One of those _"This feels wrong but I can't explain why"_. Now I can!
Empirical evidence for code modularity
Few of your engineering decisions matter long-term. Software is soft. You can change your mind. But how you structure your components is here to stay.
The anatomy of a React Island
A coworker asked how React Islands work and I realized it's a technique I've been using to modernize monolithic web codebases for years, but never wrote down how it works.
Finding modules in a big ball of mud
Pulling modules out of a big ball of mud is like grabbing a slice of cheesy pizza. It's kinda separate but also not really.
Why you need observability more than tests
Here's a short and sweet story about a Friday deploy. I love Friday deploys.
Big Ball of Mud βΒ the world's most popular software architecture
Forget Gang of Four, here are the 7 architectural patterns real programmers use:
Make mistakes easy to fix
You can't prevent bugs. You'll burn out. Instead focus on making them quick to fix.
The Laws of Software Evolution
Manny Lehman was one of the first to notice that software is never done. It just continues to evolve forever.
Better is good
A small improvement that lands is better than a large improvement stuck in review
How big up-front design fails
A long design phase without shipping kills many software projects. Here's a story from production I haven't shared before.
Why software projects fail
5 common themes
Let small fires burn
You can't fix everything. Focus on the next big thing and let the small fires burn.
Small change in big scary codebase?
Making small changes in large unfamiliar codebases is the job. That's what engineers do all day.
Why SQL is Forever followup
Yes SQL is super flexible. That is its strenght and its weakness
Why SQL is Forever
Never underestimate the power of good marketing for bad products. NoSQL was fun but SQL is here to stay.
90% of performance is data access patterns
Removing a single line of code slashed database CPU usage by 66% π€
DRY β the common source of bad abstractions
Swizec reveals the hidden pitfalls of overusing the DRY principle in coding, leading to bad abstractions. Discover how to write adaptable, efficient code that avoids these common traps.
Scaling Fast, my talk on lessons from tech startups
This talk from C3Fest summarizes the key lessons I've learned in the past ~15 years of working in tech startups. It's a high level overview of a new book I'm writing (60% done).
You can't side-quest a product
Here's a trap that talented engineers fall into all the time. It creates frustration, burnout, and the genre of tweets that read like "Why don't people care about the amazing work I'm doing".
43 years of the actor model
The actor model is now part of everyday tooling and ensures concurrency safety. Understanding the principles behind it helps you write less buggy code.
From trivial to complex βΒ 4 software quadrants
You can classify software projects into 4 quadrants from trivial to complex
Architecture is like a path in the woods
You're doing too much. Sit back, relax, see how people *want* to use the code. THEN build the abstraction.
Keeping a high engineering culture, tips from the field
I asked engineers how they keep a high quality culture. These are the takeaways
The efficacy of TypeScript
TypeScript may streamline code navigation and catch semantic errors, but it doesn't guarantee fewer bugs or faster fixes.
Don't neglect your upgrades
Regular software updates may seem tedious, but they save you from the nightmare of a massive overhaul down the line.
Solve the problem, not a different more difficult problem
Solve the problem at hand, not the one you imagine might come next. A simple fix now often beats a complex one later.
Avoid spooky action at a distance
Shared state in programming isn't the enemy, it's unclear dependencies that tangle your code. Keep it clean with explicit state dependencies and strict access guidelines
Finding modules in a Big Ball of Mud with ChatGPT
Detangling a Big Ball of Mud is hard. You have to find domain boundaries where none exist. Looks like AI can help π€©
Followup answers to Forget complicated code, focus on the system
Why are utility files bad? How do you recognize architectural complexity? What the hell is a transitive dependency?
Forget complicated code, focus on the system
Clean code matters, but it's the architectural complexity that truly impacts your productivity and bug count. Focus on simplifying the system, not just the code.
Different worlds
Different lenses, different worlds. Your perspective is shaped by your experiences. Even in debates, all sides can be right in their own context.
You can't stop the business, or why rewrites fail
Rewriting code isn't a magic fix-all. Consider the opportunity cost, complexity of the old system, and estimation challenges. Instead of stopping all to rewrite or building new while maintaining the old, try incremental improvements and new code adoption.
When to throw away your code
Delete code when it stops providing value π‘ All code is a liability; context matters. Keep what solves problems, toss the rest.
What does "solve problems" even mean
Focus on solving problems, not just doing work or writing code. Think creatively, question existing processes, and prioritize effective outcomes
Why taming architectural complexity is paramount
Unravel the hidden costs of architectural complexity in software engineering and learn practical strategies to tackle it. Boost productivity, reduce defects, and improve staff retention with insights from an MIT PhD thesis.
Two types of complexity and their impact
Complicated code slows down junior devs, while complex systems impact senior devs more. Focus on managing system complexity & dependencies, not just simplifying code.
You can't fix the wrong abstraction
Unlock the secrets to combating architectural complexity in software development and learn to identify and fix the wrong abstraction. Boost productivity, reduce bugs, and retain more staff.
DRY vs SoC, a difficult choice
What is the essential difference between DRY and SoC principles in software engineering and how do you balance the two
If it works together, it lives together
Wherein I use LEGO to talk about organizing your code for ease of use
Why others' code is hard to navigate
Some people like to organize code in files and folders and neat categories. Others love search. When they work together, that's the challenge.
Move your business logic into data
The quickest way to simplify a complex function with lots of logic is to turn it into data. A lesson from production
You don't *have to* build it sloppy to go fast
My favorite mistake to make when I'm in a hurry is to think that I _have to_ build new features the sloppiest way possible. Find the quick fix and move on. But that's not true.
What makes a great software engineer?
In 2015 a group of researchers asked 59 experienced engineers at Microsoft "What makes a great software engineer?". Here's what they found.
Writing software is like kicking a can
Writing software is a playful process of exploration and discovery. Like a game of kick the can on a Sunday walk.
The Italian foods theory of bad software design π
Spaghetti code β unstructured Ravioli code β too structured Lasagna code β layered wrong Minestrone software β unclear domains
Code Review Practices for Refactoring Changes
Do you review refactoring pull requests differently than you do others? An empirical study of OpenStack, an open source cloud platform, says that you do and finds 6 common criteria.
Complex vs. complicated
Would you rather work with a complex system or a complicated system? π€
What I learned from Software Engineering at Google
When I first picked up Software Engineering at Google I thought it was another one of those FAANG books full of lessons that make no sense at human scale. I was surprised, lessons apply to teams as small as 5.
Software Engineering is the 2nd best job
Ok so I've been doing lots of research into the Software Engineer job market β Some highlights π
Software Engineering Lessons from Production
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. π"