Working as a freelancer
An overview of my freelance career.
As with most developers, my first jobs were freelance contract work, and I have continued to do freelance work over the years. I have worked with companies ranging from seed investment management software, to exotic animal skin handbags, and just about everything in between.
Something you learn early on as a freelancer is that oftentimes, your client doesn't have a very clear idea of what they want. This can lead to countless iterations back and forth as I try to hit an ambiguous mark. The solution I have found to this is incredibly clear communication to set expectations for what the development process will look like for us.
I have also learned to be wary when I hear, "Just play around with the idea! I'm sure you'll figure it out." Those projects have without fail been my most difficult.

Working with clients.
By far the greatest joy and challenge of freelance work is working with a new set of people for each project. This always brings fresh ideas and unique hurdles to overcome in the process.
As a developer, most of the work I do is largely a mystery to those I'm working with. My hope in working with anyone is to dispell that mystery and enable them to make changes themselves whenever possible to help them become an agile small business.

Solving client problems.
Though each project is different, most freelance projects I take on use a site builder, such as Squarespace or Shopify. The companies are oftentimes online retailers, and these platforms are perfect for matching their needs. Because of these projects, I have had exposure to a good deal of the modern site builders, which I have found to be invaluable information.
Other freelance work requires me to build on their existing codebase, which is a process I always enjoy. It's such a process of exploration to dive into the codebase of another company. I always learn new tricks and tips from their work, as well as see opportunities for their code quality to improve.

Main lessons:
Set expectations, then do your best to exceed them.
Oftentimes when working with clients, they are not sure of the time or work required to complete a job. My goal is to always give them a liberal estimate of the project scope, while building in room to deal with unexpected obstables, which almost always happen. With that estimate set, it is always my goal to deliver it before that deadline if at all possible.
Client interactions matter.
One of the most important aspects of freelance work is the communication between myself and the client. I always strive for openness and mutual respect in our conversations. Another aspect of these interactions that I feel is important is for them to be as delightful as possible. In my experience, if you are fun and easy to work with, the client is more likely to work with you again.