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 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 undo 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 sighting), 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.