Note more discussion at http://news.ycombinator.com/item?id=4037794
Welcome Hacker News Visitors!
While HN is a fine forum for discussion and debate, Programmers - Stack Exchange is not. From the FAQ:
If your motivation for asking the question is “I would like to participate in a discussion about ____”, then you should not be asking here. However, if your motivation is “I would like others to explain ____ to me”, then you are probably OK. (Discussions are of course welcome in our real time web chat.)
Currently, this question is viewed by the membership of Programmers.SE as more likely to provoke unproductive discussion than constructive answers; while debates on its form and future are conducted, it will be locked to prevent arguments and vandalism.
-- Shog9
I have a relatively simple development task, but every time I try to attack it, I end up spiraling in deep thoughts - how could it extending the future, what are the 2nd generation clients going to need, how does it affect "non functional" aspects (e.g. Performance, authorization...), how would it best be architectured to allow change...
I remember myself a while ago, younger and, perhaps, more eager. The "me" I was then wouldn't have given a thought about all that - he would've gone ahead and wrote something, then rewrote it, then rewrote it again (and again...). The "me" today is more hesitant, more careful.
I find it much easier today to sit and plan and instruct other people on how to do things than to actually go ahead and do them myself - not because I don't like to code - the opposite, I love to! - but because every time I sit at the keyboard, I end up in that same annoying place.
Is this wrong? Is this a natural evolution, or did I drive myself into a rut?
Fair disclosure - in the past I was a developer, today my job title is a "system architect". Good luck figuring what it means - but that's the title.
Wow. I honestly didn't expect this question to generate that many responses. I'll try to sum it up.
Reasons:
Analysis paralysis / Over engineering / gold plating / (any other "too much thinking up-front can hurt you").
Too much experience for the given task.
Not focusing on what's important.
Not enough experience (and realizing that).
Solutions (not matched to reasons):
Testing first.
Start coding (+ for fun)
One to throw away (+ one API to throw away).
Set time constraints.
Strip away the fluff, stay with the stuff.
Make flexible code (kinda opposite to "one to throw away", no?).
Thanks to everyone - I think the major benefit here was to realize that I'm not alone in this experience. I have, actually, already started coding and some of the too-big things have fallen off, naturally.
Since this question is closed, I'll accept the answer with most votes as of today. When/if it changes - I'll try to follow.