The good news?
You don't need to be a prodigy or genius to succeed.
In software, what separates teams and developers who deliver from those who struggle isn't magic - it's diligence, focus, and consistency.
The good news?
You don't need to be a prodigy or genius to succeed.
In software, what separates teams and developers who deliver from those who struggle isn't magic - it's diligence, focus, and consistency.
- 10 minutes of coding + 2 hours of debugging → still only "a quick fix"
- If it's open-source → it's free, even if it takes me 3 days to configure.
- If it works in dark mode → it's fully accessible.
- 10 minutes of coding + 2 hours of debugging → still only "a quick fix"
- If it's open-source → it's free, even if it takes me 3 days to configure.
- If it works in dark mode → it's fully accessible.
I've gone back and forth over the years, but here's my take:
Some tools give you a lot of power.
But they also give you a lot of ways to hurt yourself.
I've gone back and forth over the years, but here's my take:
Some tools give you a lot of power.
But they also give you a lot of ways to hurt yourself.
You refresh the page for the 11th time, it's broken.
You refresh it once more... and suddenly everything works?!
Now the bug is gone, the logs look clean, and you're left questioning reality.
But here's the thing I've learned over the years:
You refresh the page for the 11th time, it's broken.
You refresh it once more... and suddenly everything works?!
Now the bug is gone, the logs look clean, and you're left questioning reality.
But here's the thing I've learned over the years:
1️⃣ My ebook Keep Calm and Code On is on sale for just $1.99 - an incredibly low price for lessons I spent 15+ years learning the hard way (link in comments).
1️⃣ My ebook Keep Calm and Code On is on sale for just $1.99 - an incredibly low price for lessons I spent 15+ years learning the hard way (link in comments).
1️⃣ My ebook Keep Calm and Code On is on sale for just $1.99 - an incredibly low price for lessons I spent 15+ years learning the hard way (link in comments).
1️⃣ My ebook Keep Calm and Code On is on sale for just $1.99 - an incredibly low price for lessons I spent 15+ years learning the hard way (link in comments).
Do I fix the root cause... or just opt for a quick fix?
One path takes longer but cleans things up.
The other gets you unblocked fast but adds a little more weight to the codebase.
Do I fix the root cause... or just opt for a quick fix?
One path takes longer but cleans things up.
The other gets you unblocked fast but adds a little more weight to the codebase.
Because we tend to estimate the happy path -
The version where everything works, nothing breaks, and no one gets interrupted.
We forget:
- That test that fails for no reason
- The merge conflict that eats an hour
Because we tend to estimate the happy path -
The version where everything works, nothing breaks, and no one gets interrupted.
We forget:
- That test that fails for no reason
- The merge conflict that eats an hour
⬇️ It's called the "Prime Directive" - and it's not about Star Trek ⬇️
The prime directive in software is:
"Everyone did the best they could with the information they had at the time."
⬇️ It's called the "Prime Directive" - and it's not about Star Trek ⬇️
The prime directive in software is:
"Everyone did the best they could with the information they had at the time."
But, it doesn't always look the same...
That trait: Obsession.
Some can't rest until the architecture feels clean.
Some dive deep into weird bugs just to understand them.
But, it doesn't always look the same...
That trait: Obsession.
Some can't rest until the architecture feels clean.
Some dive deep into weird bugs just to understand them.
But, it doesn't always look the same...
That trait: Obsession.
Some can't rest until the architecture feels clean.
Some dive deep into weird bugs just to understand them.
But, it doesn't always look the same...
That trait: Obsession.
Some can't rest until the architecture feels clean.
Some dive deep into weird bugs just to understand them.
Too much detail, and eyes glaze over.
Too little, and the impact gets lost.
I've learned (often the hard way) that it's not just about what's broken - it's about why it matters.
❌ "this API is throwing a 500"
Too much detail, and eyes glaze over.
Too little, and the impact gets lost.
I've learned (often the hard way) that it's not just about what's broken - it's about why it matters.
❌ "this API is throwing a 500"
Are you trying to build a real app?
Or just exploring something new to see where it goes?
For me, side projects have always been a chance to play.
No deadlines. No roadmap. No pressure to ship. Just a space to experiment.
Are you trying to build a real app?
Or just exploring something new to see where it goes?
For me, side projects have always been a chance to play.
No deadlines. No roadmap. No pressure to ship. Just a space to experiment.
With Rails, you can spin up a new app in minutes with so much already wired up.
Auth, DB, structure, patterns - it's all just there.
With Rails, you can spin up a new app in minutes with so much already wired up.
Auth, DB, structure, patterns - it's all just there.
With Rails, you can spin up a new app in minutes with so much already wired up.
Auth, DB, structure, patterns - it's all just there.
With Rails, you can spin up a new app in minutes with so much already wired up.
Auth, DB, structure, patterns - it's all just there.
They came from what I had to unlearn.
Here are a few that stand out:
❌ You have to know everything.
They came from what I had to unlearn.
Here are a few that stand out:
❌ You have to know everything.
They came from what I had to unlearn.
Here are a few that stand out:
❌ You have to know everything.
They came from what I had to unlearn.
Here are a few that stand out:
❌ You have to know everything.
Code familiarity.
Two tasks might look the same on paper - same complexity, same output. But one lives in code you've touched 20 times, whereas the other would be brand new code in your app.
Code familiarity.
Two tasks might look the same on paper - same complexity, same output. But one lives in code you've touched 20 times, whereas the other would be brand new code in your app.
Waiting for the LLM to respond.
You hit enter.
You wait.
You alt-tab.
Just a quick glance at Slack or email. Maybe review a PR. Maybe scroll for a second.
Then the model finishes. But your brain? It's already somewhere else.
Waiting for the LLM to respond.
You hit enter.
You wait.
You alt-tab.
Just a quick glance at Slack or email. Maybe review a PR. Maybe scroll for a second.
Then the model finishes. But your brain? It's already somewhere else.
Waiting for the LLM to respond.
You hit enter.
You wait.
You alt-tab.
Just a quick glance at Slack or email. Maybe review a PR. Maybe scroll for a second.
Then the model finishes. But your brain? It's already somewhere else.
Waiting for the LLM to respond.
You hit enter.
You wait.
You alt-tab.
Just a quick glance at Slack or email. Maybe review a PR. Maybe scroll for a second.
Then the model finishes. But your brain? It's already somewhere else.
They were great at not writing it.
They knew when to say:
- "We don't need this."
- "There's a library for that."
- "Let's solve the real problem, not overengineer the symptom."
They were great at not writing it.
They knew when to say:
- "We don't need this."
- "There's a library for that."
- "Let's solve the real problem, not overengineer the symptom."
They were great at not writing it.
They knew when to say:
- "We don't need this."
- "There's a library for that."
- "Let's solve the real problem, not overengineer the symptom."
They were great at not writing it.
They knew when to say:
- "We don't need this."
- "There's a library for that."
- "Let's solve the real problem, not overengineer the symptom."
Unless it's your differentiator, don't reinvent the wheel.
I've seen teams roll their own auth, config systems, feature flags, even analytics platforms — all because they convinced themselves that they should.
Unless it's your differentiator, don't reinvent the wheel.
I've seen teams roll their own auth, config systems, feature flags, even analytics platforms — all because they convinced themselves that they should.
Unless it's your differentiator, don't reinvent the wheel.
I've seen teams roll their own auth, config systems, feature flags, even analytics platforms — all because they convinced themselves that they should.
Unless it's your differentiator, don't reinvent the wheel.
I've seen teams roll their own auth, config systems, feature flags, even analytics platforms — all because they convinced themselves that they should.
They came from side projects.
Hackathons, experiments, late-night curiosities — they've all taught me something I didn't expect.
They came from side projects.
Hackathons, experiments, late-night curiosities — they've all taught me something I didn't expect.