or, how I started getting paid to code

First, a disclaimer: I make no claims to teach anyone how to Freelance successfully, despite the title. This merely chronicles my first steps into freelancing, from zero to… more than zero?

0: So I wanna be a freelancer!?

It’s an awkward time career-wise for me. I’ve secured some useful “credentials” and I do have some track record of employment, but not that many projects to show off to a future employer. Worse is the question of time and timing: I’m the primary caregiver of my 1 year old son, which limits how much time I can commit. No 9-5s for me. Even a remote/distributed job is tricky, since I’ll be spending 3 months working on my craft later at RC later this year.

Into that picture stepped contract work, and I decided to pursue the freelance opportunities for the next several months and see where it leads. Ideally this will end with extra spending money and some shiny projects to talk about.

1: The bear necessities…

Since I wasn’t especially interested in doing a big self-marketing push, I elected to use a freelancing platform. Upwork was often mentioned, so I whipped up a quick profile there, claiming to be a “Golang and Java Developer”, with a sentence or two describing my interests.

That was about it; it was woefully insufficient. Somehow within 6 hours of creating a profile I was invited to apply to a job, in what I can only assume was a very silly client just spamming invites. (That job still hasn’t hired weeks later.)

10: Getting my first job

When it became apparent that the initial invite was vapor, I started to take it seriously, and did a little reading on strategies for bidding on jobs. A few of the principles I’ve tried to follow:

  • be picky about what jobs you apply to (no shotgunning!)
  • use whatever info is given in the initial posting to do preliminary research on what work will be necessary
  • …and ask solid questions about the job based on that research
  • craft each proposal to each client
  • only apply to jobs you know you can accomplish
  • don’t undersell your skills

With a still-skimpy profile, I probably had little reason to actually be chosen for any work, but somehow I landed a bid for a fixed price job that I thought I could finish within enough time to maintain a nice hourly rate. My proposal was friendly and well-researched though, and I suppose that must count for something.

11: Doing the work (the fun part!)

Amazingly, the job I landed was to extend an existing open source library, and the client confirmed that it would be perfectly fine to fork, write the code, and submit a pull request.

Other clients have insisted on full ownership of the code: so while I could talk about the project, the code wouldn’t belong to me anymore. I consider myself wildly fortunate to start with this ideal circumstance.

The work involved parsing code coverage files, processing them, and outputting the data into a unified format. I learned a dash of Swift for the project, the nominal format, and later expanded the formatter I wrote to any program using gcov to generate coverage files.

Perhaps the most interesting/educational part of the work was building a Dockerfile to “demo” my work. I’d used Docker before, but mostly I’d worked with existing images to simplify the dev environment, rather than writing my own containers.

A sample of the Dockerfile process, follows, demoing the process of using gcc and gcov to actually generate a coverage file from a simple C program.

# run gcov on example file
WORKDIR $CCTR/formatters/gcov/examples
RUN rm *.gcov
RUN gcc -fprofile-arcs -ftest-coverage *.c
RUN ./a.out
RUN gcov *.c

100: A better profile (aka virtuous bragging)

I finished the job in less than a week, ahead of schedule, but ended up waiting quite a while for the client to verify the work. I’m sure I was a relatively low priority for a fast moving company.

In the meantime, confident that I could indeed get paid to do this, I turned back to my woeful profile. I wrote up reports on the project I’d completed, my senior thesis project, and the FCC/p1xt “Speedrun” collection of microservices.

I added some more certifications that I’ve earned and took a few “skills tests”. I’m quite skeptical that clients look at any of this, but it might matter to some!

Most importantly, I rewrote my main blurb, focusing on concrete things that I can produce and professional values rather than abstract skills. Of course, it’s still hard to say if any of this is effective, but I’ve been involved in a few conversations about jobs lately, and the number of times my profile has been discovered has been increasing.

101: Keeping calm

I’m applying for more jobs these days, but still only about 12 total since beginning this journey. 4 of those have resulted in serious discussions with the client about the work. I’m still not sure what clients expect, but I’m feeling much better about my ability to get paid to do this kind of work.