5 tough lessons I learned as a freelance programmer
Day 1 of my first programming job, I didn’t know I was a professional subcontractor.
A professional? I knew some Photoshop and basic web design. Check!
A subcontractor? Sorry, a what?
When I realized that being a subcontractor was more of a “friends-with-benefits” kind of deal, it got me thinking about seeing other people, and erm… earning some money on the side… freelance code-love-making? These metaphors don’t mix very well :)
The first freelance projects I managed to score were little single-purpose web apps, eventually ramping up to big apps with dynamic features like databases, user permissions, third-party tools, the works. I was hooked on learning & earning from the comfort of my cozy apartment, cats on my lap, beer in hand, nobody telling me how to to do my shit except me… and Stack Overflow.
With this in mind, I quit my job and moved to the more anglo-friendly Toronto, where I’d continue grow my freelance business.
What followed was anything BUT daffodils & daisies — it was a struggle just to make ends meet every month.
Until things finally started to pull my way, I had to wade through a lot of trial & error, and take a lot of tough lessons straight to the teeth.
1. Time isn’t money. Time is your time.
Managing time (and billing for it) turned out to be the biggest challenge straight off the bat.
Simply trying to override my bad habits wouldn’t last long, so I eventually had to embrace many habits & tendencies as part of my personality. A flexible schedule allows for some wiggle-room to compensate and get strategic with your time.
For example, if you’re feeling crappy today, try and prevent it from affecting the quality of your work and communication. Take the necessary time to adjust your attitude, then hit play… just not on Netflix!
“Time is money” gets thrown around a lot, and many freelancers like me started with the same opportunistic view of valuing their time by the hour.
“What’s your hourly rate?”
It’s simple in theory… right?
I do 50h of coding at $20/h, and the client promptly pays me $1000. Next!
For straight-forward work in a well-organized project, with familiar languages/frameworks… it might go without a hitch.
But as for the other 95% of the time, the reality of freelance kicks in.
Here’s the tip of the iceberg:
- 50h of coding? What about the hours you spend acquiring the client, outlining the project, communicating, chasing payments etc?
- Your estimation is off-target — there’s a big unforeseen challenge — so it takes an additional 20h. Explain to the client and re-negotiate (costing more time & confidence), or suck it up this time around.
- The client takes months to pony up the $1000, so you’re forced to rely more heavily on credit and pay more hard-earned money to the bank, thanks to interest charges.
Through enough trial & error, I built up an immunity from many scenarios like this. Gradually I was able to spend more time delivering value, and less time dealing with the fallout of poor planning.
Now having given up the full freelance life and focusing in on a single client/project, time is finally on my side. I don’t regret the struggle — it teaches you a deeper appreciation of the time you have available each day.
2. Boop! Bling! Dirpdirp! Cull your damn notifications
Ever feel a phantom buzz in your pocket?
Turn your head when someone else receives a text with the same Ding-tone?
I used to have every single email pop up on my phone with a DING, day and night. To please the clients who put food on my table, it was tempting to provide that 24/h quick service, therefore greasing the wheels of communication right?
Instead, intrusive notifications began wreaking havoc on both my work and personal life. The quality of my communication suffered (causing further emails) and the lapses of attention became a battleground for my girlfriend and I at home. One big no-fun zone.
And that’s just from one app — out of many!
Feeling familiar? Maybe it’s time you attend “Notification Rehab.” Here’s what I’ve done and recommend you do:
- Disable all notifications for each individual application.
- Enjoy the silence for a day or two, and listen for the pain (not the expectation of pain).
- Gradually add soft notifications back in one at a time, such as little banners/bubbles for the essential stuff.
- If soft notifications aren’t enough for some services (text messages, Slack mentions, etc.), then think strategically about adding your ol’ faves back. (That is, the ones your team is in and, thus, you’re paid to be in.)
- Stop there! Remain critical of any new apps that interrupt your workflow and personal life. It’s your time after all!
3. Respect the work location, wherever it may be
We digital nomads need to get out of the house now and again, despite the convenience of sitting down to code in our underwear. It can be a lonely world.
Coffee shops are great spots to get shit done, especially the venues we have here in Victoria, BC *he brags like a coffee snob*. There’s caffeine & snacks just steps away, with some ambient background noise to enhance abstract thought. (Don’t believe in the power of ambient noise? There’s an interesting study about it, and even an app to simulate it: https://coffitivity.com/.)
Sadly, even in over-polite cities like Victoria, these coffee shops can get overwhelmed by people who buy a single bevy, then spend 4 hours at a table that seats multiple people:
Baristas are often too courteous to point out selfish behaviour like this, until they get home and vent to their partner (AKA: Me). As a result, I’ve developed some guidelines for working in public settings:
- Choose the less desirable spots, somewhere towards the back or in the corner. Avoid taking up unnecessary space.
- Buy beverages and snacks like paying rent: Regularly.
- Tip baristas & servers especially well, and engage in conversation when appropriate. Be more than just a laptop-face in the corner, learn their names and become part of the ‘regulars’ community.
- Avoid becoming a daily offender. Spread the love, come up with a circuit of places to visit. Varying your location helps with creative thought, and forces you explore new places in your area.
- Practice safe WiFi with a Virtual Private Network (VPN). Not only do many of these services (like ExpressVPN) disguise your web traffic from prying eyes, but allow you to skip around between countries at will.
And if you’re in places like Boston, San Fran or Philadelphia, hit up a Capital One bank-meets-coffee-shop.
4. For the love of God, take a break now and then
Last week, I flew home to New Brunswick and experienced my first ever vacation days as a working professional. It might not seem like a big deal to you, but to me it really was.
I’m not used to these ‘recharging days’ of no expectation for writing code and putting out fires. Home life and travel was just something I’d fit in between projects, bringing my laptop everywhere just in case — with nobody else to lean on. Vacation always meant work.
This time around, my laptop’s monumental task was playing Lego Batman to our AirBnb’s TV. Fully recharged, I came back this week with a fresh mind and helped our team at Airstory meet a big exciting deadline for Appsumo.
And nothing burned down while I was away! The magic of teamwork.
It’s not just vacation days either.
Taking little breaks to decompress throughout the day increases the focus in your work and deepens patience & empathy with clients. The next time you’re feeling overwhelmed and tired out, take a quick walk or move to another location.
Reserving chunks of quality time for your wellbeing is a great investment in your work & product.
5. Better communication for less communication
Effective communication, to me, is about writing for the reader and answering questions before they’re raised. It doesn’t mean blasting them with every thought in your head, but keeping a consistently lean flow of information.
It also means writing for the reader(s) within their context rather than your own. I find myself re-writing a lot of messages in emails and Slack because the quality of communication I put out needs to be on-par with the work I produce. It needs to be easy to read, to-the-point and somewhat human-sounding.
Taking the time to analyze what you’re sending often results in not sending anything at all. Just getting your thoughts down on a page helps you think differently, and solve your own problems. I’ve already saved our CTO Steven from 100’s of technical questions this way.
Multimedia doesn’t hurt either. As a front-end developer, visuals are super important due to their subjective nature, so I frequently use screenshots to save time on back & forth. It takes just a few keyboard shortcuts on Mac:
- Shift + Control + Command + 4
- Drag your cursor to frame what you want, and release.
- Open up a service like Slack or Gmail that supports pasting images.
- Paste the screenshot image with Ctrl + V
Whether it’s interacting with clients, or working within a tight team on Slack, communicating “early and often” with sensitivity to other people is an essential skill for today’s remote worker.
Full-freelance isn’t for everyone
It takes a certain level of grit and blind confidence to go out on your own, hustling work and eating shit to just to stay alive. Freelance has become very romanticized in today’s startup culture, with countless hype-articles that breed unrealistic expectations.
It may not be all the daisies & daffodils I’d hoped for when leaving my first job in Montréal… but I will say coding in your underwear is a pretty big plus!
These days, I code-in-underwear full-time as a member of the remote team at Airstory. (We’re hiring!)