I get asked a lot about what software consulting (aka freelancing) is like. Full-time salaried software developers tend to be the most curious. This post is a collection of observations I’ve made from my brief time as a consultant.
One important caveat worth mentioning is that I never pursued consulting as a means to recreate a full-time income. This is something I do on the side and the content below reflects that.
After my startup failed, I decided not to pursue another one right after. I wanted time to internalize the mistakes I made on the first go around. After more 14 hour days than I’d like to remember, I also wanted a more relaxed pace of life. Tired of seeing my bank account take a beating for nearly a year straight, income was welcome too. Keeping my brain active and in exercise was another priority. For these reasons and with no prior experience consulting, I dove in.
When I quit my job to pursue my startup, I moved into a co-working space in Brooklyn and sat across a real estate broker. One day, he told me he wanted to have a website that his clients could log into and view available properties to rent over a map based layout. He talked to some development shops and got quoted for $X. $X turned out to be significantly greater than his budget and twice as much as what I would do it for. I took him out for coffee and told him just as much.
And I got my first deal.
In the age of phone calls, email, and remote working, I can’t stress enough how much my clients value a personal presence. Being in the same office and sitting across the same desk considerably increased my first client’s comfortability in working with me. Meetings with pencil and paper and white boards are very powerful. If something went wrong for any of my clients, they knew exactly where they could find me. This made a risky calculation—paying thousands of dollars to someone they had never worked with for something they couldn’t directly control—much less riskier.
Nearly all of my clients are non-technical. I don’t know if this happened by coincidence but I love it because I get to put my business analyst hat on and solve human problems rather than machine problems. Not to knock those who solve the latter. I’ve done it and still do.
First, I sit down with them and identify their values and priorities. Then come requirements. More often than not, they don’t know what they want which is OK. We discuss, debate, and draw to figure that out. Distilling “what I want” statements into hard technical requirements comes next and I’ve noticed, oddly enough, clients enjoy this part of the phase the most. I’m not sure why but I think it has to do with bringing in harsh clarity to something that was vague a couple minutes ago. I get a lot of “that’s exactly what I mean” moments. There are therapeutic elements at play here.
The entire process of taking something that was not-known to desired-but-vague to technically-defined to finally-implemented is the closest thing there is to the circle of life in this field.
Having previously worked at a big company and before that, at a small one, I really missed days at the latter. At the former, I never got to see my users interact with my product. This made it difficult to feel rewarded—on an inner level—for my work.
Consulting is the opposite. I see my work used, commented on—and sometimes criticized—right in front of me. The feedback loop is quick and it is tight. Seeing a client improve their productivity or generate more revenue because of code that I wrote is one of the most rewarding feelings I’ve ever had.
Being a consultant means I am my own boss. I get to decide my schedule. If working on the weekend means more time to work on side projects and research startup ideas during the week, I can. If I absolutely have to push back a deadline, I can. If I need to visit my family on the west coast and work remotely for long stretches, I can.
The downside to the independence is the lack of structure and routine. Workload can swing wildly from one week to another. Goals that require a recurring commitment such as exercise or cooking sometimes take a backseat.
Value of time
Having been a salaried employee in my past jobs, I was guaranteed to make a fixed sum per time period whether I completed
y tasks per day or
y+1 tasks per day. Furthermore, the completion of a task resulted in the “award” of another one. This was OK because the more tasks I accomplished, the more productive I was. The more productive I was, the more impact I had on the company, more recognition was received, etc.
Consulting (especially under fixed contract) changes this around. The one and only goal I have is to minimize the time it takes for me to deliver a working product to specification. The quicker I deliver, the more money I get rewarded. Time is literally money. This has pushed me to optimize my tool chain and processes so that my analysis->execute->test->deploy cycles are as tight as possible. I realize that there are such things as bonuses under the salaried practice. I would argue getting frequent “micro-bonuses” as opposed to one big yearly bonus still has an impact on how differently time is valued under each practice.
I want to be clear that I don’t think one practice is better than another. But it is interesting to experience both.
There’s an interesting nature to colleague based relationships. In some ways, you know your work colleagues better than you know your normal friends. You spend many hours a day with them. You get to see how they react under pressure and adversity. You get to see their character up close and transparently. There’s also a sense of spirit and shared purpose because you’re on the same team. A special bond is built.
I’ve made life long friends with some of my clients. That, more than anything else on this list, has made consulting special to me.
edit 06/24 - additional commentary in HackerNews thread