The following is my response to Ewan Valentine’s blog post “How to never complete anything” that I discovered on Hacker News. Once again, I ask for people’s indulgence for posting a reply on my own blog rather than in the Hacker News comments. I find writing on my own blog a bit easier than wading into the surf that is the sea of many perspectives.
I didn’t think of responding until I read your very last paragraph, at which point I felt compelled. I understand what you are feeling because of my similar experiences, and so I will give you the advice (albeit, unsolicited) that I would have wanted someone to have given me when I was going through what you are going through:
- “I’m challenging myself now to do the opposite” – That would imply absolutely everything you were doing before was wrong, and it was not.
- “keep things extremely simple” – The quest for “simple” is a life-long pursuit. What one person may see as complex another can see as simple, and vice-versa. The most extreme case of simple is to do nothing at all, so do don’t quest for extreme simplicity. Instead, quest for elegant minimalism, and know that you’ll only know it when you see it.
- “Unglamorous” – This is important, and I’m glad you realized this. Important work is rarely (if ever) glamorous while it is being done. The glamour comes much later if at all.
- “Dumb” – See comment about elegant minimalism. “Dumb” implies a stupid solution, which is not going to help anyone long-term.
- “Sometimes ugly” – Replace “ugly” with “effective and efficient” and you’re onto something. There are times when you need an effective solution now, as efficiently as you can get it done. The result a cynical critic might call “ugly” but I would characterize as “necessary”.
- “But done” – What is “done” in software? What software beyond the most foundational of algorithms is ever truly done? Software is liquid to the constraints put upon it, and the only constant constraint is that things will change over time.
- “No more big re-writes because there’s some hot new JS library” – Most definitely not for that reason alone, but don’t shy away from a new solution to a long-standing problem. There are times when you have struggled with a problem that has caused you an enormous amount of headaches, and a new framework comes along that neatly solves all of them. The challenge is evaluating cost/benefit, which is something that only comes with experience.
- “No more microservices for the sakes of it, no more overly ambitious build pipe-lines.” – “for the sake of it” is perfectly fine if your objective is to learn. You are still relatively early in your career, if you consider when you might retire. You are still learning (as we all should always be), and it’s important to thrash around a bit as you understand the nature of non-trivial systems. Often, our learning is done in the context of attempting to get things done, and we are hard on ourselves for not achieving the original goal. When I feel this way, I remember the Thomas Edison quote of “I have not failed. I’ve just found 10,000 ways that won’t work.” Often failing to achieve something is more instructive than achieving it.
- “NO MORE TRYING TO REWRITE THINGS IN HASKELL.”– Haskell falls into the category of tools worth learning, as it opens your mind to new ways of looking at problems. It is obvious you are thirsty for knowledge and experience, but that is running into conflict with your strong desire to complete things. At any given point in time, you are going to have to decide what is more important to you: getting something done or learning something new. Both are important, but don’t put undue pressure on yourself by trying to do both at exactly the same time.
- “JUST. GET. SHIT. DONE.” – Well, you are – during your day job and freelancing. You absolutely know how to get things done. You do not have a general productivity or discipline problem as would be evidenced by your inability to accomplish anything at all in any aspect of your life. If you tell me, “I can’t get shit done” I will point to all of the tasks you have gotten done. The issue is you’re not getting done the things that are most important for you to get to done. You are not satisfied with your own progress. It is you that have created the fantasy that you cannot get things done, and you are letting it tear you up. I won’t say something trite such as, “You’re being too hard on yourself”, instead I will ask you to ponder, “Why am I not satisfied with my own progress on the things I am progressing on?”
Beyond this, here are a few additional things I would like for you to consider:
First, I believe your tea-cup is full. You have a lot swirling around in your head, and I don’t know if you have the space necessary for new, productive work to fill in. I would wager you know far more about emerging technologies than I do, as I suspect you have a knowledge addiction. We all have finite capacities for knowledge due to the limitations of our brain, but the web is a limitless stream of data from which we must carefully select what knowledge we should internalize. The “Fear Of Missing Out” can have us figuratively glued to the screen, never wanting to be that person blindsided by our peers when they know something we do not. That fear can blind us to the negative effects knowledge obsession has on our mind.
Speaking of peers, I worry that you are subject to peer pressure. Positive peer pressure can be just that, but you may be experiencing the darker side of peer pressure, and not be fully aware of it. Should every software developer have side projects? It depends on where that software developer is in their professional and personal lives. Single with no responsibilities other than your day job? Absolutely. Married with a newborn baby? Probably not. Married but worried about your financial future? Probably. Parallel to this progression is your level of expertise in delivering software. By “expertise” I don’t mean only knowledge or proficiency, but experience. How experienced are you in delivering software? I would say that I only knew how to deliver software under optimal circumstances about 7 years into my career (for many of the same reasons you are citing), and it wasn’t until about 15 years into my career that I could do it under adverse circumstances.
Speaking of circumstances under which you are working, are you optimizing your circumstances to maximize your productivity and therefore maximizing your chances of accomplishing your goals? When I felt that the time was right in my professional and personal life to build my own application, I quit my job and spent a year working in near-isolation (outside of my wife and visits from a few close friends). The book “Deep Work” explains this phenomena quite well. I am introverted (a Myers-Briggs INTP), a bottom-up learner (essentially a “slow” learner), am very easily distracted, and it can take me quite a while (hours and even days) to get into the highly-productive state referred to as “the zone”. I know this about myself, and as a result I knew that if I was going to build my own app, I needed to optimize my circumstances for the way that I work. My home office is relatively spartan and minimalistic, and the standing instructions to my wife is that if the office door is closed, only open it if the house is on fire and you have reason to believe I would not survive it. This is what I know I need to get things done.
Finally, I think it’s time for you to have a vacation – a real vacation that is restorative to your mind. Among other things, it should include exercise, nature, solitude, and sleep – lots and lots of sleep. How long you need will depend on how much you need to process. Sometimes a day-hike at a local park is enough. Sometimes, a week in the Caribbean walking the coast and napping on the beach is necessary. One of the things I believe you will experience for the first few days of a long vacation is all the chaos in your mind bubbling to the surface. As the days pass, and you rack up more sleep, things will begin to settle. When you return from your vacation things should be infinitely clearer than the are now, and you’ll have a much better sense of what your goals are, and what you need to do to accomplish them.
I didn’t just read the article, I know it, I’ve lived it. A couple years ago, I knew my next endeavor would make me quit at the end, because that was my pattern. So, instead of looking forward to my next endeavor, I looked back: what were some of my best memories? I flashed to creating animation and claymation, to more animation, and more success. Why had I left my skills dormant?
Flash forward to the present, and I haven’t quit, and I’ve gone through way more than the previous businesses. This business has no internal reservations (“you’re only doing this for the money”, “video games waste peoples’ time”). No. Animation software is all good. I have no mental objections to overcome. I never could overcome my own mental objections, because, they’re my own!
So, my advice is don’t look forward to a business, look back to your greatest successes and do that. Also, make sure you don’t have any mental reservations or internal objections. Be 100% on board with your own idea. Pick an idea that if you didn’t do it, you’d want someone else to do it. Pick an idea, (got this one from a video), that if you weren’t invested in it, you’d want that business to succeed anyway.
Almost got teary eyed reading this Neil. Thank you for manifesting these feelings and ideas that so many of us have in such a concise, beautiful and inspiring way. You made my day.
Neil, what a wonderful way to encourage someone at the same time sharing what you learned. This is great. I was flattened by your last three paragraphs which is applicable to most of us and some are very true in my case. Now i have to look more into your work and books! Thank you so much.
One of the big problems with software programming is that it abuses the rational part of the brain when almost atrophies the rest. This is a completely unnatural thing to do.
Normally an animal like a human will learn things slowly and using reason(using the sequential part of the brain), and then it becomes automatic, subconscious, as neural networks are trained connected in the parallel side of the brain,for example learning to drive a manual car involves thinking at every step in a myriad of details,like pushing the clutch while simultaneously pushing a codified gear lever while looking at the semaphore and the cyclist on your side. After a while it becomes automatic, and super fast.
The same happens with any activity. A tennis or baseball player stops thinking about how to strike the ball, and could focus in just where she wants the ball to go without thinking in details.
After a lion puppy plays and practices every detail of the movement of hunting(his mother will get little boars alive so he can practice) he just starts hunting for real and stops playing.
With most programming you have to go back again and again to the details and it becomes painful, because you could not use the automatic process, but reason alone. As most of your brain and senses are not used(like the vestibular and lymphatic system as you don’t move, no hearing, smelling touch, taste and 3d perception, most of your subconscious, most of your brain actually disconnects. If done for a significant amount of time your body raises an alarm and no matter what you are doing, you can’t continue working. But you want to continue working, and you can’t so you force it, but you make it worse, your alarm gets louder, you stop and start feeling guilty.
After programming for some years I had to invent artificial replacements for the natural things like going outside with my bike every single day(the vestibular and lymphatic thing), programming using voice too…or making my own “keyboard” interface with feedback from the computer. It makes a huge difference.
In the open source 3d printing arena one of the first tool that we had was Open Scad, a programming interface for designing 3d pieces. I volunteered to teach people using this tool. It works for simple things but after a short amount of time most people can’t stand the cognitive load of having to think about every single detail of a shape. But they have no problem using Freecad or SolidWorks or Inventor for the very same thing.
Programming with text files is even worse than OpenScad.
A lot of wise words here. Perspective is good when you’re in the middle of what feels like a hamster wheel. I try to remember that as long as I am still eager to learn more and have a sense of wanting to do more than I have time to, I am actually in many ways incredibly blessed, at least as long as the things I actually do are things I enjoy.
Wrote a few words about it last new years eve: https://medium.com/@erikstarck/whats-your-do-more-less-ratio-aa4694c6f442#.thk3ozs4i
We don`t have “finite capacities for knowledge”. We do have finite attention and lifetime.
Great read, Neil! Sums up a lot of my personal experience with some new insights. It’s also nice to have an opinion from outside of “successful equals energetic extroverted person” bubble.
Thanks.
Thank you for posting. I’ve been doing this for 17 years, and this rings true.
[…] Insightful response to an honest self-criticism that hits close to home. Written from a developer’s perspective but applies equally to any creative endeavor. […]
I am a non-finisher as well, looks really bad on a cv but let’s face it, we get to do a lot of different things, so I guess we are art, a colourful tapestry of unfinished ideas, projects and work. ps I have some brilliant ideas if you need distracting?
Neil, I have similar personality traits as you outlined above. How have you leveraged and/or worked around them? I especially welcome strategies for dealing with being a “slow” learner.
“Slow” is, I think, an unfortunate choice of word. Every effort in life takes time to master.
“Quick” is more common and is often exploited to acheive a cheap and easy form of success. But practice, patience and persistence coupled with the type of tenacity that graces only a select few individuals is the only path to true understanding and mastery.
If the journey is, ultimately, a sweet one then all the better than it should be a “slow” one.
Strategy? .. Enjoy the ride and don’t worry about what others are doing Just follow your passions and never mind other people’s noise.
JoeC, I wrote a blog post in reply, but it grew very long, and was full of language that will trigger people (something I actively seek to avoid). I’m trying to edit it down to something more concise and less controversial, but my attempts have so far only succeeded in make it banal. Hopefully I will figure out something that is worth posting before too long.
It is more of a response to the original post, and I am not an expert in these things, but it strikes me as a balance between setting up the system and maintaining it. In short, finding a value added solution to the conflict between front loading and back loading.
Some of your advice is incredibly wise and you go through different cases with if-then life scenarios and that is very helpful.
When you start a project you can do a cost/benefit analysis of the long road and the short road. Often, the best road would be none of them as you want both higher quality and efficiency.
Also I would stress more the importance of unwinding if physical activity isn’t built-in in your line of work. That will maintains physical and mental health and keeps you in top performing condition ; it makes you sleep better too.
I stopped fidgeting a lot when I set up my PC in dull high contrast mode and stopped using cloud storage and external hard drives except for backing up. I would print out any meaningful reading and it would be distraction free by design. Also I would take coffee breaks outside and work a bit with a daily planner to summarize my daily progress and thoughts offline. Most of the time it would be a write only process but it would create a visual trail of progress that I could come back to. Please let me know if that would work for you.
I can’t agree any more. I’m exactly same as you. I build whole online store system with back-end management, customer relationship management, affiliate system when my client ask me to send a list of products because I think I should have bigger vision. He might ask more products. or his clients might ask him for list. AND I finished it.
The thing failed me is endless bugs because I build too much things and I don’t have time to maintain it.
So, At the end, I shut down my aws instance, empty S3 buckets and send a excel format list to him…lol
I stopped fidgeting a lot when I set up my PC in dull high contrast mode and stopped using cloud storage and external hard drives except for backing up. I would print out any meaningful reading and it would be distraction free by design. Also I would take coffee breaks outside and work a bit with a daily planner to summarize my daily progress and thoughts offline. Most of the time it would be a write only process but it would create a visual trail of progress that I could come back to. Please let me know if that would work for you.
Just want to thank you for this post. I had the same struggle these years, after reading your post I feel much better now.
thanks for all the post you add on this website
s/undo/undue/
s/sighting/citing/
Fixed! Much appreciated. I shall leave this comment here to remind me of the age before Grammerly…I mean Grammarly.