Developer's Block
Posted5 months agoActive5 months ago
underlap.orgTechstoryHigh profile
calmpositive
Debate
20/100
Developer's BlockProductivitySoftware DevelopmentAI Assistance
Key topics
Developer's Block
Productivity
Software Development
AI Assistance
The article discusses strategies for overcoming developer's block, and the discussion highlights the importance of taking breaks, simplifying mental models, and using AI tools to aid in productivity.
Snapshot generated from the HN discussion
Discussion Activity
Very active discussionFirst comment
11m
Peak period
57
0-6h
Avg / period
14.7
Comment distribution103 data points
Loading chart...
Based on 103 loaded comments
Key moments
- 01Story posted
Aug 23, 2025 at 5:20 AM EDT
5 months ago
Step 01 - 02First comment
Aug 23, 2025 at 5:31 AM EDT
11m after posting
Step 02 - 03Peak activity
57 comments in 0-6h
Hottest window of the conversation
Step 03 - 04Latest activity
Aug 25, 2025 at 10:51 AM EDT
5 months ago
Step 04
Generating AI Summary...
Analyzing up to 500 comments to identify key contributors and discussion patterns
ID: 44994590Type: storyLast synced: 11/20/2025, 6:39:46 PM
Want the full context?
Jump to the original sources
Read the primary article or dive into the live Hacker News thread when you're ready.
---
Talking of pages, I quite often write down on a physical notebook what I'm trying to accomplish. Because if I just dive straight into hacking code I sometimes get a frenzied feeling, as if I'm just bouncing around like a pinball in an undisciplined way.
If you work for someone, you are essentially plumbing, you will still find faults with their ideas and inform them. But you don't make the call to change that idea, nor do you have the burden of living with the finished product. It doesn't have your name attached to it. No one will call it, siva7's crm, you will move on to the next project.
Now, if you are building something for yourself, you are the creative writer. It's your call, it's your want, it'll have your name attached to it. You can move on, but in everyone's mind and your own, it's your creation.
But... I'm employed? I mean surely it translates to "go on vacation" but it's pretty useless advice for days where you simply have to work and can't just... not?
This can come forth in so many ways.
Moment by moment we can have an eye on our body and what it is asking for, I've found it to not only make me more productive, but also led to my baseline of stress to being way, way lower then everyone around me which is contagious in a positive way.
"Sustainable pace" helps, which in my case came down to 37 hour working weeks, not working at weekends, and taking all my vacation (and some extra when my employer let me buy it). I know this might sound like madness to Americans, but as a Brit employed mostly by American companies, it worked fine for me.
I found that taking plenty of breaks during the working day helped. Coffee breaks with colleagues, a decent lunch break (ideally including exercise), and plenty of tea breaks. So many times I've had a good idea or solved a problem during a break, so they are actually productive.
Then there's finding other useful things to do which aren't as taxing as the thing that's blocking you (e.g. the next large feature). Fixing bugs, writing docs, and doing preparatory investigations about the upcoming work are all productive ways to give yourself a bit of a mental break. (This was hardest when working in teams with continual short sprints or doing XP and pairing, but if I allowed myself to start to burn out, my productivity started to decline - essentially my brain was forcing me to take things a little more slowly in order to recover.)
I just grind through it and repeat the days.
I would do only aimless activities if I relied on the feels.
This kind of negative emotional investment seems to be the only thing that improves my abilities. If I’m learning through Anki or playing tunes on the piano, habit can stop after 6 months of regular daily practice.
But if I’m on the brink of stress rage frustration, somehow it persists .
If a human is available, 30 minutes of pairing works even better. There's just something about breaking tasks down and getting even simple feedback that makes it a good jumpstart.
Relatedly, I've been hearing a bit about goal hierarchies lately. This seems like a more flexible approach than reducing everything to a TODO list and/or backlog. (Here's a random description of goal hierarchies that seems like a good introduction: https://www.spcperformancelab.com.au/personal-training-advic...)
I’m big on this.
I find it efficacious to have an integrated product going as soon as possible, even if it’s a field of stubs.
It’s my experience that I almost never know what the end product will look like, no matter how much upfront planning time I devote, so being able to test and iterate the whole system, as soon as possible, is pretty vital.
It’s also one reason that I like to use test harnesses a lot[0].
[0] https://littlegreenviper.com/testing-harness-vs-unit/
If you want some concrete examples, here you go:
Here's my "Spinner" widget:
https://github.com/RiftValleySoftware/RVS_Spinner
This is the four test harness apps:
https://github.com/RiftValleySoftware/RVS_Spinner/tree/main/...
This is my checkbox widget:
https://github.com/RiftValleySoftware/RVS_Checkbox
Here's the test harness app:
https://github.com/RiftValleySoftware/RVS_Checkbox/tree/main...
There's more, but these should be enough to illustrate the point.
My understanding is, test harnesses are standalone wrapper apps dedicated to testing, vs more granular unit tests which are traditionally colocated with (eg, files alongside) app src code in a given project. Care to elucidate?
^ from https://littlegreenviper.com/testing-harness-vs-unit/
put it all in the harness. same run every time, modulo races, and a lot less tripping over magic you can't always remember or show to someone else.
How many times has this happened to me?
You struggle with a feature or a bug, you think about it, you weigh the pros and cons for hours... because you don't want to start something that will set you back. You're tired, but you don't want to go to sleep until you've at least made a decision for tomorrow.
Go to sleep. Now.
Then you wake up knowing immediately what to do. You hardly believe it, because it was so hard to find before you sleep. And you do it. And it works. And you know that sleep was the key.
Sleep restores you. Exercise is the spark.
Some have pain and/or insomnia waking them up at night with the inability to get back to sleep quickly or at all, and some have pain/injuries that make exercise less fun.
Telling us to sleep and exercise is like telling homeless and starving people to get off the streets, find a job, eat a good dinner, and buy a house. It sounds nice, and we’ll do our best, but the world you live in is different, and you don’t understand.
Don't be such a victim. Not everyone is going to think of your exact situation in every sentence they write.
Telling someone who is victim not to be such a victim is... Nothing but being a dick. They're hurting. There's better ways to talk to people. That people don't think of them, is kinda how they end up being a victim in the first place. They fall through the cracks, and that makes them more vulnerable.
Was this the time and place? Probably not.
Are you helping? Fuck no.
Your swearing is offensive to someone reading your post. Your misuse of grammer as well. What about the people who can't read your post because they are blind, have dyslexia, don't have access to the Internet, etc.? How dare you!
Did you consider the viewpoint of every possible person who could have read your post before you submitted it? Of course not, because that's impossible, and would be an insane request to make.
You've now tried again, to make a personal attack. (I'm so sorry my grammar isn't American. I'm not.)
How about, if you really want the conversation, you post more than flamebait?
But because I've struggled with this thing for decades, I probably do have enough tools to find my own way. And if I've run out, it means I'm about to burnout and need to find a way to restore ASAP.
Couldn’t be more true…
> “Illumination, which can happen in a fraction of a second, is the emergence of the creative idea into the conscious. This almost always occurs when the mind is in a state of relaxation, and engaged lightly with ordinary matters. Helmholtz's ideas usually came to him when he was walking in hilly country. There is a lot to be said for walking during rest periods, unpopular as the idea may be. Incidentally, the relaxed activity of shaving can be a fruitful source of minor ideas; I used to postpone it, when possible, till after a period of work.”
I also recommend walking, I leave shaving to the men to try, and would add that like many others the shower is my most happy place for ideas and hitting on the causes of difficult bugs.
Several years ago a Facebook recruiter invited me to interview with them. It mostly went well, except I bombed the leetcode algorithm quiz.
The next day, as I expected, they sent me a polite note thanking me for interviewing but they would be moving on with other candidates.
The morning after that, I woke up and before I opened my eyes I saw the complete solution on the back of my eyelids, about 20 lines of code.
I stepped through the code mentally and thought, "Yes! This will work!"
So I ran to my computer and typed the code in to test it. Other than one bug - this was old-school JavaScript and I'd forgotten one var statement, so there was an inadvertent global - it worked perfectly.
The raw hours of work were certainly noticeable, but it was embarrassing how difficult tasks the night before suddenly became a breeze the next day.
Does it mean THAT problem gets solved later? Sometimes, but often not. And more importantly, I'm maintaining a pace that's SUSTAINABLE. I can crank on hard problems almost constantly, but I leave myself some space so I don't get burned out.
Particularly the first part. I want to add a new feature, but I want to keep things clean. It needs tests, CI, documentation.
It makes exploring new ideas a bit cumbersome, because code tends to create minor distractions that eat up time. You miss a semicolon, or you forget the order of the arguments to a function you just wrote, do you have to flip to another file. Or the test framework needs an update, but the update breaks something so you have to do some changes. It's not just the time either, it's the context switch from the big picture to the very small details, and then back again.
LLM lets me do "one whole step" at a time. Or that's the positive spin on it. Seen another way, I'm further out from the details, and in most things, you have to hit a bit of a wall to really learn it. For senior devs, I lean towards the first, you've already learned what you're going to learn from fixing imports, you are operating on a higher level.
How successful do you find your method?
Would you recode what you introduced using the LLM?
It works pretty well with Claude Code. Much better than cursor, which is a step up from copilot. Even with the same models, and I'm not sure why. I haven't really tweaked much around the AI tools, since I don't really know much about how they work.
I've just found that Claude Code somehow... just works. Out of the box, no MCPs, no fancy configs. I just straight up tell it what I want, and most of the time it gets it right or close enough to right that a second instruction is all I need.
Would I recode what I wrote? Maybe not from the ground up, since I already had a pretty good framework. But LLM has managed to make some pretty fiddly changes to my codebase recently. It would have taken me a long time, mostly in tedious edits.
It had some good stuff in it, the best of which (for me) was: when stuck, write debugging infrastructure.
[1] https://oxide-and-friends.transistor.fm
[2] https://oxide-and-friends.transistor.fm/episodes/coders-bloc...
Edit: punctuation
Two things that help me:
* have a good boilerplate
* ship things that do nothing
i.e. I find it helps to start a project using my good boilerplate then set up builds and releases (so for web projects, put them online) so that the page doesn't look so blank anymore, and I can see my progress in "releases" even if they're just for me/others contributing.
https://www.awise.us/2025/07/27/source-generator.html
A good defense against this is borrowing stuff from your prior projects, alongside eventually creating templates for the most common stuff.
For example, in new side projects I start, I can borrow the web server (ingress) configuration from the prior ones, same for CI pipelines and a large part of the previous Dockerfiles, sometimes even entire services with all of the annoying setup and configuration stuff already done.
Plus, this way, you have a more or less working baseline and further iteration is entirely up to you - and if you do want to improve things a bunch, then the next time your template will be even better and you'll be able to backport whatever you think everything should have to your other projects as well.
Going with the simplest solutions along the way helps: Bash scripts for triggering builds, CI configuration just calling those, using Docker or similar containers for the environments and builds, your ingress just being Nginx/Caddy/Apache2/..., using PostgreSQL or SQLite and specialized stuff like Redis/Valkey, RabbitMQ, MinIO and so on instead of reinventing the wheel.
Sometimes it's also useful to write utility scripts and even small tools to help with the projects, I bet developers that have been around for decades and are way better than I am have a lot of that stuff, alongside a healthy helping of dotfiles for existing tools to get in the zone while doing the dev work. Although it can also be helpful to go the YAGNI route and customize things as little as possible, like a stock IDE install, not even bothering with the color themes or keybinds or a plethora of plugins - just install and go.
By which time beat practice has completely changed and everything you setup is out of date.
And that's backend, it's much worse for frontend where even 6 months later your 'perfect' template is out of date.
For example, I used to work on a mainframe product that dumped the address space to disk on a crash. Then it was possible to build all sorts of fancy tooling to analyse the dump. When I moved to a different platform, without those kinds of dumps, it was tempting to try to reinvent all this stuff, but it would have been a massive time sink (and would have failed too).
I agree with most of the article, but this part keeps me thinking. Scheduling to contribute later will almost never work. Either I do it now or never. The task is lost in a list of infinitely many tasks. Also, contributing to a dependency (if I understand this correctly) is always something that helps at least two: yourself - doing something good, helping to improve someone’s work, getting something done - and the person who works on the dependency project. The other gets (positive) feedback and knows someone uses their product/software/library
(One advantage of deferring is that the contribution may be better quality when I've had more experience of using the dependency.)
At the function level, I'll often write the function and then rename it with F2 after I've written it.
I like extreme cycling, and it helped me solved many problems about development.
When I'm riding my bike and listening to music, especially when freely imagining and designing my product in my mind, I am very relax. Many aspects of my products were designed while I was riding.
Cycling is a great form of exercise. It not only helps you strengthen your body, enjoy the scenery, relax your mind, relieve stress, and adjust yourself, but it can also spark plenty of inspiration. If you’re under heavy pressure or working on a product, I highly recommend you go cycling regularly.
Simplify the mental model of the code, product, etc. Discuss it with someone.
"Ironically" because I usually rewrite almost everything it generates (sans the file and class names, sometimes). But when I describe the idea enough to give Claude some chance of implementing it, I refine it and start planning the high-level implementation. Then the file of LLM slop, even though I have to rewrite most of it, is much less overwhelming than a blank file.
> Take time with learning
But this one in particular stands out. We are being constantly pushed to ship code at faster and faster rates. AI has only hastened the process.
If you want to learn anything new you have to slow it down, push back against all the forces urging you to do more, ship more, make more money.
If you're using AI tools, do the opposite of what everyone else is doing. For every piece of generated code you accept, scrutinize every line, ask clarifying questions, ask for alternate implementations, ask what the tradeoffs are.
Just be curious.
This will be slow, but that's the point.
I start to experiment with coding agents to try some things to make me unstuck. These are cheap to try.
Then, the outcome is either "wow, this can actually work" or "but this is bullshit, and will never work, let me do it myself the right way!"
Win/win.
For solo work, I've found a framework of four learning modes effective: reading, when you are exploring something new, sketching/speccing depending on the detail level you're aiming for, coding only when you might forget things you didn't bother writing down, and relaxing as the fallback state. The key is to be in only one mode at a time and to avoid getting stuck in any single one. Based on nature of the work, you might switch two or three times a day. And always know the next two immediate steps; if you don't, that's your signal to switch. Rinse and repeat.