Not productivity hacks — the real psychological battle of shipping code when your brain would rather do anything else.
Every productivity article starts with someone who figured it out. This one starts with someone who almost didn't.
Between ages 15 and 20, I had a Gold Medal in the International Informatics Olympiad, a custom keyboard layout, and a working Cloudflare plugin. I was the kid who was "going places." Then I spent five years going mostly nowhere.
I watched tutorials. I started projects and abandoned them on day three. I reorganized my Obsidian vault instead of writing code. I built elaborate development environments for apps that never shipped. I was the world's most productive procrastinator.
The dangerous kind of procrastination isn't lying on the couch. It's doing work that feels productive but avoids the hard thing.
For me, it looked like:
The cruelest part: productive procrastination is invisible. You end the day feeling busy. Your terminal history is full. Your commit graph is green. But the thing you were supposed to build hasn't moved an inch.
I wish I could point to a single moment or a life-changing book. I can't. It was slow, ugly, and involved a lot of false starts. But three things genuinely helped:
The original rule: if something takes less than two minutes, do it now. My modification: start any task for exactly two minutes. Open the file. Write the function signature. Write one test. Just two minutes.
The psychology works because starting is harder than continuing. Once you're in the file, once the context is loaded in your head, the activation energy drops. Most of my two-minute sessions turned into two-hour sessions. The ones that didn't? At least I'd written a function signature I could pick up tomorrow.
When I started writing Docsee in Rust, something shifted. Rust is unforgiving — it won't compile your code if you're being sloppy. There's no half-assing a Rust project.
That friction was actually helpful. The compiler yelling at me was more engaging than the silent, permissive emptiness of a blank TypeScript file. Rust's difficulty forced focus. I couldn't drift because the borrow checker demanded my full attention.
Counterintuitive lesson: sometimes the cure for procrastination is making the work harder, not easier. Easy work is easy to postpone. Hard work that engages your problem-solving brain is harder to put down.
The version of me that procrastinated had an identity problem. I thought of myself as someone who could build great things, but I wasn't currently building great things. The gap between who I thought I was and what I was doing created anxiety, which created more procrastination.
What helped was lowering the bar. Instead of "I'm going to build a production-ready Docker management tool," I started with "I'm going to make a Rust binary that lists containers." That's it. Ship the smallest possible thing.
Each small ship closed the identity gap a little. After a few weeks, I wasn't procrastinating because I was genuinely excited about the next feature.
I won't pretend I've "solved" procrastination. But here's what my workday looks like when things are going well:
Morning (first 90 minutes): The hardest task. No email, no Slack, no social media. Whatever I'm most likely to postpone, that goes first. Cold start.
Obsidian for task management: I keep a daily note with three items maximum. Not ten, not twenty. Three things that would make the day a success. If I finish all three, great — I'm free to explore, refactor, or experiment. Most days I finish two.
Pomodoro, loosely: 45 minutes on, 10 minutes off. I don't time it precisely — I just notice when I'm drifting and take a deliberate break instead of pretending I'm still working.
End of day: I write tomorrow's three items before closing my laptop. This means I never start a morning wondering "what should I work on?" — the most dangerous question for a procrastinator.
Writing. Documentation. Emails that require emotional nuance. Anything where the feedback loop is slow (blog posts don't give you green checkmarks like a compiler does).
Karanveer Singh Shaktawat
Full Stack Engineer & Infrastructure Architect
Building portfolio, contributing to open source, and seeking remote full-time roles with significant technical ownership.
Pick what you want to hear about — I'll only email when it's worth it.
Did this resonate?
What 'vibe coding' actually means in practice — my AI toolkit, when it helps, when it hurts, and the meta angle of building this portfolio with Claude.
Tool calls, visitor memory, real-time analytics, an LLM eval harness, and full-duplex voice — wired into a Next.js portfolio over six sessions. The decisions, the wrong turns, and the bugs that took longer to find than to fix.
This blog post? Started three times. Abandoned twice. Finished on the fourth attempt because I applied the two-minute rule to my own advice: I opened the file, wrote the frontmatter, and let the rest follow.
I lost years. Real years that I could have spent building, contributing, growing. The version of me that won a gold medal at 15 would be disappointed in the version that coasted until 22.
But here's the thing I've made peace with: the version of me who coasted is the same version who built production infrastructure for 10,000 users, wrote a Docker tool in Rust, and managed 18 million emails. The procrastinator and the builder are the same person. One just shows up more often now.
If you're in the coasting phase, the only advice I have is this: lower the bar until you can clear it, then raise it by one inch. Repeat for the rest of your career.