There are too many shiny objects and it is killing me
yetanothergreatidea.wordpress.com
yetanothergreatidea.wordpress.com
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):
http://www.mayofamily.com/RLM/txt_Clarke_Superiority.html
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"?
Re anger : Have you met the internet? He is 14 years old and hates everything except tentacle-porn.
I AM 4CHAN. EXPECT ME. DOSE ANYONE HAVE GOOD HACKER TUTORIALLS I HEARD THIS WEBSITE CAN MAKE ME 1337 XD
PLEAS JOIN MY MINECRAFT SERVER DONATING MEMBERS ONLY
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.
Oh and stop procrastinating.
> 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.
Don't solve for problems you don't yet have. Solve for immediate problems first.
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.
[1] http://depts.washington.edu/hhpccweb/content/student-health/...
[2] http://www.amazon.com/The-Art-Procrastination-Lollygagging-P...
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.
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.
* What EXACTLY would success look like?
* What needs to be done NOW?
Do the hard bits first! Then, the closer to the goal you get, the more ground you will cover faster.
If the best time to do something was five years ago, the second best time to do it, is often now.
Skip the part about deciding on an IDE or you are off to shave the yak again!
Technically (and to wriggle out from that point) you could say I decided for him (vim) :P
> 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.
It reminds me of one of my favorite quotes, from Stephen Mitchell's translation of the Tao te Ching (http://acc6.its.brooklyn.cuny.edu/~phalsall/texts/taote-v3.h...):
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.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.
We should trade.
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.
"Reading, after a certain age, diverts the mind too much from its creative pursuits."
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.
Additionally I find value in this rant from Erik Naggum: http://www.xach.com/naggum/articles/3141310154691952@naggum....
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.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.
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.)
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.
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.
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.
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.
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.
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 :-/
[EDIT] cleanup
So true. That's why one of my first steps is to Google my idea. If I can't find a viable competitor, then I move on to the design phase.
An established competitor guarantees there's a market. You'll just have to do it better than they do.
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 think finishing is a habit we can build.
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.
Appreciated the rest of your post, it highlights the importance of good documentation in optimally using systems.
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.
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.
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.
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.
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.
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.
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.
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.
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)
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.
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.
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
By: Gina Pera, Russell Barkley
Good luck
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.
But if you're fighting, you're winning.
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.
Any recommendations for yoga/meditation resources to learn the techniques/methodologies? I've been thinking about trying that for a long time now.
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.
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.
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.
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 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.
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.
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.
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.
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.
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 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!
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.
just an idea though.
*
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.
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 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.
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.
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 also recommend
* Quantity always trumps quality.
* the done manifesto
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.
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.
Get to it, you have ideas to realise!
I do everything the user posted except the Website. That's me. Do you think it's ADD? Help too, please.
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.
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.
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.
Cheers!
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.
Here's what I'm working on (first draft): https://github.com/ADHDExperiments/Rehabbit
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!
[1] http://www.diannecraft.org/teaching-your-right-brain-child/ [2] http://www.personalitypage.com/INTJ.html [3] http://www.youngliving.com/en_US/products/wellness/targeted-... [4] http://www.youngliving.com/en_US/products/essential-oils/col... [5] http://www.youngliving.com/en_US/products/essential-oils/col...
[1]http://en.wikipedia.org/wiki/Myers%E2%80%93Briggs_Type_Indic...
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;
1. http://blog.codinghorror.com/php-sucks-but-it-doesnt-matter/
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.
Agreed.
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 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.
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.
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.
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.
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!
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.
Not a very effective specialist, eh?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.
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.
*operative word
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.
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.
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 Just ship, baby.
http://www.threeriversinstitute.org/JustShip.htmlI 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.
Https://getmadprops.com
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.
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!
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.
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.
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!".
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.
"Focus" is an alluring yet elusive thing for me… :\
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.
Edit: so many good comments, just wanted to second that this is exceptional, honest writing and that you are not alone in this struggle !
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.
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."
It's the only way for me to stay sane.
I never got anything finished, until I started being very pragmatic and not learning for the sake of learning.
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
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.
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.....
Just write the first line of code. It won't hurt. I promise =)
http://projects.csail.mit.edu/gsb/old-archive/gsb-archive/gs...
Pick something that you know, that you like, and make your app in it.
Thanks to everyone who contributed.
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.
I wonder why everybody assumes I'm only doing small 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.
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"?