Simply put: You're shopping, not creating. I went through a phase like this, too. It also had some relation to being stressed, or not socializing enough, in my case.
The healthy thing you want to be doing is practicing. Ground the big idea within the question, "what part of this can I start implementing now?" It doesn't matter how tiny or trivial that part is, as long as it has a clear link to the big project - the more direct, the better. Allocate time to implement that, instead of shopping for best practices. Allow your implementation to be a little bit cruder than you think it should be.
If you're doing anything worthwhile, you'll soon land in a zone where tools and tutorials don't really help you anymore. There's just the project you have, and your will to work on it. You can still fall back into the shopping cycle at this phase by rewriting things with a different tool or technique, but that's where you should reassert the part where it's "a little bit crude." Focus on concrete, measurable metrics, and you will get away from the spell of "best practice."
It's very hard to stop shopping, and if you don't stop, you lose. There's a fantastic SF story that is the perfect allegory (Arthur C. Clarke, Superiority):
EDIT: It angers me that this comment was down-voted. That story was difficult to find, and it really is the perfect allegory to the OP's problem, and the more general "worse is better" notion. What is this, some sort of prejudice against Golden Age SF as a cultural touchstone? Would I be similarly penalized if I mentioned "Sisyphus" or a "Gordian Knot"?
I have loved that story ever since I read it as a teenager. Incidentally, it is an almost perfect metaphor for the F-35 Joint Strike Fighter, the "jet that ate the Pentagon".
Thanks for this comparison. I went through this very same thing, and spent a lot of time and ammunition firing at the wrong solutions before I landed on this very same thinking. Best practices are fine, but it's way more important to get some code written for that feature. Forging ahead without tutorials and Stack Overflow (using only what you know as a software developer in general) is going to make you a better, more productive developer a lot faster than anything else. The shopping metaphor is excellent.
Forget what most here are saying about Adult ADHD, ADD or whatever fancy schmancy TLA is this era's Mental Illness Du Jour.
You, my friend, are suffering from Procrastination.
You have the idea - but you're putting SO MANY barriers in front of implementing that idea. You're finding excuses NOT to just sit down and write code. You're procrastinating.
I know this because I too am guilty of it - been guilty of it all this week in fact. I have an application to write for a business client - it's Wednesday already and I'm still "thinking over it". I should get started on it, preferably before this week is over.
Listen. Forget TDD. Especially if you're a team of 1. Just sit down, decide on an IDE - vim will do, even! - and start writing Code That Does Something for your idea. Got stuck? Google for "how do I <do this in $language>?", see how to do it, then write the Code That Does Something.
"But, the TESTS!" - here's my method of development (as I'm on a team of 1) : A) Write the Code That Does Something. B) Run it and see if it Does What You Wanted It To Do. If it does, great, carry on. If not, sort that bit out until it does. Then carry on.
> You, my friend, are suffering from Procrastination.
1000X this. I recognized this immediately because I see the same pattern in my own behavior. OP starts out doing a bunch of things that will need to be done eventually for the project to succeed, but that are essentially a waste of time and other resources at the initial stage. OP does this (I do too!) because those steps are familiar, easy, and very well defined relative to actually working on the project. Actually making progress on a novel project falls outside our comfort zone. Stop procrastinating.
Also try grabbing what you think you'll need then taking your laptop if you have one and go and work somewhere without internet. If your laptop has a 3g modem leave the sim at home, leave your smartphone at home. You don't need the internet all the time.
Not when using tools that are unfamiliar. It's really really hard to fight the urge to Google "how do I XXX in YYY". Even though I have an online documentation browser (Dash), I still Google first; it's much faster.
Perfectionism and procrastination can be tightly-coupled.
This page [1] convinced me, against my own intuition, that I'm a perfectionist. I thought I was lazy, but I'm not. Perfectionism is simultaneously one of my greatest strengths and weaknesses.
If you can identify perfectionism and put a name on it, it's easier to manage. This book (short, small, cheap) [2] contains useful coping strategies.
Let me add another book on procrastination and perfectionism to the list which is a favorite of mine:
The Now Habit by Neil Fiore
Although it seems the OP has settled with FOMO, I still think this can provide valuable insights.
Another advice to reduce information overload: Close those (probably) hundreds of browser tabs & disable session restoring, block HN for most of the day and read emails only once a day.
I do most of this, only I write tests too :) I tend to implement a rough version first, then write some tests, then get those tests working, then iterate and refine. Any time some code does something unexpected I write tests to define what I expect it to do and then get it to do that.
But Writing Code That Does Something is absolutely the important first step!
The other thing that I found helped get over this was to stop assuming that at some point some sneering jerk of a programmer would look at my code and criticise it for not using the latest shiny, and accept that the only time anyone would look at my code is if it became a success, and if that happened I could shrug off any criticism with a "it worked didn't it?" response. In other words, stop worrying what other people might think of my tech choices.
I wonder if this phenomenon is perhaps one of the side effects of the cost of producing and deploying software approaching zero. You could learn a language, framework, or library a week for the rest of your life for the cost of an internet connection. You could spend the rest of your days locked in a man-made cave studying software development methods. You can throw out your work with the sunk cost being only your time.
I think it is, indirectly. This is a side effect of everyone else making worthy frameworks, languages, etc. I've been doing this long enough to remember when the choices were basically Microsoft C++ or Borland C++. Then Java was basically the one best choice. Now, there are too many choices.
You just told the person that might really benefit from seeing a psych* specialist that adhd is bullshit and they just need to stop procrastinating. You are obviously neither a doctor nor a psychologist and have no appropriate professional qualifications nor personal experience with real ADHD, but please consider that what you said has real potential to cause harm and can needlessly prolong somebody's suffering or worse.
> If I am going to build this in React.js (which I totally should do) then I’ll spend less time in Visual Studio and more time in Sublime Text. Before I can start, I should first verify that my Sublime color scheme is up to par.
The problem is the leap from "I'm going to be spending time in Sublime Text" to "my Sublime Text environment must be perfect before I can get started." I used to have the same problem, constantly fiddling with my tools to try and get them Just So. It was an enormous time sink.
Eventually what helped me get past it is learning to be OK with the idea that your tools are sub-optimal, because they will always be sub-optimal, no matter how much time you spend bikeshedding them. There's always one more font, one more plugin, one more color scheme. You're always one step away from perfection, no matter how many steps you take.
(If you want to get philosophical about it, we humans are all imperfect creations too, right? So it makes sense that our works, the things we make, would be flawed as well. Perfection is not a quality of things made by human hands, no matter how skilled those hands are.)
So the only way to be productive is to take a sort of Zen attitude and learn to be OK with imperfection. Accept your tools as you accept yourself, flaws and all.
Fill your bowl to the brim
and it will spill.
Keep sharpening your knife
and it will blunt.
Chase after money and security
and your heart will never unclench.
Care about people's approval
and you will be their prisoner.
Do your work, then step back.
The only path to serenity.
like,
if you aren't using today's fad language in the very latest version of
the IDE, you'll be left behind. aaaugh! but it's good that some people
run like they are scared out of their wits. if they suddenly disappear
over the edge of a cliff, a good number of people will notice in time and
_not_ follow them. those are the ones that matter.
you can scare most people most of the time, but you can't scare all of
the people all of the time -- some will always use Common Lisp.
The problem I face with accepting imperfection in general is twofold: 1) while I may not ever reach perfection, it's still a goal, because I find that I have flaws, and I can (and sometimes do) fix them, and life is better (plus after fixing I may then see new flaws to fix that I couldn't see before) and 2) when I'm forced to use a very imperfect tool for [business reason], when I know about this more perfect (not necessarily more shiny) tool over here but can't use because of [business reason]. In the second case, there are two states that are happier: actively using the better tool, or not knowing about the better tool in the first place. When you already know about the better tool, and can't soon get to the point of using it actively, the transition period can be demoralizing sometimes.
I have a set of guidelines for myself to keep me from going off into a never-never land of getting nothing done, because I love new gadgets, new software, new tools, etc. They aren't rules, because sometimes the right way to solve a problem is to use something new, but they do help me avoid a lot of pointless wheel-spinning.
Some of those guidelines:
Editing text is a solved problem, emacs or vim, pick one and get back to work. I picked vim 20 years ago, and have mostly stuck with it. I can imagine someone else might have other editor options in the list of things that solve the editing text problem. I go outside of this guideline when poking at Android development, because all of the current docs and tutorials assume I'm using Android Studio and the friction is so much lower when using those tools. At other times I've used other tools. jEdit, Eclipse, OpenOffice, when they were the right tool. But, I always come back to vim for editing text, and it's always what I try first before trying to find the optimal tool...only if vim makes something hard do I branch out.
Linux distributions aren't all that different. Pick one, and get back to work. I picked Fedora 20 years ago (when it was called Red Hat Linux), and have stuck with it. CentOS/RHEL/Scientific Linux goes on my servers, because it's just like Fedora, except stable and reasonably secure for up to a decade after release. Other options are reasonable, but there is no reason for me to switch. I have to know the server-side of every distro my software supports (and FreeBSD), but I don't need to know the desktop minutiae of every distro, so I ignore it completely.
Avoid relying on proprietary tools, particularly those that require a lot of learning to use. This one is more subtle. Maybe the best tool for the job is a proprietary piece of software or a web service...but, it's difficult to have faith that it will be around in five or ten years. So, if there is a slightly worse Open Source option, I will choose that option, because I am less likely to have to learn it again or re-develop my ancillary tools to work with it. I happily pay for good software...but, I don't happily pay (in time or money) for a forced upgrade/migration cycle.
There are lots of others that are less relevant for this context; experience can make some kinds of decisions quicker to make. Though, I guess it can also put blinders on making it harder to see new and better ways to do things. It's probably worth revisiting these decisions every five or ten years to be sure the landscape hasn't changed dramatically.
It's interesting that you "have tons and tons of ideas for mobile apps, web applications" but don't see them through to completion.
I'm the opposite: few worthwhile ideas but consistently finish the side projects I start, however minor -- I don't allow myself to start a new one until I've finished the last one.
Maybe you all shouldn't trade positions but contact info.
In my experience, I'm much more productive if I'm collaborating or otherwise have obligations to someone. It sounds like the OP needs some human interaction, which is often good for minimizing certain bad self-indulgent habits. For example I eat much healthier when my wife is around then when she's not, even if the meal is just for me.
Stop caring. Make something messy and shitty. Tell yourself you are going to make something messy and shitty; gleefully ignore any "best practices" that make it a pain in the ass to just slap something together.
Don't worry about a name or a domain or a hosting or whatever. Just slap it together in the stupidest way you can. You wanna make a game? Build the gameplay with colored blocks moving around in some crappy toy game-making app. You wanna make a web app? Shit something out in PHP.
If your utterly shitty implementation of the idea feels like something worth pushing further, then you can start investing in Doing It Right.
This goes for any field, by the way. Obsessing too much about a painting? Grab a crayon or a highlighter or whatever and some cheap paper and make a few messes until you have something that actually works, even in its shittiness of execution. Making music? Just plop down a few chord progressions or some little doodles of melody or rhythm, until something has that spark. Writing a story? Scribble down the barest outline of the plot and ask yourself how many cliches you can count, sit down with a bottle of wine and a notebook and a list of interview questions to pick from to ask that character who's sitting in the back of your head and won't go away.
Whatever you want to make, make the crappiest version of it you can, and then start refining it.
And if all of your ideas are too good to sully with this, don't sit there. Put them in a notebook, and come up with some throwaway ideas that you're perfectly fine with doing shitty versions of; this will hone your skills, and eventually you can look at that one shining, amazing idea that still seems like a good idea twenty years later and decide that it's time to have a go at it.
There was a short talk by Andrew Tridgell (one of the creators of Samba) about having a "junk code" directory. I'm not sure if there's a video but https://www.samba.org/ftp/tridge/talks/junkcode.pdf gives you a reasonable idea.
The value is that you can eventually give yourself a break and just write goddamn code. I have terrible terrible code in https://github.com/voltagex/junkcode but it's fine because if anything there really grabs me I'll graduate it out into its own repo.
This is really good advice. This is what I get out of hackathons. It doesn't matter whether it's clean, if you want to win, all that matters is that it works. You'll do whatever needs to be done to get there, rather than resting on some set of ideals. I just haven't quite figured out how to create the sense of urgency in my side projects.
I'm not sure urgency is always what you need for a personal project. I've been working on a graphic novel[1] for four years; there are some days where I get several hours in, there are other days where I only manage a half hour. Even if I only get a half hour's work in, at least it's a half hour closer to the end than it was when I got up that morning. Past a certain point, what matters is not that you burnt the midnight oil; what matters is that you got it done and that the end product is a full expression of your vision.
(I mean, if you've got a deadline with hundreds of thousands of dollars worth of ad buys and manufacturing lined up for it, sure, you end up crunching to meet that deadline. But if it's just for you? Screw deadlines. Just keep working on it; it's Done when it's Done.)
My GitHub profile is a wasteland of dead side projects and my Gandi account is full of .io domains that I never quite got round to using. I very much identify with this post and I don't know why it happens.
When I'm at work I have no problem knuckling down and finishing a piece of software. However, in my free time, I'll come up with an idea, buy a domain, design a logo, create a repo, spin up a Digital Ocean instance, pick a stack, tune Vim, weigh over monetization options, consider open sourcing, the list goes on and on. Finally, I get started and it goes great, the code is really elegant, I put a new programming technique/trick to use, and then I think of something more interesting to do. The cycle goes on.
I enjoy writing music almost as much as programming, so developing games goes a whole level deeper. I'll get hyped up doing the game art, then start writing the soundtrack and by the time I get to writing code for the game, I'll lose focus.
The only times I have ever beat the internal system, is when I've been forced to focus on MVP. Hackathons, proof of concepts and toys. Once I have something working and demonstrable, I can often motivate myself to go back to it.
I don't have any other advice, but just know that you're not the only one who suffers from shiny stuff syndrome.
About 50% of my projects die in the following way:
1) I've got an idea for a useful library that might finally make my GitHub not look so lame!
2) Search github: (idea) language:(language)
3) Oh, there's the exact thing I was going to build. Never mind.
Another 49% die this way:
1) It'd be so cool to have X!
2) (thinks about time to actually develop X versus real value it would give me and likelihood of anyone paying me for it to make up the difference)
3) Oh man, screw that, it's not even worth 1/100 that amount of effort.
I'm terrible at generating projects for "itch scratching" reasons because I cost/benefit them to death first, or I think of them 6 months after someone else already had the idea :-/
The thing I love most about the cpan is step 3. I don't tend to do steps 1 and 2 much because of that. However occasionally I find I get to step 3.5 - oh I need that and the maint has given up on it. Usually I chat to the original author and discover I don't need the feature. Rarely, I'll [steal maintenance](https://metacpan.org/pod/Plack::App::FakeApache) to get some of the features I need.
Bingo. If there's nobody else already out there selling what you're thinking about doing, there's probably a reason. And the reason is probably not "nobody thought of this yet".
And odds are, if there is just one player in the market they're not very good. Simply by virtue of being the only one; the odds of that being the case simply because they are amazing and perfect is so miniscule. It's most likely that no one has bothered, or had the effort to out-do them.
Finally, I get started and it goes great, the code is really elegant, I put a new programming technique/trick to use ...
That suggests your primary driver was to get to try something new. Once you've satisfied that urge, you move on to the next bite-sized learning experience that will give the same initial rush.
If you want to get into shipping mode, maybe you should try to explicitly force yourself out of "elegant experimentation" mode by doing things the "boring" way, whatever that may be for you.
That's very rarely the case, I think it's more to do with the fact that I'm still learning.
I've become more and more comfortable with FP over the last year and I enjoy being able to utilise the new things I pick up, but I don't think I've ever worked on a project purely to try something new.
I tend to experiment at work too and our products always ship.
In most cases a competitor is not doing exactly what you want to do.
If your idea involves some sort of a gimmick or very specific point of attraction and that is already being used by a competitor, then sure, maybe you should pick a different idea. But otherwise there is likely much room for competitive advantage.
Sounds like me. What I've found helpful is to reduce the scope of the project. Focus on base hits rather than home runs.
Not quite the same as "MVP" if MVP implies permission to release something crappy and incomplete.
I shoot for something small, polished and excellent.
The finishing stretch is hard. One has to learn to enjoy this process; documenting, adding unit tests (if needed), jumping through hoops like CPAN or the app store.
I often don't get that far. I just come up with all the potential problems with my idea; usually related to monetization or existing competition and then I bin the idea.
Something people forget is that we have a finite learning capacity and learning just for the sake of learning can wreck your mental health.
I can read hundreds of pages a day but if I do this on a sustained basis it overcharges my brain and I have problems with anxiety and can't sleep. A modest dose of video games helps me chill out since I am working with the same patterns over and over again and not needing to sort through a lot of stuff.
In the book "Have Fun at Work" it says that people can read about 60 pages of technical stuff a day.
I have standardized on Java for a programming language. I've put a huge effort into making peace with Maven, Spring, and my IDE. I have a framework that deals with a lot of the BS when you do command line apps so that I can bang out little apps almost as fast as a Python programmer can.
A lot of my getting there has been getting in the habit of reading the same stuff over and over again until I know it like the back of my hand. For instance I went through a year of hell with Maven and Spring because I was working on systems where whenever somebody had a problem they looked it up on StackOverflow. Nothing was ever done the same way twice and builds and configuration was a continuous source of frustration.
After reading the manuals for those products cover to cover multiple times I understand them in a holistic way, I use them right, and I can understand what is happening when people do strange things.
There are certain areas where I am pushing the start of the art and learning a lot and frankly that means I am working on certain things and I think as little as I can about Javascript frameworks and the like. For instance I think Clojure and Ruby are both cool languages but I don't have time to look up how to find the length of a String and stuff like that so I only write Ruby to configure Vagrant.
While it may be true that we have a finite learning cap per day, different people have a different cap. I know folks who voraciously read everything and learn many new (and different) things per day, and I know people who can't handle that pace. It's dangerous to slap an average number on this and say that everyone is limited to that.
Appreciated the rest of your post, it highlights the importance of good documentation in optimally using systems.
I agree the 60 pages number is arbitrary, but I think if like the reader you are feeling overwhelmed it is a sign you are trying too much.
I certainly read much larger amounts of new stuff every day when I was younger, but I was also anxious as hell to the point where I blew many good opportunities and even had blood pressure higher than it is today despite the fact that the objective level of pressure in my life is higher than it has ever been.
I have the same issue as OP, but where it concerns even learning the programming language. I've started I don't know how many times. I've made minimal progress. I'm disheartened.
You aren't able to get out of the sketchbook or notes in your over-architecting phase. It is normal.
It is a typical developer arc. You are probably around 4-8 years in.
- The first 2-3 years are focused, prototype like, just happy it is working phase. Piles of crap code here and a few successes. Underplanning is the key problem with a focus on proving you can do it.
- The second phase it the overly architected phase. Years 4-8 or so. Piles of crap designs, plans and notes here, a few solid projects and products here. Overplanning is the drag, lack of focus on shipping due to overly focused on tech, bouncing from idea to idea. Experimenting... (I bought about 100 domains in this phase myself, lots of people write their own string class here if you are doing C++ instead of finishing the project, too much focus on tech here over product). This phase is focused on proving you can do it right.
- After 8-10 years, that is where the balance kicks in Daniel son. Hype is kept in check, learning that monolithic frameworks are an enemy to good products, sketching only when you can't prototype it, prototype based but fast to switch to product/live mode when ready. Do all that extra fluff ONLY if it is a viable idea or product. Focus is the key here. This phase is focused on balance.
You have developed a good pipeline, but you are using it too early on ideas. I like setting up the system all the way to the end like the url, server, etc. But only do that on ideas that are a good time in, after days or weeks and great strides on the actual product, not the surrounding support.
Good news for you is you realize your problem and you may be leveling up.
Let new ideas simmer, learn to use your excitement and thoroughness to deliver fully finished products. It is a battle but one that you can win with discipline, there are too many toys but lots of toys are a waste of time. They can't just be cool, they have to mean useful to your current project/product. But definitely stay up on technologies and do things right, just make sure it is something you are going to go the distance for.
Very well put. Good tip that helps to get over that phase of overarchiteching is to get a job with competent people around you who push you to perform better.
Easier said than done perhaps, but getting a new job or doing something you didn't think you would ever do, especially with a good team surrounding you can really push you over that phase and get you to trust your skills.
Leave the comfort zone! Do something that seems too difficult, just do and grind and you will find the methods to blast through any wall ahead of you.
It's more about discipline than having the best methods. Through discipline I learned that I can solve any problem, it just needs work. The solutions are not most of the time the most elegant, but over time those features of the code that stick around get cleaned up and they transform to something beautiful.
Huh. And here I am, having spent 25+ years doing this, and new things still attract me. I've learned to watch this behavior (mostly - I'm here commenting, aren't I? ;). But I have not yet reached a stage of "balance".
Granted, the shinier things are more high-level this time around - but this seems to point to the fact that this is a repeating pattern, not something that you conquer and forever solve.
Me too. Maybe 30+. I have alternately thought that it was procrastinating, ADD, FOMO, the distraction of shiny objects, etc.--new terms keep appearing.
In the past this has been "useful", because I learned a number of tools
before I had need for them. "Useful" in quotes because I might not have been most productive
at that moment but maybe it amortizes over time (ie, maybe I "10x" for spurts at later time),
and it got me skills and opportunities that I wouldn't have otherwise.
If I don't a creatively productive day in doing what I'm "supposed" to be doing, I need to feed that hunger by learning something new. Sometimes it's shopping for shiny things, other times it's going deeper into something... still looking for the balance.
This is a really appropriate comment. I'm about 8 years into professional development and feel like your first two phases are spot on.
I also sympathize with the author because it's just so fun to get all organized for a new project. Eventually, that ends up just sucking all the energy out of me for actually completing the project I set out to do in the first place.
I don't think this is a problem. I think what you're doing is totally okay. The only problem is that you feel shame about it, and the solution to that is to stop seeing it as shameful.
Why do you keep picking up new things rather than finishing things? Because you enjoy picking up new things more than finishing things. And that's totally fine! It's fine to enjoy playing with shiny new toys. It's also fine to enjoy sticking at one boring thing and finishing it. And largely, it's not your choice what you enjoy, it's just one of the many things you rolled up during character generation.
It may be true that sticking at one thing is a better technique for starting a hojillion dollar business. Or it may not - if you weren't such a magpie, how many ideas for hojillion dollar business would you have? And it may be that flitting between things is a better technique for other things - journalism, freelancing, meeting people? However it is, you have a choice between either struggling to do something you're just not suited to, and being miserable, or ditching the shame, doing something that you are suited to, and being happy.
There's a concept called (in various circles) a spike, proof of concept, etc. You don't write tests, plans, requirements. You just code.
Its a terrible way to write production software. Its a rare thing in my life to spike out an idea and put it unmodified in production. But when i find myself doing what you're doing (which does happen from time to time) I find its a crucial part of breaking myself out of the cycle.
And not for nothing, but you sound like you're isolated. Working with other developers as part of a team (or better yet, a pair) can also do a lot for breaking out of this kind of cycle. ADD drugs will help, but they're not all of the solution. Stop "preparing" to write software and just write some.
You are right. I am totally isolated. This consumes me to a point where I sit here for 16 hours a day, learning, coding, dicking around (like another commenter said).
I know I need to break the isolation, but I fear I'm too deep into my own world. I'm The Lawnmower Man (just less evil)
"I know I need to break the isolation, but I fear I'm too deep into my own world."
You're not. You're just afraid you might be.
I feel like I'm breaking through a similar feeling in my work place, so I can relate to the feeling. But talking to coworkers is helping me to see the similarities between how we think and lessen the feeling of isolation.
So just try talking to some people who might share your interests, and see how it goes.
Go find a local meetup, or do volunteer (tech) work for a charity, or tutor/teach, or find a pen pal / forum buddy working in a similar space. -- do something to put some social contact in your work.
"I know I need to break the isolation, but I fear I'm too deep into my own world."
That's the procrastinator in you talking. Or the fear that those things you create won't go big and solve your dream. Forget the YC path and build a side-project/lifestyle venture that is interesting or challenging, and get a good routine going. Maybe it takes off, or maybe it's a steady side-project for a few years - no shame in either.
Build anything that gets you early users as eventually they will take over and be demanding features that give you the impetus you need.
Dealing with Adult A.D.D. is more than just taking medication and "forcing" focus. You have to use your working memory or supplements to it, like a note-pad, to coach yourself about what is the best use of your time. You obviously know that none of these other things is helping get actual project work done.
One thing that has been very helpful for me is counseling. (Also called therapy).
A psychiatrist will prescribe medication, but a psychologist will help you become aware and devise strategies for dealing with behaviors you've described that prevent you from accomplishing meaningful work.
Two books I found immensely helpful are:
Taking Charge of Adult ADHD
By: Russell A. Barkley
and
Is It You, Me, or Adult A.D.D.? Stopping the Roller Coaster When Someone You Love Has Attention Deficit Disorder
I second what you had to say about self-coaching and listmaking. Ruling an ADHD mind is all about the meta-game.
I've always thought it was cruel that methods for dealing with my ADHD involved exactly the kinds of things that ADHD would to keep me from doing:
-Setting appointments with doctors
-Reading full books
-Regularly checking schedules and priority lists
Eventually, I buckle down and these things happen. But it takes me longer than it takes other people, and the trip definitely goes uphill.
Yoga. That advice may get me downvoted as being off topic, but if you suffer through learning it and practice it 3x per week your situation will improve across the board. Why? Because its physically challenging and you sound like you could use that distraction. It turns your mind off (or at least turns it down). It can be social if you give it time. IMHO,the problem is over-focus on tech and restoring balance in your life should be your new priority.
Morning yoga is the thing that enables me to work as a coder. And swims also. If my body is stiff, so is my brain and my ability to code properly.
Also daily meditation. 20 minutes a day does wonders to shutting down the mind and seeing things from a completely new angle.
I would say taking care of your health is the number one priority any coder (or human) should have. The amount of hours sitting in front of the computer just get ineffective at some point, for me it is around 4-6 hours a day, then I just don't crank anymore good code and I have to call it a day and do something else.
We should embrace this kind of relaxed work ethics more, than the forced 8-10 hours a day which are killing people (literally, through stress) in the long run.
Myself and other technie friends (some who have had zero interest in meditation) have found success with Headspace [1] It's approachable and encourages consistency which is the pathway to success in this area from what I have been told :) Good luck!
We are the spoiled children of 21st century programming. There's so much potential, so many great tools and languages and it's all within our reach. I sometimes feel like the ungrateful child stood in the sweetshop, who is cross because choosing one bag of sweets would mean missing out on another.
The internet has made it trivial to share knowledge and experience and we can all use cutting edge, industry standard tools for free. There aren't many fields that you can say that about.
The world that we have grown up in, is tantalizingly shiny and there were never rules to follow. We are a product of the lack of limitations that surround us.
When reading the post, I had the impression that OP has never worked on a large project and seen what it's like to iterate on an existing project to improve it incrementally by working on the critical questions that may only make small changes to the overall app / project. Instead they're always thinking about and working on the large decisions (that are more or less inconsequential in the big picture) that you need to make when starting a project from scratch. I saw one comment about "fear of missing out". I think it's more along the lines of "fear of making the wrong decision and not knowing how to fix it". "Fear of the unknown" maybe. I think it's a useful exercise to think about and work on your early-stage execution (ie. figuring out how you'll prep things for a project, and learning about and understanding the implications of those decisions), but without any experience executing on the later stages of a project, it won't do any good.
There are generally alot of questions that need to be answered early on in a project, but once you've committed you just need to be confident that your skills to architect the project will be solid enough that they will keep you out of trouble, and the code will be modular enough that if you do spot big mistakes you can easily fix them within the existing architecture, avoiding the need for a complete (or large-scale) rewrite.
No, that is not the case. I've been a developer for nearly 20 years. I have a number of LOB applications under my belt that took years to develop. I have seen it all, but the last two years it's been a struggle.
I agree that it may have to do something with the isolation of freelancing on remote projects via the web, the rapid changes in development as a whole, and information overload.
I definitely agree that there are alot of things out there these days. It's difficult to keep up with those trends. But in my experience solid fundamentals translate well to any "shiny new object". The interfaces are different, and sometimes there's something really innovative about new approaches.
IMO in order to maintain a sanity about it all, you really need to dig into "what is this shiny object really accomplishing". This can help change one's perspective from "I need to learn it all to stay on top of new trends", to the realization that "There are really only a handful of truly innovative things happening behind all the shiny objects".
The thing is that programming is kind of boring on one level. And kind of easy sometimes too. So I think it's natural to not always want to do something boring and easy. The times I program continuously in longest stretches is when the programming gets incredibly difficult, aggravating, and stretches the limit of your brain (fun). The problem is that the boring parts are normally what lead to the greatest number of features that make things useful, and the hard parts are those small things that make everything work but might not actually do all that much. The trick is to get good at the boring work and hammer it out in a consistent, quick, and maintainable rhythm. And pushing yourself to achieve that pacing and to not make mistakes makes things more difficult, and thus more engaging.
The rest of it (domains, tools, dev/prod environment, testing, marketing, researching, brain storming, etc) doesn't really matter. The only important thing in this category is sales: talking to actual customers, selling, closing sales, and making them happy. Granted the other stuff is fun and involves surfing the web and playing around with new gadgets, and it's work that must be done, but its enjoyability is far disproportionate to its importance.
As others have said, ultimately what you are doing is very productive-looking procrastinating. The only way to start developing is to, well, start developing.
You don't need a domain name until your code must make a call to a domain, and you don't have any in your pre-existing dev stable to use. At that point, and not before, register one for scratch work. Don't worry about coolness or appropriateness at launch. That comes later.
Picking a language - pick one that works that you already know. If your goal is to make the code go, it isn't time to learn a new language. If your goal is to learn a new language, then your project is a means to that end, not the goal. If you want to MakeTheThing(tm) use tools you currently know. If you want to LearnTheLanguage(tm) making a thing is a fine way to approach it, but the Thing isn't the output.
Learning "best practices" and designing TDD, and user stories, and all that, while valuable, ARE NOT NEEDED TO MAKE THE THING! Making the thing gets you started. When any of the actions you listed become a blocker to making the thing, then, and only then, address it.
I don't get. You can successfully deliver products on time for clients whilst freelancing, but when it comes to your own product you jump around not able to get a single thing done? Since you freelance, I'm assuming you're already familiar with prototyping/moving quickly - so what's the problem here?
Build your MVP quickly. It doesn't have to be perfectly coded with the utmost best practices or with the most efficient algorithms. You will be reiterating and rebuilding it anyways as your idea evolves. Ship as quickly as possible. If the idea completely flops, it'll be because there was simply no market for it, not because of how quickly it was pushed out.
Cut out all the excess that's completely worthless for shipping quickly. Stop buying random books unless you absolutely believe you're completely ignorant in that area, and that your product cannot succeed without it. Don't buy new domain names and new servers - just use one that you already have to get the app up and online ASAP. Don't build your own tools if there are free 3rd party resources already available.
You nailed it. Learning to deliver was something that took years of experience at my day job, and came to me like an "a-ha" moment. Sounds like OP is already delivering maybe just not giving him/herself enough credit.
1) You just start coding.
2) You code everyday.
3) All the other things you did? You do those after your prototype is done.
After you have this rhythm you realize you start to need goalposts. Make them small. Don't think for hours about how it might affect the rest of your code. Just find a goalpost (as small as possible without making it trivial) and do it.
Really the things you listed in your blogpost are totally unnecessary and are, frankly, severely minor in comparison with the actual doing-of-the-project in the larger scope. It doesn't matter what language you use as long as you are familiar enough with it to get-stuff-done. So just stop trying to build a new project with multiple sets of new tools. At most have one new tool when starting a new project. Any more is really counterproductive. As a side note, the fact that you installed linux and described it as being "for the coolness factor" really makes me wonder though. There, quite seriously, are no other options for a small company/individual developer.
Steve Jobs said something I think about a lot: "focus is about saying no." He was talking about what to work on in a company, but it extends without loss of generality to individuals. The world is presumably always going to be a fascinating one with an infinite supply of different ideas. Make a conscious effort to take what matters and go.
Interesting and funny. Good to see I'm not the only one in a similar situation.
You're not sick, you're just a human being in a very competitive world which changes very fast. You're bombarded by an unlimited amount of information, entertainment, advertisement, scary news and adrenaline.
No wonder we all have ADHD and OCD and whatnot.
Some tips:
You need to force a little discipline upon yourself, limit your addictions, eat healthy and excersise.
Socialize.
Make an imperfect thing, just a prototype, no database, no beautiful graphics, messy code.
Show it to the world and see what the world thinks of it. If they get as excited as you are, then find some money and focus on doing it right: TDD the shit out of it.
It's the only way, just do it badly and see how it feels. It might not be as cool as you thought or it might actually be your Thing!
I'd write a longer comment, but I feel like I'm taking time away from my next insane project that's going to change the world - and I need to write some code.
Good luck.
In stark contrasting irony, the "things" people need and will pay for have barely changed since the days of Aristotle. We pay money for:
1. Food and shelter (death-prevention in general)
2. Social status / acceptance
3. More money (or resources in general)
4. The hope of the above 3
5. Arbitrary / weird stuff like altruism, entertainment, and other self-actualizing junk like discovering "meaning"
Human-centric design is focused on maximizing some or all of the above 5 points and generally leads to a successful small business. Meanwhile, engineering-centric design is focused on optimizing "obscure" things like load-time, memory-allocation-efficiency, code-understandability, engagement rate, click-through, or even profit. And while it can lead to success, it is nevertheless something of a red-herring to folks in the creative fields.
I wouldn't say that I'm the exact opposite of the OP because I do constantly add to my tools, but I tend to be about 1 year behind and prefer to wait until things settle before I choose technologies.
I would say you suffer from a combination of analysis paralysis and simply just fucking around too much! One thing that helps, I feel, is to just allow yourself some time for experimenting and deciding upon your development stack. Give yourself that time guilt-free, but set a limit. Then when you've decided, just force yourself to stop dicking around and get to work.
It's important to realize that you will probably regret some decisions and celebrate others, but that there is almost no way you will know which is which until later. This is just the way it goes. There will always be more shiny things to play with on the next project!
Sounds all to familiar. I discussed and still discuss this problem with my peers offline a lot, and thought about creating (haha, new project there) a platform where people with this exact problem can pair up and in a way play supervisor for someone else.
The point is that my procrastination immediately stops if i make a commitment to someone else: if i promise a friend to deliver xy, I do. Social pressure seems to be working for me better than the will to suceed.
so, a platform where you can define your goals and have someone else check on your goals regularly, asking why it didn't work – while you do the exact same thing for the other person. while it's nice project wise, it could also provide helpful advice for whatever it is you're building.
Number 1 - Stop trying to build the final 'Solution' and instead build a prototype or proof-of-concept.
The difference is that the Solution (imagine it said in a serious movie voice) needs to be well thought out, needs to be built on the right platform etc. etc.
If instead, you approach it as trying to knock together anything that will just about work to try your idea you might find fewer mental obstacles.
The PoC doesn't need a VPS, you can demo it served on your workstation. Your PoC doesn't need requirements, it probably doesn't even need tests to start with, it just needs to do something.
From there you'll either know it's a crap idea and throw it out, or you'll have something that you're excited about doing more to.
*
Second point - structure your time a bit more. You sound exactly like I used to be as a student. In theory the flexibility is great, work time can be whenever you want it to be and everything else is free time. In practice, it doesn't take much procrastination to never actually get any work done.
These days I have an office job, and it's great. I have work time, at the office, when I work. And then I leave and have free time, not being stressed because I should be working.
This obviously doesn't apply to you, but you can simulate it to a certain extent. Pick the days and times that are 'productive' time. Don't let weekends blur into weeks (if you want to do a 6 day week that's your call, but don't do a 7 - that way madness lies). Pick the hours in the day that are useful time, and then spend the rest in a bar, watching TV, whatever. And if at all possible, pick a place that's not your normal chilling out place to work in. It can be bottom of the garden, different room in the house, coffee shop, whatever.
Use all that to separate screwing around time (reading about Magpies on wikipedia, fiddling with Text Editor colour scheme) from useful productive time.
I have a rule I use for fighting this: don't learn more than 1 new technology at a time. On any project there will be a bunch of technologies I'd like to use but am not proficient with. I limit it to just one at a time. Sometimes that leads to temporary scaffolding. For example, I want to do this server component in Elixir, but I'm also using a new client technology. So I resist the urge to do Elixir and do the server component in my old standby, Python, for now, and perhaps redo it later.
Generally you have to decide whether you're trying to create products, or create street cred. If you're working on creating street cred, you'll make better progress if you learn one new tech at a time.
Since you mention that you are interested in creating for the sake of a business, That is what I am going to focus on.
Since you are a developer, you are focusing on setting up your environment, what language it should be written in, etc. All things which have little to no true impact on getting your business up and running as quick as possible.
Focus on the idea, don't setup anything and don't code a single line. Think through what you want to build. Why do you want to build it? What features are you going to be your stars and what are the alternatives for your product.
Your bogging down in setting everything up. Think through your ideas and when the right one comes along, then get started.
Your troubles seem to stem from the fact that you want to use the best tools for your project (react, sublime, design patterns etc), and I see the same thing with a lot of my developer friends as well.
I'm kind of an oddball in that respect - I don't really care for the best set of tools, just the ones that get the job done quickly. Tools, for me, are just means to an end, my goal is to get the prototype up and running so I can get my friends to try it out and get some feedback.
I think changing your mindset - understanding that the tools are just a means to an end, and staying focused on getting the v0 out - might be helpful to your situation.
Agree with a lot here. One stupid trick that works for me is to decide to start out sloppy: accept the default name in the ide, project3, solution1, whatever. It's only throwaway anyway. If it turns out to be useful I'll be happy to fix it later.
A colleague of mine once laughed because I was dumb enough to admit to being a perfectionist. He never saw that he said, which is true. Being a perfectionist doesn't mean perfect results, just never finished the basics so you can move on and polish.
I have the exact same problem. In fact, in trying to build my latest and greatest creation, I've decided to use Django 1.8, since it'll be ready for prime time before I'm done. This isn't a problem, but the need to try out every new feature and uncover bugs in features that I don't even need (bugs that will be ironed out in the next few weeks anyway)... that's a huge problem. I've spent 8-12 hours of my precious coding time at night, after work, on this nonsense, in the past week alone. Why? Because I'm always in search of perfection, or something. I'll spend 8 hours trying to figure out the best way to model my data, instead of just trying to accomplish the end goal. If I try to accomplish the goals I've set out, I'll end up with the right data models anyway.
Next, time to finish learning Angular, because this time I'm going to use more Ajax, so may as well. It'll save me time in the long run, since jQuery.ajax(...) will remove the DRY from my app.... right?
Engineering creates a kind of OCD / ADD combination. I've found in the past, the only way to overcome this is to set a schedule and stick to it. No email after X and before X, no Hacker News or any other distractions from X to X, no new tools while building your app, etc.
Steven Pressfield talks about this in The War of Art - http://www.amazon.com/The-War-Art-Through-Creative/dp/193689... - referring to it as "resistance". It's the force that stops you from actually getting stuck into work. It's all the little reasons, distractions, and shiny baubles that stop you from knuckling down and just doing the work.
I've found over years of starting and rarely finishing personal projects, that making a list of three targets for your session (the amount of time you can dedicate, right now, to the project) helps. Start at the top and crunch through it. Don't get caught up with what you should be doing, just get right to the doing. Code now, optimise later. You'll quickly learn how to prioritise tasks, and the act of ticking off a completed item gives you such positive feedback that it becomes the norm.
You are in a good place right now. You are realising the futility of your current method, and you can see the elements that are holding you back. Right now, dedicate that time to three top tasks in your latest idea and crunch through them. Do the work right now, and then look back and review.
If you want to know if you have ADHD, go talk to a doctor.
You don't have to have ADHD to jump around - there are plenty of other explanations floating around this thread which can help explain what's going on.
Something you can start doing right now: exercise and take non-computer breaks. Even 30 minutes of walking around will sharpen your focus. 20 minutes on an elliptical will be even better. There's ample clinical evidence on how exercise is really helpful with focus and mood.
Then, importantly: don't just "talk your doctor into giving you ADD drugs". Go find a good psychiatrist, or at least, a psychiatrist who will give you a proper ADHD assessment and with whom you can work on medication if needed. ADHD assessment takes at least few hours and is far more than just self-reported symptoms and history-based. It typically includes objective attention/executive processing tests and also evaluates you for any other possible conditions.
Do you have any anxiety issues? That can very well contribute.
Ideally, they would be also able to refer you to a psychologist or coach who would help you figure out what you want and teach you some valuable skills you could use to help yourself. Psychologist can really give you a higher-level picture of what the hell is going on.
Basically, go get help. Worst case, you'll learn something, and best case, you'll learn a lot and be happier and more productive.
> Go find a good psychiatrist, ... who will give you a proper ADHD assessment and with whom you can work on medication if needed. ...
As one who does the assessing, I'd endorse your advice. It is of utmost importance to rule out concurrent conditions, but it's a fact that "comorbidity is the rule, not the exception". These other conditions like depression, anxiety, sleep disorders, etc., need to be addressed to really solve the problems.
> ADHD assessment takes at least few hours ...
That's actually an understatement. It may take weeks, months, even years to adequately understand a person's experience and the nature of dysfunction. In this clinical context, there aren't simple tests that reveal the subtleties involved in human behavior, thought and emotion. It requires careful observation, and collaborative communication between the healer and the sufferer to accomplish the task.
It's kind of like software development, an incremental process filled with tweaking parameters and testing the result. Usually over time we arrive at a stable and satisfactory working solution, but we'd never pretend it's an "answer", certainly not one that is "permanent".
Finally, I look at medication therapy as a tool to achieve a goal. Tools are wonderful and interesting artifacts in their own right, but useful only to the extent we employ them skillfully toward achieving a defined purpose.
By themselves medications will not solve the problem, there are many things the patient must practice and learn in order to get better. This is essentially what you said and I think it is spot on.
Thanks! Of course you're right -- I just mentioned several hours worth of non self-reported tests (performed by a psychologist by referral from an MD that has perhaps already taken history and self-reported stuff) because that is at least better than what the vast majority of people with suspected adhd get. Obviously nothing beats an ongoing patient-theurapist relationship where therapist can continuously refine or modify her hypothesis based on totality of data to date. Same thing about meds as tools -- absolutely right and typically misunderstood ☺
Also: regularly do something fun that's not computer-based. Schedule obligatory "play time" and don't tell yourself you "don't deserve it". Treat it like food (or exercise, or sleep): basic survival need.
You sound exactly like me, except that your problems developed later in life. I have ADHD and have never had much success in managing it. I've spent years trying to figure out why that is and I've got a theory/solution that I'm working on.
The theory: I've developed a cycle of habits involving research and I have few ways to disrupt that cycle. The cycle's usually entered through wondering if something exists (I have a new idea) or wanting to answer a question (best practices for TDD?).
It explains the difficulty in trying to avoid the cycle (it gets triggered routinely throughout the day...complete avoidance = massive willpower drain), as well as my difficulty in establishing new habits (the likelihood of a habit I'm developing gets interrupted before it's solid increases with time, violating the "don't break the chain" concept). It also explains why a highly collaborative work environment overcomes the issues, though I've only experienced that at hackathons. It also explains why the cycle developed when you were isolated and without work: the brain pumps out tons of dopamine when we encounter novelty (eg. learn something new) and without a project, that's one of the main things we programmers do.
Right now, I'm trying to write up something I can start posting in behavioral health groups online to try and get experts to help flesh it out. It may be overkill, but I'm not sure of another way out.
Please contact me; info's in profile. We should definitely talk!
It sounds like you are a right brain dominant person[1] with a Myers-Briggs personality of INTJ [2], same as me. Once I understood this about myself I was able to start bringing my life into balance. Part of it was by doing left-brained exercises that Dianne Craft teaches in her videos, also a large part was using essential oils to wake up my left brain which was pretty much in the deep freeze, and finally a few essential oils to help with the focus and calming issues. If you want some help try Mindwise[3] and the Reconnect oils[4]. If you had any sort of issues with sleeping or emotional trauma you should try the PTSD freedom kit[5]. Try it for at least two months and should be doing a lot better. Dianne Craft also has some videos on how to teach the right brain child which will help you understand yourself and learn exercises to help develop left brain skills.
Are people still doing Myers-Briggs?[1] I had a job interview for a CTO job for a large multinational once, and when I got to the final 3 candidates round, had to take one of these. I had a very good idea what they were looking for, and aced it. The lady doing the testing told me I was a perfect match and would advise as such. I let her know these tests are easily fooled, something she seriously disagreed with. So I did a few more for her, getting every result she asked for nearly perfectly. She started babbling about this being impossible, and it being unique etc. I told her I am just good at bullshitting people. Oh, and I was offered the job (declined it in the end).
Yep. I once did the same to avoid having to avoid having to turn down a job I had been offered. These only work when the person is either dumb (basically acting as a crude intelligence test) or they have no idea what is required for the job which almost never occurs.
"Tot Facienda Parum Factum" - "So much to do, so little done"
This article resonates with me so much. I don't know if every other self taught developer goes/went through this, but its truly annoying.
Its so easy to get caught up in a another_new_JavaScript_framework.js or front end framework, but if you look back you begin to see that you wasted time focusing on the trendy things (author mentions he does this).HN, Techcrunch, Github, Bloggers and other resources all influence us with these shiny things. Sooner or later, priorities will change and you will begin to make rational decisions on how you spend your time.
I only realised this when I started working a couple of weeks ago at this temporary gig. You soon realise that there are not a lot of hours in the day to use all the shiny things you want.
I've come to the point where I have stopped looking at the shiny new things and started focusing on a small set of tools for job at hand.Tools that have been proven to work, and will continue to work regardless of what is currently trending.
Rather than learn 3-4 tutorials about a languages syntax for months, pick one comprehensive but concise tutorial on the language and straight after that start a small project in it and stick to it till its finished. Programming languages (or domain tools) in general all have similar concepts. If you learn python, then ruby or other interpreted languages should be easy to understand.If you learn Photoshop, then Gimp or other image manipulation software should be easy to understand and grasp. Understand the concepts, not the tool.
Pick a technology you are comfortable with and make stuff. Because at the end of the day, your average Twitter, Instagram, Facebook user doesn't even know(or care) if Scala, Python or PHP is scalable and if the application used best design patterns. All what matters to them is the content, likes, shares, comments et. al.
A couple of articles I found truly eyeopening on my journey in software development in general;
The article and especially the thread of comments resonates!
My hypothesis is that the path of learning for the autodidact is non-linear. As problem solvers who adopt optimization as a core value, we beat ourselves up about how unproductive we are, not understanding the intrinsic nature of self-teaching.
Are you my twin, Magpies? Me and my current 555 firefox tabs can relate (I had to install an addon to get the tab count, but I think you can understand.)
This is really just a matter of maturity and discipline. The OP is unable to say "No" to themself. Having discipline is being able to power through the boring stuff because you know it's important.
OP does not need ADD drugs, all they need to do is commit to finishing a task, and not to pick up anything new until the current task is completed, no matter how "fun" the other tasks seem.
I have a problem with your "OP does not need ADD drugs" comment.
How do you know?
ADHD is a real condition.
You wouldn't tell someone with bipolar that they don't need anti-depression medication and instead just need to "stop being depressed".
You clearly don't know how hard it is to push through daily even with medication.
Please be more empathetic regarding mental conditions you personally don't experience.
I am bipolar, adhd, add, whatever. "Stop being depressed" definitely doesn't work, but I dont really believe descriping mind altering drugs is the solution either. Especially to little kids as they are doing these days.
There are better ways. Drugs only block the problem, but there are methods to overcome this dis-ease.
Believe me when I say I have been there. About 15 years depressed, always full of energy, but very difficult to concentrate it on any one thing. At some point self medicated for years with natural remedies, but ultimately only got addicted and had to let go of it completely, which vas very difficult and dont recommend to anyone.
Only thing truly that has helped me is meditation and yoga. Those two. They require no drugs, only discipline. Through this practice I am now able to focus, I am now able to relax, let go.
I believe ADHD is a condition which rises from the fact that our society and systems have become ever more complex, while our methods of working have not been adapted to this, and we are trying to cope with old methods of just "grunting it" through, when we need more of just letting go, relaxing, stopping and letting our systems be at ease.
Just to offer an alternative view on this condition, from someone who has suffered with this for the better part of my life and finally realized how to cope with it. It requires work, yes, but all good things in life do.
The medical companies know how easy it is just to sell some drugs and make a buck, and get people addicted.. so we are being bombed with false information also, which makes this very difficult, but I would recommend yoga & meditation & mindfulness to anybody who is suffering from this.
> but there are methods to overcome this dis-ease.
No, no there are not. The ADHD brain does not produce the dopamine they need to allow the neurons to transmit information properly. Medicines address this in a way that no amount of meditation or Yoga or fru-fru dieting can.
> Just to offer an alternative view on this condition, from someone who has suffered with this for the better part of my life and finally realized how to cope with it. It requires work, yes, but all good things in life do.
I'm glad your ADHD was mild enough that coping mechanisms were enough. Never assume that this is the case for everyone, just because it's the case for you.
The difference is pretty major - for someone who does not have ADHD, the medications make them high. For someone with ADHD, it just makes the brain work the way it should in the first place. It doesn't make us hyper, it doesn't make us high, it doesn't give us boundless reserves of energy.
What it does do is let us think about things in the future in a way which impacts what we do today. It lets us connect intention to action, which is really hard without it. It lets us concentrate for more than a few moments at a time.
> get people addicted
The clinical dose for Adderal is typically in the 10-90 mg per day range; addicitive levels are around 350 mg per day. Stop spreading FUD.
I understand your defensive reaction, and I in no means try to undermine your condition, but OF COURSE there are natural means to handle this. What do you mean, this is something completely new in the human condition ? You don't think in the whole time humans have evolved that we haven't had this kind of condition already in some form ? That this conditions has become true only in the past 50 years or so, in one generation of humans ?
Or is it maybe because we are fed the idea that we _need_ to be focused, that we need to become some kind of robots that can focus and do mind numbing work just because some one tells us so?
We can agree to disagree, if you feel I'm spreading fud think about whose world view you are defending, yours or those who have come up with the idea that we should be medicated for this condition..
And with addiction I mean psychological addiction, where somebody thinks they need the medication to focus.
And of course, if you are on medication, your first reaction is to defend and attack against those who say otherwise, as it is helping you. If so, good for you, but I am only speaking for this info because there are children as young as 6 who are being medicated, for goddamn no good reason but just because they cannot focus at school and take orders properly, which is to be honest just goddamn stupid.
People have different ways to think and to act, and those who are diagnosed with ADHD/ADD are specialists, and they can act very well without any medication when the environment recognizes this and let's out their creativity in the way which is best for them,and not force them to the same mold as everyone else!
> You don't think in the whole time humans have evolved that we haven't had this kind of condition already in some form
Of course we have. Know how we, as humans, dealt with people with mental disabilities (those who survived natural selection) in the past? A combination of "Man up", and sanitariums. We told them, "Stop being <pick a mental condition here>, or we'll throw you in a hole from which you'll never escape, and we can stop worrying about it."
These two methods "worked" for a lot of mental conditions we just now have names, diagnoses, and cures for.
> Or is it maybe because we are fed the idea that we _need_ to be focused
If you think that the only problem with having ADHD is the lack of focus, you don't know what ADHD is. I recommend watching the following video to see what the true problems encountered by those with ADHD are.
> those who have come up with the idea that we should be medicated for this condition
Like those who have received medication, and are suddenly able to think like everyone else is capable of? The medication is not a crutch, it's not a magical focus pill, it's not a "i can focus better because I have more energy"... it's a bridge between "can't" and "can".
It doesn't make you focus, it makes you capable of focusing. It doesn't make you not procrastinate, it lets you actually consider the consequences which are separated from the action by a time period greater than 30 minutes. It doesn't expand your memory, it makes you capable of accessing items in your memory.
People without ADHD don't understand that the medications don't act like speed for someone with ADHD. Let me repeat that. If you have ADHD, you're not getting the speed-like effects from these drugs.
If I had to come up with an example people without ADHD might understand, it would be like going from the mental state of being constantly inebriated to stone-cold sober.
> children as young as 6 who are being medicated, for goddamn no good reason but just because they cannot focus at school and take orders properly
This is FUD. Children are not put on Ritalin or Adderal just for being hyper, or for being children. The kids who are being put on these drugs are unable to operate and complete school otherwise. They can't just "Man Up" and learn discipline; it's physically impossible. Coping mechanisms can only get you so far.
It's estimated that 5% of people have ADHD. Let me re-phrase that: 5% of the human population has a neurological condition which prevents their brains from functioning normally, at a level which is considered detrimental to their life. Only ~4% of children are on these drugs. That means that we're not overmedicating children for ADHD, we're undermedicating them. Adults? About 1.5% are medicated. The rest suffer through the symptoms, unable to live up to their potential.
> those who are diagnosed with ADHD/ADD are specialists
This is a terrible, terrible lie being spread by people who want to feel special, and who don't want to admit that they actually have a disability. This denial isn't even limited to mental disorders (though due to the lack of physical symptoms, regular society tends to re-enforce the "you have an ability, not a disability" mentality).
Let's address the "specialist" notion popularized by that Ted Talk, specifically. Do you want to know what an ADHD "specialist" would look like in a hunting society?
They would be dead, because:
- they couldn't think ahead to stockpile meat for the winter.
- they didn't maintain their spear.
- they forgot to bring water with them on the hunt.
- they pissed off someone bigger and stronger than themselves due to an unnaturally strong emotional outburst.
- of infections from clumsily walking down a path and scraping against rocks all the time.
Maybe you've overdone it a bit and lost track of what originally got you into all of this. If you scatter yourself and chase every shiny thing your core motivation gets kind of burnt out but you don't notice it for a while because all those more superficial obsessive drives keep going once the main engine has run out of gas. Perhaps take it easier for a while until you feel a deep urge to do a particular project.
I got like this after many years of study. So much to learn, I turned everywhere at once and learned many things. After several years I ended up feeling lost - this forest was infinitely deep and infinitely broad, and I didn't know where in it I wanted to go. Though I still had personal identifications that said "this is what you do, you're good at this" and the superficial curiosity to keep learning new things, the deep sense of direction was gone.
The only thing I've found that lets it regrow is to give yourself a break, do something different with your life for a bit. When a deep motivation grows, the shiny things won't distract you from it. When they do distract you that's a sign that your deeper drive has withered somewhat. You can't force it to regrow; you have to wait for it to do that on its own.
Consider this: you mentioned a history of depression. Depression doesn't have to be at the level of a major depression to affect your functioning. And moderate chronic depression will certainly affect your focus. I hope I'm wrong, but you should really go and talk to a good psychiatrist/psychologist and see what kind of help you can get and whatever else you might be dealing with. And don't imagine that it means that you're fucked up in some kind of way: last year 13% of Canadians sought services of mental health professionals. That doesn't include those that aren't getting help for their conditions.
Now is as good of a time to start developing this. All you have to do is just stick with a single task and complete it. Then do this over and over again and it will turn into a habit.
In a way, this is where it can help to have a developer day job with a salary or at least that mentality. Where commercial pressures and tight deadlines can light a fire under you to just get things done.
In some cases these types of motivators can cause you to hack out something that only barely works at first, before circling back with test writing, best practices, etc. But maybe that can be better than not completing anything at all?
You can always refactor your way to an awesome codebase if it starts out a bit quick and dirty at first. Sometimes just having the minimum amount of friction to complete the requirements to get going can be helpful, as starting is sometimes the hardest part.
Maybe you just need to set deadlines as if you are the CEO of your company and not the developer where by certain dates you need the MVP or new feature and it has to happen no matter what.
Maybe build an MVP such that you can start charging people and get customers, which can also be a motivating force to continue on and continuously improve it because you feel the obligation to your paying customers.
Don't get a therapist, get a manager! Working at a company will help with several of your problems, some of which you already clearly identified (lack of discipline, lack of socialization) and others which apparently are just dawning on you (getting paid peanuts with things like elance, not earning enough to take real week-end breaks and holidays, and probably not having yet started with retirement discounts, hoping you will hit it big before you need them).
By all means, keep learning on your spare time and keep planning for a personal piece of work which will bring you pride/recognition/profit (or if possible all three), but at the same time just accept that you may also remain an honest craftsman for a long time, and organize you life accordingly.
If you stop living like the solitary genius that you're discovering you're not, and start caring also for more down to earth goals, your life will get more structured, and this will also make it easier to get more friendship and love into your life.
I'm typically not a fan of the whole, "I started a business, buy my ebook" but this guy seems* successful by starting local businesses and building up revenue quick.
This page/paragraph really sums things up:
RESIST THE URGE TO COMPLICATE THINGS. For technical folks, it seems
like the inclination to complicate things is overwhelming. So a problem
like “find people that need lawn service and connect them with people
that provide lawn service” becomes, “well how about we use Zillow’s APi to pull
a picture of the lawn, and the customer confirms it by drawing an outline of the
area to be serviced and we tie that into Google maps and feed everything into
a pricing algorithm”.... and on and on. Unfortunately, many of these guys do not
make it. More often than not simplicity wins. Get out of the customer’s way.
And this one was good as well:
YOU DON’T GET GOOD AT RUNNING MARATHONS by reading about
running marathons. And you don’t get good at business by reading about
business. You get good by doing. And doing it over and over again. But
just like you wouldn’t expect to win the first marathon you entered, why put so
much pressure on yourself to win at the first company you start? Or worse yet,
paralyze yourself with fear into never running at all because you’re afraid you
won’t win? It doesn’t make sense with marathons and it doesn’t make sense
with business. So while a lot of folks over-analyze every minute detail about the
thing, I would have already downloaded a training regiment, bought a pair of
shoes, and hit the bricks.
That "book" is so short you can read it every morning and it will inspire you to get passed all of this.
You created and wrote this blog as another distraction, didn't you?
Cut your internet off for a week, go outside and "waste time" a bit more often.
Write something for your project with the intent of throwing it away, and then throw it away.
Force yourself to build something you "know" is shitty. You might find you actually get it done.
Really awesome story, I can relate. One thing I learned after the umpteenth time falling in the pit of picking a technology: do it in PHP, it's fast, I'm good at it. It's going to invariably be the wrong choice, which will become apparent at some point in the future, but in the early stages of a project speed is the most important thing. Your technology is a tool to create the product, not the other way around.
One more thing, you should spend more time defining the product/business before you begin implementing or even thinking about technology. Bounce the idea off of smart people, use usertesting.com (I'm not affiliated with these guys but I use them a lot) and do market research. You don't want to realize that your idea sucks after a few weeks of development because you'll be discouraged from fixing it at that point.
It sounds like you lack confidence. Which is not a "bad" thing. It's a completely understandable state to be in. You could probably do well with having a buddy or partner who supports your projects and builds up your confidence.
Know that when undertaking anything ambitious, the feelings of uncertainty you are having are par for the course. It's only natural to question whether you are worthy of even attempting such a grand idea. And it's only natural to try and set a safety net for yourself with "best practices", but if you are aiming high enough, safety nets aren't gonna save you anyway...
At some point, you have to venture out on your own and do things that tutorials and textbooks don't cover. A lot of great software was written in shit languages with shit computers in shit conditions, just because that's what those people knew. All those "best practices" you mentioned are relatively new, but think of all the great stuff that people had already created yet had no idea those concepts even existed. At the end of the day, you have to learn to fight with what you have because you're the important piece of the puzzle not the tools.
But as I said before, it's a very natural feeling to have. Some of my favorite quotes on the topic are:
In large-scale strategy, people are always
under the impression that the enemy is strong,
and so tend to become cautious. But if you have
good soldiers, and if you understand the principles
of strategy, and if you know how to beat the enemy,
there is nothing to worry about.
- Miyamoto Musashi
There is no mechanical way to get the writing done,
no shortcut. The young writer would be a fool to
follow a theory. Teach yourself by your own
mistakes; people learn only by error.
- William Faulkner
The good artist believes that nobody is good enough
to give him advice. He has supreme vanity. No
matter how much he admires the old writer, he wants
to beat him.
- William Faulkner
I experienced that a few times before finding one good cure: telling people about my project!
Every time they see me, they will ask me about it and when it is being released. When that happens to you and you have nothing substantial to answer, you realize you've been fooling around too much. Try it
OTOH, it is known that not announcing gives you the motivation to work on your exciting surprise, and announcing (while not committing) gives you the thrill of gossiping/boasting and can deflate your excitement once your idea is mentally published and only the borof part of execution remains. You need to keep a list of exciting milestones ahead -- announcing to another important audience, winning a contract, whatever
I found that reading it a few years ago really helped me along. Note that of course Beck refers to rules as the thing that hold him back, because as a hardcore TDD'er he likes rules. Substitute "rules" or "best practices" for "fancy editor setup" or "perfect webpack configuration" for the same thing in HN-o-world. Substitute it for whatever you tend to find most important and you have a helpful piece of actionable advice.
Also, I think that this "Just ship it" idea is basically "worse is better" but then inside a single person's mind.
this is a project that I started, stopped, started, stopped, started and have committed to seeing it through. Just last night I stashed a bunch of changes I was working on because, you know, they were more important than getting customers. I have to force myself to just keep shipping and iterating. Once I'm in a rut and haven't shipped in awhile, I have to do it again to get out of feature creep.
What I have found is that the reason that people that procrastinate are able to finish client gigs is because there is someone else there. If you don't have someone else, make yourself accountable to the public. Nothing will break your bad habits faster than looking like a fool to customers and/or the public.
You built this? I have actually used this, which means you are doing something right, because normally I don't register, I go off and build my own version. So kudos!
> So first things first, I need a domain name right?
NO! I was guilty of this exact thing, and I still am to some extent. I'm finding that this is exactly the wrong approach. The first thing you need to do is to find someone who cares - find a potential user. Email that person. Tweet at someone who might think this is cool. Write a blog post about your idea - writing encourages critical thinking. Survey your friends to see if they'd like it. Find that group of people somewhere and talk to them somehow. Do they get excited? Are they interested? Do they want something else? Could you turn /that/ into an idea? This isn't the simplest process in the world, but it's damn useful.
This has multiple merits: a) You get immediate feedback on whether your idea is worth something. Most of them probably won't be, and that's okay. But you nip your "shiny things" in the bud this way. b) It gives you other, maybe related, maybe better ideas - helps you refine it. c) You get a potential userbase sooner rather than later, which is a great motivator. Hearing people like your thing is AWESOME. They'll also bug you about updates and stop you from focusing on ultimately inconsequential shit like your editor settings or what your logo should be.
Then sleep on it. Read a book about it. See what others have done. Is it still worth it? After you answer that, now it's time to finally build a prototype, maybe. And setting a goal for user interaction is very helpful - sometimes you can go on a rut where you spend months not shipping anything tangible but trudging through bugs and whatever. This leads to a tunnel of despair where you get no positive external reinforcement ("good job") which leads to burnout. This happened to me and it sucks big time, kills all of your energy and hope. So it's helpful to focus, at least initially, on small, shippable increments.
Ideas should gel over time. The chances any one of us has a perfect idea on the first shot is miniscule. If you have an idea, firing up your editor and starting to build it is the worst thing you could do in terms of time efficiency. Hope this helps, and good luck!
Lots of good advice in this thread but it seems you may have pushed your dopaminergic system into a bit of overdrive. Lots of novelty can leave lots of dopamine floating around your pre-frontal cortex which puts things on a hair trigger. It primes the brain for learning and has the side effects of making reaction times faster and unfortunately more spastic, which destroys fine motor skills like handwriting. It also lowers filters for novel stimulation which makes you more easily distracted. Longer term it will inhibit oxytocin release and make you less bonded to your social group, increase your tolerance for risk and has the side effect of making you feel that you don't measure up and need to prove yourself. If your ADHD drugs are dopamine agonists or partial agonists it likely would have made the problem worse.
Generally you may find yourself more productive if you break your day down into research, planning and implementation. During your planning phase you should limit yourself strictly to pencil and paper and remove computers, cell phones and other electronics. Use this time to design your product in your mind, break it up into sub-components and how they will interact. If you hit a wall due to a lack of knowledge you should work on it until you can write down a specific question that you can't answer and then address it in your next research cycle. Once you have something actionable only then do you move onto implementation and if you run into problems go back to planning.
I am going to warn you that the planning stage will be torture in the beginning! You will feel a huge need to 'get something done' because the lack of novelty will lower dopamine. It will be easier if you do your planning sessions in the morning when your brain has had some time to clear itself of excess dopamine overnight.
Some other supplements that will help clear out excess dopamine include SAM-e and/or TMG; melatonin at night; H2 blockers like Tagamet at night (the are antacids but raise prolactin levels), low dose lithium, avoiding blue light in the evening by using f.lux on your devices and/or blue blocking sunglasses and meditation. Usual caveats apply. I'm not a doctor, your results may vary.
I have a genetic tweak to that allows me to raise and lower tonic dopamine levels using betaine. It was something that I stumbled on and then spent a few years understanding the impact. While there is a lot of research very little of it is easily translated into human behavior or comprehensive so no good links.
You can't do every aspect of everything well, I would say it is even foolish to try. If you want to try out react.js (for example), make a shitty skeletal HTML file, put in a script tag, and start doing stuff. The app doesn't have to run in a well-managed hosted environment with a cool hostname and all that. Don't make build scripts, etc., until you have to.
There is a time for best practices but you shouldn't focus on the best practices for things that are ancillary for what you're really trying to learn. This is what focusing is all about, paying attention to what's important and disregarding the rest. Don't dick around with editor configs.
Find someone to code with you. Being alone is half your problem, and even explaining it to someone requires more focus than you have. If you don't have someone like this, hire someone at minimum wage to listen to you.
Not to add injury to insult but I've grappled with the same and found this humorous to read - only because it hit so close to home (except for the Windows server, never Windows servers).
The only thing that's helped me grapple with this is Kaizen quite honestly. I'm not going to posit another book for you to read, but - there are a few good ones. Focusing on small tasks to break out of that mold was the only way I could circumvent the cyclical loop that I can only describe as an ungodly marriage of procrastination and "Squirrel!".
"I have no clue why I still call it weekend, because there are weeks I don’t even dress myself, let alone keep track of what day it is".
To me it sounds like you're lonely, and it's affecting your overall emotional state.
The solution will not be a new clever time management system or reading a How-To-Monetize-Your-Zen self-help book.
Maybe take a few months off and go to a place with 'fun and sunshine'. Meet new people every week. Everyone's friendly when they're on vacation.
Costa Rica's really nice all year round and it's pretty cheap.
This is totally me (without the Microsoft junk :P). Ouch… :( I've thought of drugs for helping me focus too because this lack of focus has grown into all sorts of areas of my life… :(
FWIW, I haven't resorted to drugs simply because I've avoided drugs my entire life for anything psychosomatic. I guess one extreme is the whole "deal with it" approach (which is obviously insufficient) or the "there's a drug for everything" (which is pretty bad and carries terrible consequences). Haven't found a middle-ground…
"Focus" is an alluring yet elusive thing for me… :\
Wow, you've just described my current state of being. I literally froze up mentally last weekend because I had too many things on my mind. Things related to learning/projects/ideas. I kept jumping between them, like a processor performs context switching, but a lot less successfully. It was like bouncing a ball between two walls, and slowly making the gap smaller. The ball's bounces increase exponentially until it cannot anymore. It's at this point you've crashed.
I'll admit now that most of this is just an epiphany I had while seeking sound metaphors to address your problem. Please don't revere me as someone who has risen above the struggle you feel mired in.
One of our great motivators, by nature or as a cultural byproduct, is avoiding criticism. As we accrue expertise, we're also slowly filling an invisible backpack. We slip in a little stone of frustration every time we deal with something done "wrong". We feel powerful when we stand up with this hard-earned weight about us, but now we have to circle every mountain a few times, looking for the unimpeachable path to the summit; our backpack is too heavy for anything but the best route.
Because we've learned most any quandary can be solved with some extra research and new knowledge, every choice can turn into its own mountain. This was probably a virtue and not a trap when there wasn't so much to read on even trivial choices to keep the studious engaged for weeks, months or years.
When you work for someone else, it's clear they'd rather have an imperfect solution on time than a perfect solution two years late. It's also clear they'll only pay for one of these (if they know what they're doing...). But when you're doing unpaid work for yourself, you have a really naive boss who doesn't have the sense to call you off when you're in the weeds hunting perfection.
So, here's the plot twist: you've learned this is a switch that seems to get flipped for you when the pressure is really on--let's call that pressure what it is: your desire to avoid criticism. Unpack this for a second. The motivation that drives you to optimize every decision is the same one that drives you to deliver when you must.
You no doubt notice the healthy crowds refining productivity systems/tools, or looking for new ones to try; they are all searching for a boss by another name. They are all trying create a surrogate for fear of public failure out of paper or code or an egg timer. Don't be deceived by sugar-coating; people who extoll the virtues of getting an MVP into the hands of users and iterating are talking about giving people something good enough they will use but bad enough they will criticize. They are talking about manufacturing opportunities to fail and about leveraging that fear to succeed.
"How do you finish a 300 page book? By writing 10 pages every day" (I think this quote is from Steven King). So (continuing the analogy) write 10 pages a day. Whether you feel like it or not. Whether you feel the pages are good or not. When your 10 pages are written, you can play with shiny stuff the rest of the day. Motivation (being happy while doing it) is not required. You will be happy after you have written the pages because you feel progress.
I use the Pomodoro method to stay focused when I'm online and [track my time spent unplugged](http://foote.pub/examples/unplug/index.html) to make sure there is enough of it. Good luck -- remember everything will be OK iff you let it.
Edit: so many good comments, just wanted to second that this is exceptional, honest writing and that you are not alone in this struggle !
I find that not registering the domain helps to focus me. 'dammit I need to create this thing before someone nabs the domain' like an artificial race to the finish line.
Also. Trello. Write a few coding tasks, finish a few tasks. And just keep adding more tasks when you run out of 'what's next!' means you can sit down on your oroject and get quickly up to speed on where you are too. In progress, finished, backlog are he columns I use.
All these best practices and ADHTDD crap and frameworks are for driving teams of horses, but you are a wild stallion, waiting for somebody to hook you up to a wagon and tell you where to pull them. Just run wild and do what you feel like needs to be done, not what everybody else is doing. Industry standard best practices aren't best when they keep you from practicing and improving your own weaknesses.
But it can also be illuminating to try one of the wagons on for a bit and see how it feels.
"This is the big thing everyone's talking about? It's just like some X I put together 10 years ago,
with a couple layer of warts to deal with concerns that didn't affect me."
Then try one at a time, so you can tell which wagon has which effect. This guy was trying to hitch his ride to a dozen wagons at once, all pulling in different directions.
Periodic reality checks. What's my goal -- my real goal? Is what I'm currently doing meaningfully advancing me to that goal? If not, stop that shit. Close the cat video. Put off theme dinking till your coffee break. You have to go back and do this time and time again. Pain in the ass but it's called discipline and it's how humans get shit done.
“People think focus means saying yes to the thing you've got to focus on. But that's not what it means at all. It means saying no to the hundred other good ideas that there are. You have to pick carefully. I'm actually as proud of the things we haven't done as the things I have done. Innovation is saying no to 1,000 things.” -Steve Jobs
I am slowly coming to the realization that there's only so much I can know or care about and maybe it's time to dig in on the things I know pretty well and put the rest aside for later. I'm starting to eval tools and languages with a view to how they help me now, not how useful they'll be in the future.
I can relate, what is described in the post has been me for the last 10+ years. In fact, that's why I'm here now reading and writing this comment. When you figure out the solution, please let me know! I'm getting too old now to keep this up, so saying no, as was pointed out, to shiny objects is becoming increasingly important.
What helped me was stopping to think "ooh, X is shiny, I want to try that" but rather focusing on problems I had to solve, thinking "Oh, I could build an application to solve my problem Y.. why don't I try to do it with X?".
I never got anything finished, until I started being very pragmatic and not learning for the sake of learning.
the best ideas come when you step away from it for a while. not for few hours and not partially but totally for at least a week. if you can afford it take time off, no cell-phone, no browsers, no internet. travel, take a book ... the key is to do something that rips you totally out of your current state of mind.
what helped me is to travel on a shoestring (different country, different language, different currency, force your brain to be busy with something which isn't routine). this I personally found helps a lot with creativity and it gives you a chance to get distance from yourself and observe yourself as an outsider. it also gives your mind time to sort the restlessness out. the whole information-overload, multitasking, 30-browser-tabs, flashing reminders on the phone about social media I missed what always sets anxiety off for me.
unplugging yourself from the matrix is the only way IMO
Van Gogh said something about the canvas stares at you like an idiot and turns some painters into idiots themselves...
Set some goals. Instead of 'build in angular' try 'launch a working version in 30 days'. Check progress along the way. Build in small rewards if you hit that goal.
I manage to get stuff done. I certainly procrastinate about the less interesting development work but I eventually get around to it.
The hardest thing is starting on any given task, so learning to start is what to focus on. Personally I just start work on a task by typing - seriously.
Except I get stalled just THINKING about all the setup stuff, or how much I no longer know about iOS development, since I haven't done it at all in a month, never mind ever having gotten on top of the wave in iOS 5. Never mind 6 or 7 or 8.....
The author's just talking about plain-old procrastination, a fear of _actually_ committing to the project (and all the big nasty stuff that it implies) by actually writing that first line of code.
Just write the first line of code. It won't hurt. I promise =)
wow, i've def experienced the pattern you just described, but you actually seem to cover more ground than i usually do before eventually not arriving at your goal, but... you have enriched yourself in many other ways during the exercise. there is an explosion of facets in this field, and it is true that if you attempt to ride the cutting edge of everything you will probably never get to the killer app. you will however be well versed and an excellent resource for hire. i guess if you really want to get to the killer app part, you need to just work with a stack that you have already invested the time in to become proficient (the been-there-done-that stack).
I recently learned that anxiety can cause ADHD drugs to negatively affect focus. ADHD can cause anxiety on its own, so you might want to look into anti-anxiety medication before trying to use stimulants if you're going down the pill route.
Get better at the things you hate - and then learn to love them. In your case, it's pushing ideas to completion. Reduce the scope, forget the critics and embrace the small iterations.
ctrl-f "Yak" ... couldn't find any, so I'll just note that this is very much related to Yak Shaving and everything that has been said about it throughout the years.
This is called restlessness. restlessness is the opposite of laziness. Ideally to be productive you need to be 100% balanced between restlessness and laziness.
We are cursed by infinite ideas vs limited time. Applying the law of diminishing returns results in ideas having a negative value. It like going to a bank and asking for a big debt, if you even consider an idea. Its hard to get rid of an idea, once its settled in our brain. Its taking space, and chanting code me,code me, when you prefer to be in flow of a boring big $$$ customer project.
It looks as if you are good in doing lots of small projects. Elance projects pay shitty, and you still claim you can make a living. But they are often small, very constrained, payed by hour. Thats different to coding something big for your own progress.
At first a tip from someone who learned coding with paper tapes: Code for max 4 hours directly after getting up. Do not read any mail, no forums or news sites, before your 2nd breakfast. Relax the remaining day, after replying to mails. Try not to procrastinate to much at a computer. A computer should be your work tool, not an entertainment device. Try to get a balance outside, e.g. a dog can be a great excuse to walk around the neighborhood, and walking around is one of the best ways to focus thoughts.
We all know the moment of the glorious vision at the evening, a small joint to get into flow, and at sunrise you suddenly realize you have written 500-1000 lines of extremely smart and perfectly working code, of a prototype of our vision. But sorry. I'm coding for nearly 40 years. This magical flow in the night shift happens once or twice a year, if lucky. Trying to force yourself into flow in the night shifts, will only lead to procrastination.
Many of my own projects started in such a magical flow. But to execute the prototype into a product requires continuous bring coding work. This means, that after I started to code the idea, I'm taking an even bigger debt to execute it. This is sometimes difficult if big $$$ customer calls with a problem. But I can continue on my own project, once I solved his problem, and wrote my invoice.
Its really easy to get into flow, once you got the habit, to make a coffee and perhaps a toast, and instantly start coding after wakeup. Its important not to code more then 4 hours, but to stop at noon, when you think its a good point to commit work, and to do something different. You'll code more errors, if you become tired, and nobody can sustain long coding sessions every day. Enjoy the real life outside of the computer screen.
About development stack: Less is more. Learn to code without all those framework bloat, and also avoid over sophisticated development environments with tool chains for hyped software development methodologies. You don't learn to play guitar with lots of effects, but on an acoustic for good reason. One can add effects later, but its important that you sound great even without. I'm a bad musician. Adding gimmicks between me and the sound wont improve my music, but instead causes me to play around with those gimmicks instead of making music. I'm a coder, sure I know a lot of music theory. Gimmy a line and I can compose and arrange a song in an evening, and everybody in the band has fun, but if I try to compose a song on computer I end up with nothing but junk.
Last year I only had 2 projects on Elance. One has been running for 14 months now, the other for 7 months. The projects I do for local businesses are also LOB applications that run for 9 months using a full agile workflow, complete with scrum/
I wonder why everybody assumes I'm only doing small projects.
Thats interesting! I only know Elance and Odesk from having a short look, and got the impression that is not worth the time to compete in a race to the bottom for small projects. Good to know, that there are also good projects.
I guess naming Elance as an income caused this "small project" trigger. I also assumed that you are not coding for 20 years, as I read now by your above postings.
Get out of tech, at least for a while, it's a toxic industry. People treat each other like crap.
Your lifestyle is unsustainable and you're now paying the price. Which means you don't enjoy what your doing. You still enjoy the idea though and that's why you spend all your time planning.
Imagine if a professional soccer player suddenly didn't want to play anymore. Do you think people would go "oh, you're just procrastinating"?
The healthy thing you want to be doing is practicing. Ground the big idea within the question, "what part of this can I start implementing now?" It doesn't matter how tiny or trivial that part is, as long as it has a clear link to the big project - the more direct, the better. Allocate time to implement that, instead of shopping for best practices. Allow your implementation to be a little bit cruder than you think it should be.
If you're doing anything worthwhile, you'll soon land in a zone where tools and tutorials don't really help you anymore. There's just the project you have, and your will to work on it. You can still fall back into the shopping cycle at this phase by rewriting things with a different tool or technique, but that's where you should reassert the part where it's "a little bit crude." Focus on concrete, measurable metrics, and you will get away from the spell of "best practice."