Summary : The Software Engineer's Guide to Freelance Consulting by Zack Burt and Jay El-Kaake

1. I found my first client when I barely knew how to code, so I developed an early appreciation for the fact that people will pay you if you can solve problems for their business (either by making them money, helping them have to invest less money or time, or fixing something that’s broken). 

2. Finding clients is the cornerstone to freelancing.  It’s the most important thing you will do as a freelancer aside from writing code.  It’s a fundamental skill that will make-or-break you as a successful, independent freelancer: if you develop this skill, you will find success; if you don’t, you will most likely become a full-time employee.

3. In fact, until you have consistent work, you should be spending at least four hours a day looking for new clients.

4. I got my start in consulting by building an app in the ‘hot space’ of the day: the Facebook platform.

5. Because my app was at the top of the Facebook “app list”, anyone who wanted a Facebook app built could contact me and know that I would be capable of delivering something of quality – the proof was in the pudding of my existing app.

6. I recommend being proactive in advertising your competence: one approach that’s worked particularly well for me has been Craigslist ads.

7. I know what you’re thinking– “Craigslist?! Really?!  That site looks like something from 1999, and it’s notorious for scams.”  Those objections may be true, but since it was founded by an old-school geek, it still has a huge population of people who use it as a market to find software development.

8. In 2017, I generated over $100,000 of new business from Craigslist ads. You can post pretty much anything you want in the “Resume” section of Craigslist.

9. If you’ve been working a job in the tech industry, or even a job in the non-tech industry, but you happened to be in tech, it’s likely that your coworkers may have moved on to newer and greater things.  Make a list of all of your old jobs, and then for each job, make a list of the coworkers who you enjoyed working with.  Add to the list coworkers those who you had a great reputation with (for delivering excellent results).

10. There is really no shortage of work for talented developers, and one of the biggest barriers to signing a new client is convincing them that you will actually be able to deliver the work.  You would be surprised by the reasons clients will dismiss you, but if you are dealing with someone who has already witnessed your ability to deliver quality work, first hand, then you don’t have to deal with that hurdle!

11. I strongly recommend keeping in touch with your past clients for several key reasons: 

  • First, you can make sure that whatever you delivered to them is still delivering value.  If it isn’t, you can fix it for them (they’ll often pay you for the service), or you can figure out what went wrong in order to improve the professional quality of your work.  
  • Second, it’s important to maintain the relationship so that they think of you when they need work performed in the future.  In addition, you can just ask them outright for referrals to their personal and professional networks.  If they are happy with your work, then there is no reason they shouldn’t be able to answer with some ideas when you ask, “Can you think of anybody who would be able to benefit from my developer services?”
  • The final reason is so that they will provide you a reference that you can give potential new clients.

12. Many people are shocked when I tell them that they can generate serious revenues through Craigslist, but it’s still a thriving market for freelance programming jobs. These are generally not going to be huge engineering projects, but utilize the ‘foot in the door phenomenon’: once you get your foot in the door with a potential client, and you deliver value, you can earn additional work from that client.

13. The Hacker News community is a great source of leads. Here is a list of ways to monetize this community:

  • Contribute to discussion of topics where you have some technical expertise.
  • This can include both hard tech and also soft skills threads.  Make sure you have your contact information in your profile – Hacker News will not display your email address by default due to its privacy restrictions, so be sure to add your email address manually to your profile.
  • Join the #startups channel on IRC and participate in the discussion, every so often you should remind people that you are a freelancer and an expert in various technologies.
  • When people make “Show HN” threads, send an email to the authors introducing yourself.  In your message, provide feedback on their project and let them know that you are available to deliver value to them when they’re in need of development help.
  • Reach out to the community leaders of Hacker News. You can find a list here: https://news.ycombinator.com/leaders
  • Every month, there is a “Who is hiring?” thread and a “Freelancer?  Seeking Freelancer?” thread.  You can see a master list of all the threads here: https://news.ycombinator.com/submitted?id=whoishiring. 
  • You should email all of the companies who post in the Freelancer? Seeking Freelancer? thread.  You should also post your contact info in the Freelancer? Seeking Freelancer? thread.  I personally have found subcontractors by harvesting emails from the Freelancer threads.
  • Contribute content that you might find interesting to share through blog posts, and then submit it to the main Hacker 
  • News site for discussion. If you regularly submit content (getting upvoted to the frontpage ~7 times within a year) then you will become a name brand within the community, and people will start cold emailing you out of the blue with opportunities for collaboration.
  • There are various Facebook groups dedicated to the Hacker News community.  For example, https://www.facebook.com/groups/114326995294656/ – if you search on Facebook, you will find several. 
  • People regularly post job and consulting opportunities to these groups. Join the groups, participate in the conversations (to build your name brand: most brand building building just means repeated positive exposure to achieve recognition), and reply to the opportunities.

13.  Blog about technical topics for new technologies. Teaching others is valuable for self-promotion, but also beneficial for reinforcing your own knowledge of the material.

14. Don’t put your contact info in a cryptic puzzle– people won’t think that you’re clever because you avoid spam robots… they’ll think that you’re an unclear, bad communicator.

15. If you build a big open source project that gets traction on GitHub, you may start receiving consulting requests – whether to implement your open source software, to make changes, or just to work in some other capacity because you have demonstrated yourself as a competent technologist who makes products that have an impact on the world.

16. Solving someone’s problem for free will build your reputation and lead to consulting opportunities. Every so often, you can spend some time monitoring the StackOverflow tags for the tech that you’re an expert in and be the first to respond to inquiries.  Don’t solicit consulting work directly in the threads, but you can link to your website and to your StackExchange profiles; feel free to have an ad for your consulting work directly on your website.

17. As one of the original “hire a freelancer” sites on the internet, Gun.io has been a mainstay in the community since 2011.

18. Worklily (https://www.worklily.com/) is a freelancer marketplace that connects tech freelancers with prospective clients looking for technical freelance work. The great thing about this site is that it is new and focused on technical freelancers, so you can hope to get some quality leads by making a profile on it.

19. Meetups (via meetup.com, mainly) are a great channel for finding consulting work.

20. Give talks at meetups. At the end of your talk, you can have a slide talking about ways to contact you, and you can mention you’re available for consulting work.  Then, at the end of the talk, throw your slides up on www.slideshare.com and post them to social media (Hacker News, LinkedIn, Reddit, Facebook Groups). Be sure to bring plenty of business cards that mention that you do consulting work! The culture of business cards varies from community to community.  The rule of thumb is: don’t be the only person with a business card.

21. Early-stage startups, especially the ones that have not yet raised significant investment capital, are often eager to take on workers in exchange for payments in something other than cash -- because they don’t have much of it.  This most commonly manifests itself in the form of entrepreneurs who seek to pay pre-funding employees with sweat equity; as evidenced in the many desperate Craigslist ads. Seasoned entrepreneurs will be open to other arrangements. These are often the ones you want to work with.  Experienced entrepreneurs will hoard equity; they don’t want to trade equity for something that can simply be paid for with cash.  Instead, they may be willing to work in terms of a convertible note arrangement.  That is, you bill them, but instead of them paying you with cash, they treat the invoice balance as a convertible note to the company.  Then, when the company gets financing, they either pay you back in cash or you receive equity in the company at a discount.

22. Don’t be afraid to ask your previous clients for referrals.  A great way to do this is to check in with them every so often in order to ask how their projects are going.  Once you’re in a conversation with them, you can just ask, “Is there anybody you could recommend who would benefit from my services?”.  It’s as simple as that.

23. Be sure to send your clients Christmas or holiday greeting cards - it’s a great way to stay in touch and reactivate relationships. Offbeat holidays such as July 4th, Halloween, and others can help you stand out from the crowd.

24. “It’s easier to explain price once than to apologize for quality forever.” – Zig Ziglar

25. As a baseline, you should charge at minimum what you can get paid working full-time for a company.

26. Can you get cash up front? Getting a retainer (deposit) is recommended, especially for new arrangements. Money now is better than money later. You may even be willing to offer a better rate if cash is paid to you up front.

27. If the project is not something you really want to do, then you should probably want to get paid really well to do it. If the project is something that is very interesting to you on the other hand, then maybe you’re willing to do the work at a discount.

28. Your level of interest for the work you’re doing should be very important to you, as it can affect your daily happiness greatly.

29. Never lower your rate because a client convinced you to.

  • Don’t let clients convince you that they can find someone cheaper. If they could, they wouldn’t be talking to you.
  • Don’t let clients convince you that you’re helping them out. You’re not a doctor.
  • Don’t let clients convince you that there’s much more work to come. If there is, then they should pay for a retainer.

30. There was a saying that was popular for many years: “Nobody ever got fired for buying IBM”.  That was because IBM enjoyed a reputation for providing pricey services that were always reliable.

31. If you can reduce the risk to the business of hiring you by guaranteeing that you will deliver, then you can charge more.  If you already have a solid reputation within your community for delivering quality, then you can use that as your argument; if you don’t, and you’re still confident you can deliver, then you can simply add a clause in your contract where they are entitled to a refund if the specified functionality is not delivered within the additionally specified timeframe.

32. The question of hourly rate vs. day rate is simple:  if you can devote entire days to specific clients, and if your client has the budget, charge a day rate instead of an hourly rate.  If you have enough demand to book yourself for an entire week, and your clients are willing to pay the weekly rate, charge the weekly rate. This is better for you (in terms of cashflow) and better for your clients because they get your full attention…uninterrupted focus is key in software development.

33. Often times in software development, however, it’s not practical to create a fixed scope of work: there are known unknowns and unknown unknowns. But the good news is that studies of software development by Tom DeMarco and Timothy Lister (authors of Peopleware and other software engineering classics) show that if a project is going to succeed, the data inflows and outflows must be defined 15% of the way through the entire time allotted for the project.

34. Most commonly, though, clients will appreciate the initial consultative selling and reward you for it.  Having a fixed scope and a fixed price results in projects that are more likely to succeed and projects that are finished quicker.  After all, if you’re getting paid a flat rate, you’re incentivized to finish things more quickly so you can move on to the next project.

35. Continuing education is the key to finding more gigs, promoting yourself as an authority, and ultimately making more money.

36. Once you’ve got some interest, it’s time to close the sale. Closing the sale means that you are coming up with an arrangement to start freelance coding for the client under a budget. This is a very important milestone.

37. In sales, there are five standard objections in the selling process: 

  1. Loss aversion - it costs too much, which makes spending feel like a loss.  
  2. It won’t work.
  3. It won’t work for me.  
  4. I can wait.  
  5. It’s too difficult.

38. In a meeting, you always have the opportunity to address objections #2, #3 and #5: You can convey credibility by telling stories about how you have done exactly what they need for clients in the past.  Tell them a story and help them visualize, specifically, how long it’s going to take, what kind of ongoing involvement will be required on their part, what the final form of delivery is going to look like, and when they can expect it.

39. “It costs too much” is addressable as long as you can deliver within their budget.  The other way to address this, if they made the budget way too low, is to help them calculate the business value of your offering.  Whatever you’re building should provide an ROI, or Return On Investment, that is standard within their industry – calculate the total cost, including your labor and their time.

40. If it can’t be done within the timeframe being requested, then definitely communicate it.

41. Be mindful that once you introduce clients to each other, it’s likely that they will continue talking.  If you are feeling especially ambitious, I recommend hosting a meetup where your clients can meet each other and talk about industry trends.  If you’re really feeling ambitious, cater it, and tell your clients they can invite friends. These sorts of events typically lead to lots of new business.

42. If you have a reputation for getting tasks done quickly and reliably, soon enough clients will delegate more and more tasks to you, because you are a reliable way of speeding up the throughput of their engineering organization while maintaining reasonable cost and quality.

43. Be cautioned, however, your speed should never come at the cost of quality. Poor quality development is a red flag that will lose you a client and reference for future clients. 

44. Being productive leads to more accurate estimations.

45. The typical software engineering BS of “It takes how long it takes,” and “I don’t know what I don’t know” is just not as acceptable in the consulting world.

46. You should have a written agreement with the client, a contract. An oral agreement can usually be legally binding unless there is a law that requires it to be in writing. But, to proceed on just an oral contract is asking for trouble. As a famous movie mogul reportedly said, “An oral contract isn’t worth the paper it’s written on.” That’s not always true, but why take any chances?

47. Having a carefully written agreement that addresses the issues discussed below will decrease the likelihood of disputes between you and the client and increase the likelihood of getting paid.

48. A contract is like a lock. It serves to keep honest people honest. Just as a thief will break a lock to get what he wants, a shady client will break the contract.

49. So, the most important thing about a contract is who the other party is. So, do your homework on who the client is and whether the client has had issues with other service providers.

50. Although you have the right to sue a client for non-payment, that is a last resort. It can be expensive, time-consuming, and uncertain in outcome. Therefore, you want to include provisions in your agreement with the client that will encourage the client to pay.

51. Your agreement should say that if payment is not made when due, you are entitled to suspend work, and if a payment is overdue by a specific number of days, then you can stop working altogether, but that the client is still responsible for paying for all work done until the work was stopped.

52. Another incentive for timely payment is a reasonable late charge (say, 5% or less) if the payment is late by more than a specified period. For example, you could say in the agreement that the client agrees to pay a late charge of 4% of the amount invoiced if the amount is not paid within 30 days of the date the invoice is submitted.

53. By the way, most businesses expect 30 days to pay, but if you need more frequent payment, you can try to negotiate that.

54. Whether or not the client agrees to a late charge for late payment, the agreement should specify that the client will pay interest on the amount due if the client does not pay within a specified number of days of the invoice being submitted.

55. The amount of money you charge for your services can be minuscule compared to your potential liability if you don’t deliver on time or make a mistake in the work you do. The solution to this problem is to have a clause expressly limiting your liability for damages, whether for breach of contract or for negligence.

56. Another clause to consider is one that says that you are not in breach of contract if your delay in completing the work is due to your illness or other incapacity or for causes outside your control (say, a natural disaster knocks out the electricity for a period of time or forces you to relocate).

57. Who is the “author” of a copyrighted work? If you are an employee, the copyright to the work you produce belongs to the employer, automatically. The employer is considered the author. But, if you are an independent contractor, you’re not an employee. Who owns the copyright then? You do! At least in theory.

58. But, when you focus on the practical aspects, there are issues for you to consider. What if in the process of writing the code you produce boilerplate code (say, a website management script or a self-contained class), code that you could easily (and would like to) use over and over again. If the client owns all the rights to your work, you can’t re-use your boilerplate code. So, you need an exception to the provision provision in the client’s form of agreement that states you have the right to copy, modify, or distribute your boilerplate code.

59. But, you may also have written code that is not boilerplate, but that you might like to modify and use on a future project. If you’re thinking that the modified code isn’t strictly a copy, remember that the copyright includes the right to make “derivative works.”

60. The client will probably be reluctant to let you take the work that he or she paid for and let you use it for a competitor, but the client might be more open to the idea if you agree that your right to make a derivative work of the code if it won’t be used for any software that competes with the client’s software.

61. Making a great first impression will set the standard for your experience with the client moving forward after the first discussion. In psychology, it is referred to as the primacy effect. People will remember your first and last impressions much easier within their memory. If you set the wrong first impression, then you will be constantly battling to redeem yourself to your client.

62. Your first meeting may seem like a big part of sales, and it is, but you should focus on being completely honest with the client and requesting 100% honesty from your client as well - even if it costs you money.

63. Assuring the client that you are on their team sets them on a path that makes it easier for you to tell them difficult news, such as the fact that they have unrealistic expectations for the project.

64. In early meetings where you are just getting to know the client, avoid saying things that might question your integrity, even if they are true.

65. Dress and appearance can be extremely important to business people, especially for making a satisfying first impression; it can be the difference between charging thousands of dollars a day vs. charging twenty-five bucks an hour.

66. Clients typically are smart enough to know if they’re engaging with a big company or a small company, so you should avoid dressing to deceive. Dress to show respect and seriousness instead.

67. Listen and adapt your attire later to match expectations. If they’re wearing dress shirts for meetings, then so should you. If they are not, then it’s time to let your inner Software Engineer shine.

68. In case you don’t already know, an invoice is a list of goods and services for services provided with a statement of the sum due attached. It is how you get paid for the work that you did for a client.

69. It's important to send your clients regular invoices.  Your invoices should be formal invoices: they should have an invoice number, line items describing the charges, a date, your name, the name of the client, and payment instructions.

70. As much as possible, describe the benefits that your work for the client provided.  This helps rationalize the charges and avoids buyer's remorse, wherein clients regret purchasing your services.

71. Sending invoices regularly provides several benefits.  Hopefully, you structured your contract with the client such that if they are delinquent in sending payments, penalties kick in.  Therefore, it's beneficial for you to get the clock ticking as soon as possible.

72. You should keep a file with your payment information:  

  • Your EIN or SSN (in the USA, for tax purposes) 
  • Your wire information: your name, your address, your bank's name, your bank's address, your account number, your ABA routing number, and the bank's SWIFT code.  Be sure to specify who will be responsible for paying the wire fee!
  • Your mailing information (if you would like your clients to pay you by cheque) 
  • Your PayPal information.  Be sure to specify who will be responsible for paying the PayPal fee!

73. Some clients might outright refuse to pay, other clients might go radio silent, and others might lie about sending payment ("the check is in the mail" or "the wire transfer was already sent; the bank is processing it" are both common lies). Before we dive into solutions, I would like to reiterate that these types of issues can be avoided entirely if you ask for money up front in the form of a retainer.  Try to get a retainer.

74. The most important tax-reducing tip you need to know is that the less money you make in profit (revenue - expenses), the less taxable income you will have in North America.

75. Okay, don’t write off everything, that’s not legal, but always be thinking about what can be expressed as a business expense. As a small business, it is not hard to argue to the government that something is an expense and required for you to perform your job effectively.

76. The USA is one of the only countries in the world that will tax you on your worldwide income. That is, even if you make money in a different country and then later come back to the USA, then you are still taxable on that outside income in the state that you are in last.

77. Some countries have tax treaties that allow you to pay tax in the country that you did the work in and avoid double taxation. An  example of this is such an agreement between Canada and the USA. These two countries have a treaty that allows you to pay tax in Canada during your stay in Canada and pay tax in the USA during your stay in the USA.

78. Effective communication can make or break your deals. It can be the difference of a fantastic relationship and horrible one. It’ll make the difference between a project well done and a happy client that refers you many more projects to come, or a lawsuit at your door, unpaid invoice, and terrible review.

79. It is imperative that all communication to the client use proper spelling, capitalization, and punctuation.

80. Perfect attention to mechanics also gives you more credibility; the higher your credibility, the more you can charge.  And, many clients who have no basis or skills for evaluating a developer will instead evaluate on superficial things like grammar, spelling, promptness, and sincerity in responding to email.

81. Don’t try to deceive your clients. If you’re a 3-man team, say so, feel proud and boast it. Don’t try to be a massive team. It is the QUALITY of your work that matters, not the size of your team. That’s why I know plenty of people getting paid $150/hr and know far fewer 10-person offshore teams getting paid that same rate.

82. The value you provide as a freelancer is that you are nimble, quick, smart, and agile.

83. When something breaks, and trust me - it will, take ownership.

84. If you’re coming up on a deadline and you’re noticing that the work is much more involved and time-consuming than you first thought, then make sure to communicate with the client as soon as possible of the possibility.

85. Don’t go “ghost”. Factor in social and emotional needs into your timelines instead. Going “ghost” is when you stop responding to all messages from your client for a short period of time.

86. Developers typically go ghost when they are embarrassed about the amount that they actually accomplished before their deadline and they’re too occupied with something else at the time to do any “quick updates” that make it seem like they did a lot more.

87. Start factoring in your social and emotional needs into your timelines.

88. Expectation management can make the difference of whether or not you are viewed as a pain in the butt to the client or a hero to the client. The truth is the client and yourself will often make mistakes in estimation and execution.

89. Underpromise and overdeliver. If something looks like it’ll take 4 hours, then estimate 6 hours, tell the client 8 and complete the task in 4.

90. I can guarantee that if you consistently underpromise and overdeliver, you will see the client constantly coming back with a smile.

91. Buffer your timelines, then buffer them again. Timelines aren’t really effective for agile development, but if you have to provide one, then you will want to ensure that there is at least a 50% buffer between when you think you can do the work and when you say you can complete the work. work. I can guarantee that your estimates will be wrong, everyone’s is to some degree, and when that happens, you will need to have to room to breath.

92. If you’re working a full-time job while you’re part-time freelancing you will be in a constant state of potential job loss. The best advice I can give for this is to: 

  • Always prioritize your full-time job in the event of emergencies.  
  • Work on making yourself “unfireable” by learning as much about parts of the organization and technology that many others don’t know.
  • Set proper expectations for your day job deliverables and always deliver. If you think you’re falling behind, you probably are and should consider reducing your freelance commitments.

93. Certainly never use company hardware and tools to do your consulting work, especially since some companies monitor employee devices.

94. If your coworkers find out that you are part-time freelancing while you are employed full-time, this may upset them.

95. Whether it’s simply a mean co-worker or an envious one, it is best to avoid these situations by keeping your part-time work confidential.

96. Never do part-time freelance work during your full-time office hours or in the full-time job’s office building.

97. While part-time freelancing and your full-time work life may seem like they have a ton of “synergies” you should always avoid mixing your day job intentions with your part-time freelancing intentions. The main reason to keep them completely separate is that it makes it easy to distinguish what intellectual property belongs to whom and reduces the likelihood of conflict arising when there is uncertainty.

98. But, even when you’re super busy, remember: you’re never too busy to be prospecting.  Thanks, good luck, and remember: have fun!

99. Make a list of your dream clients.  Who would benefit from your services?  Who would be in charge of the purchasing decision?  Come up with 100 dream clients – companies, not people.  For each client, try to find the person who would be in charge of that purchasing decision at that company.  If you need help on this, ask in Slack (details on joining our Slack channel are in an appendix).  When it comes to figuring out whom to contact at an organization, your best bet is to try to aim high and get a referral down the ladder.  It’s much better to have the CEO refer you to one of her lieutenants than vice versa; the lieutenants are going to be much more cautious in wasting the CEO's time, whereas a referral down to the lieutenant is almost a tacit endorsement, because if the CEO didn't believe what offering potentially had value, they wouldn't be wasting their own people's time.