Don't under price yourself as a freelance developer
I’ve been working through Brennan Dunn’s Double Your Freelancing email course to level up on my technology consulting knowledge. This helps me learn what’s been successful for other consultants in the technology world so I can apply new things to my own business. One of the topics Brennan covers is for you to think about the first time you ever had to attach a price to yourself as a freelance developer. A big takeaway from the first couple lessons is don’t under price yourself as a freelance developer when pitching yourself to potential clients.
I want you to think about the first time you ever had to attach a price to yourself as a freelance developer.– Brennan Dunn
There are two glaring instances that come to mind when I think about the first time I attached a price to myself as freelance developer. Both of those instances I set my freelance rate extremely low in order to win the projects. Both times I failed – either I didn’t get the project because my rate was so low or I did get the project but because I didn’t accurately scope the project the result was sub-par for the client. Back when I was a green freelancer developer/consultant I would do anything to get those first portfolio pieces. But over the years I’ve learned a lot from those mistakes and now both my clients and I are better off because of what I learned from those mistakes.
My first freelance web development project was a side project while still working as a full time developer. Landing the gig was a lot easier than I thought landing my first freelance gig would be. I set up a Twitter search query to return results for anyone looking for a developer near Minneapolis. You can do this using the
near operator followed by your search term. For me this query looked like: near:minneapolis “looking for a developer”. I responded to one of those tweets, met with the client, reviewed what needed to be done and threw out a price. I don’t remember much conversation but I was awarded the project right away. It was almost too easy.
The project was a simple CRUD application for a home goods supplier. Since I had no experience in the freelance market and I didn’t want to lose out on the job, I massively underbid the project. I think my bid was like $3,600 for what I’d quote today around $20,000. It was insane. I ended up working for free on a lot of the project and and ended up delivering a sub par product because of that. Since I massively underbid the project and was new to this world, I wasn’t comfortable doing the right thing – going back to the client to explain my shortsighted bid and to renegotiate the project cost. Instead, I worked fast and didn’t’ deliver the exceptional product that I had promised the client.
The other time I remember pricing myself so low was when I was asked to submit a bid to redesign a client’s website. During the proposal process they asked to see my portfolio of other projects I’d done. Since I was just starting as a freelance developer I didn’t have any paid client work to show off. All my development up until this point was confidential or internal to my previous full time jobs. Even though I didn’t have a portfolio to show, the client still met with me and asked that I submit a proposal. I thought this was a good time to undercut any competitors while creating a simple website design that I could start to use as a portfolio piece. The idea was to bid extremely low and work a little bit for free to get this portfolio piece. So I wouldn’t really be working for free as I’d be getting a portfolio piece in exchange for work done. Ah, kids…
I submitted my bid at $3,000 – I guess $3,000 was my benchmark in those days. Needless to say I did not get the job. But the kicker in this story is that a while later I got an email from the head of an agency who had also submitted a bid for the same project. In the email the person asked me “did you really bid that low on this project?”. Turns out that my bid was so low that the client brought this up to a competitor just to see if it was real. They didn’t believe my bid was serious because it was so low, in fact it was a good $15,000 lower than the agency bid. So you can be too cheap and it turns out a race to the bottom is not a race you want to be in.
What I learned
Fast forward to today, I now look back at what I did wrong and apply the knowledge I learned from these experiences to all projects I work on. Before any lines of code are written or any costs are submitted I sit down with the client to discuss the project in depth. I call this phase the discovery phase. During the discovery phase I will take deep dive into the reason why the client is hiring me in the first place. I want to understand the why and what behind the project:
- Why is this client looking to hire someone like me?
- What problem are they trying to solve?
- How can I help them achieve their goals?
- What does a successful project look like?
After we’ve answered the questions above, I should have a pretty good understanding of what needs to be done. The discovery phase allows me to get a good understanding of the problem so I can then be in a position to submit a well informed – and accurate – proposal.
In the end I made a lot of mistakes when I started out as a freelance developer, but one of the biggest ones that hurt me the most was under pricing myself. Not only did I not get jobs because I was so cheap, but I didn’t deliver the quality applications I pride myself in.
You see, most of the time our jobs as consultants shouldn’t be to just write code (sometimes that actually is the case) but the majority of the time it’s to help solve a problem or even uncover a problem. All of that comes down to helping clients be more successful in what they do. Today I spend a lot of time thinking about the client, determining what they need versus what they want, and listening to their problems and pain points before I even start thinking about hours and numbers. This has helped me not only become better at my job, but I’m consistently delivering more value to my clients. Which is the entire point anyway.