Freelance Bootcamp - The Comprehensive Guide to Freelancing
4.6 (369 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
3,118 students enrolled

Freelance Bootcamp - The Comprehensive Guide to Freelancing

Learn how to build a profitable freelance business completely from scratch and gain the tools needed to succeed.
4.6 (369 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
3,118 students enrolled
Created by Jordan Hudgens
Last updated 1/2019
English [Auto]
Current price: $65.99 Original price: $94.99 Discount: 31% off
5 hours left at this price!
30-Day Money-Back Guarantee
This course includes
  • 5.5 hours on-demand video
  • 3 articles
  • Full lifetime access
  • Access on mobile and TV
  • Certificate of Completion
Training 5 or more people?

Get your team access to 4,000+ top Udemy courses anytime, anywhere.

Try Udemy for Business
What you'll learn
  • Build a freelance business completely from scratch, including: acquiring clients, building a portfolio, and managing projects.
  • You should have basic computer skills.
  • You should have a passion for learning.

Are you ready to launch your own freelance development business but don't know where to start? I used to be the same way and I spent years refining my system in order to run a successful freelance business. My name is Jordan Hudgens and I'll be your instructor for this course. In addition to being an instructor I also have a freelance development business that generated over $295,000 last year alone. In fact, in one month I made over $43,000 in freelance work. And in this course I'm going to walk through the exact process I used to build my freelance service so that you can learn from it and launch your own business.

I have spent the last year putting together this curriculum based on my own real world experiences with clients. This includes discussing the good, the bad, and the ugly when it comes to becoming a freelancer. Many other freelancing courses are filled with 1-2 hours worth of theoretical concepts. I took a different approach and focus 100% on practical real life experiences so that you can truly use this course to launch a freelance business. The result is that this course gives you 2 to 3 times more material than most other freelancing systems.

I've organized the course into practical sections so that you can follow along, this includes:

Preparing for the launch of your business. Including how to schedule your launch, how to create a portfolio that actually gets clients, how to craft a list of template proposals, and every other component you'll need in order to start your business.

Next we'll move onto the top challenge freelancers come across: how to get clients! This was the most difficult obstacle for me to overcome when I started my freelance business and I walk you through my marketing system that generated so many clients that I had to hire additional freelancers to help take on all of the new clients that were signing up.

As important as getting clients is when it comes to launching a freelance business I don't end the course there. I dedicate sections to the topics of managing projects, testing for code quality, working with legacy applications, and how to manage client communication to ensure that your clients become your biggest fans.

If the idea of hard work doesn't scare you off and if the concept of making your own schedule and being able to work from anywhere in the world is appealing, then this is the course for you.

Since these concepts are part of my life's work, I didn't simply record myself discussing the material. I also wrote a full book on how you can launch your freelance business called: The Freelancer's Manifesto, and I'm giving every student that signs up for this course a copy completely for free (sold for $30 online and in stores). The book is a great companion to the video lessons and includes additional stories and examples from my own freelance experience.

In addition to the book, when you sign up for the course I will also send you all of the documents you'll need in order to become a freelancer, including: the legal agreements I give to clients, my full list of template proposals, and as with all my other courses you can message me anytime with any questions that you may have.

Please feel free to review the course curriculum and I look forward to going through the material with you on your freelance journey!

Who this course is for:
  • This course is for developers and designers who want to build their own freelance businesses, including full time and part time work.
Course content
Expand all 43 lectures 05:44:11
+ Is Freelancing Right for You?
3 lectures 09:11

Becoming a freelancer is a true life change, especially if you're planning on doing it full time. When I was contemplating the move from full time employment to launching my own freelance business I put down a list of pros and cons. This may seem like a tired approach, there are other things we could do, such as building a priority matrix or some other type of decision system. However I like to keep things as simple as possible whenever I can, so let's start with listing out each of the potential benefits for starting a freelance business.

These benefits will be the same whether you are looking to launch a full time freelance endeavor or simply to get some side work on some part time projects. They will only vary in degree.


Ah, freedom. The goal that everyone tried to achieve but few people every actually achieve. Many freelance businesses have started by individuals who couldn't stand the traditional 9 to 5 workday.

Personally, the fact that I'm able to work from:

  • An office
  • A coffee shop
  • A library
  • Or my home

Makes me smile throughout the day. This type of freedom lets freelancers express their creativity based on their surroundings. My Dad is a Major League baseball coach, so I love the fact that it's easy for me to pack up my laptop and work from whatever city he's at when I want to catch a game. The freedom provided by having a freelance business has also allowed me to setup my schedule each day. A number of my clients are in the Central and East coast time zones. I've configured my schedule so that I can be done with work at 3pm each day. That way I can make sure that I'm available if any emergency pops up for a client and I have the rest of my day to spend with my family.

Income Source Flexibility

Closely related to freedom, being a freelancer will allow for you to vary your streams of income. As Warren Buffet famously said:

"Never depend on a single income."

Buffett was speaking to investing. However not all investments are comprised of a stock portfolio. Becoming a freelancer has allowed me to segment my time so that each day I dedicate time to building additional income sources, such as building courses like this or any of my devCamp development books and tutorials.

Working a traditional 9 to 5 job wouldn't allow me to dedicate the time required to build multiple income streams, but freelancing allows for it.


Obviously you wouldn't be interested in launching a freelance business if there wasn't a tremendous upside financially. Freedom and time only goes so far, at some point the mortgage and car payment have to get paid. Thankfully, if you build your freelance business properly you'll have the potential to make a great salary.

The amount you can make will be dictated by a number of criteria, including:

  • Your level of experience - a more senior developer typically can charge higher hourly or project rates than a junior dev.
  • The industry - if you're targeting local mom and pop shops you'll most likely make less per project compared with working for Fortune 500 enterprises.
  • Your location - the market sets different rates based on location. For example, US or UK based freelancers can typically demand a higher hourly rate than offshore developers.
  • Your time - the amount you make will be driven by how many hours you're prepared to dedicate to clients each day.

New Projects

The last benefit we'll discuss in this guide will be the ability to start new projects. If you're like me, the idea of building a new project gives you a jolt of energy. There's something very exciting when it comes to generating a new application and watching it be created from scratch.

When you're a freelancer you'll have the ability to launch new projects on a regular basis. This will also help you learn about a wide variety of industries and will help you learn a wide variety of new skills since each project will have its own set of new requirements.


When discussing the benefits of becoming a freelancer it was pretty hard to limit the list to 4 components. The benefits of freelancing could be a book all to themselves. However I wanted to stay focused and discuss the benefits that are the most important to me. And most importantly, these are benefits based on my own experience through the years. So these are real, tangible benefits.

What's Next

As you may expect, now that we have gone through the benefits to freelancing, in the next guide we are going to walk through the various challenges to help you make up your mind on if freelancing if right for you.

Preview 05:48

Since you're going through an in depth course on how to launch a freelance business, you're most likely already aware of the challenges facing freelancers. In fact, it could be the challenges that motivated you to go through this course.

List of Freelance Challenges

Before going through the list of freelance challenges I'm going to say that throughout this course I've dedicated guides that speak specifically to each of these potential issues and how they can be taken care of.

Getting clients

First and foremost, the top challenge for most freelancers is how to acquire clients. The best developer/writer/etc won't make a dime without clients. Therefore it's critical to establish a system for getting and retaining clients.

This course will help you develop a system to ensure your client list is full and is continually being refined. The system that I will go through is the same one that I built from scratch in order to generate over $295,000 in my first year as a freelancer.

Managing multiple projects

If you're coming from a job where you managed a single project, the idea of working with half a dozen projects at the same time may seem a bit overwhelming. This course will help you create a project management tool set to ensure that all of your projects are moving forward consistently and that you have happy clients.

Managing paperwork and legal documents

Very few individuals like paperwork, and the resources available online are pretty scattered/unreliable. When it comes to the necessary documentation you'll need to have items prepared such as:

  • W9s
  • Request for Proposals (RFPs)
  • Contractor agreements
  • Initial contact proposals
  • And many more

Along with this course you'll get full access to all of the documents that I use in my own freelance business so that you can use them for your own clients.

Responding to Angry Clients

Depending on your personality type, the idea of having to manage angry clients may seem like the biggest challenge of all. This part of the job isn't fun. No matter how good of a freelancer you are, there will always be times when expectations are not met. When this happens it's vital that you have a plan to ensure the issue doesn't escalate.

In this course I dedicate a full section to working with upset clients and I walk through experiences I've had that started negatively and ended up with the clients turning into my biggest fans.


Don't let any of these challenges deter you from starting your own freelance business. Each of them may seem hard or impossible to overcome in the beginning, but with the right systems in place you can overcome each of them.

What's Next

In the next section we're going to walk through how to prepare for the launch of your freelance business, so let's get started!

Challenges to Freelancing

Download your free copy of The Freelancer Manifesto in PDF, ePub, or Mobi formats.

Freelancer Manifesto Book Download
+ Preparing for Launch
9 lectures 01:05:48

When you were becoming a developer did it just happen magically or did it take hard work and take time? If your experience was anything like mine it took years to reach a level of professional expertise.

Considering that becoming a developer didn't happen overnight it would be crazy to think that becoming a successful freelancer would happen right away too. Starting a freelance business takes time and an effective plan. This is going to be a practical lesson and will involve some take home work.

Since you're going through this course I'll assume that you are dedicated to launching a freelance business. Starting a freelance business can be part time or full time, and while we're developing a launch plan your goals will help dictate the timeframe for the launch.

Writing Down Your Freelance Business Goals

We're going to take a structured approach to developing a launch plan for your business. And we're going to start with writing down your goals.

Lewis Carroll said:

"Any road will get you there, if you don’t know where you are going."

In other words, without clearly defined goals you're not going to have a clear path to success. Let's walk through the practical steps for defining your freelance business goals.

Decide on your long term goals

This is the high level view of what you want to do. Examples would be:

  • "I want to get some side work."
  • "I want to quit my job and start freelancing full time."
  • "I want to build a full development company and scale up a team of programmers."

Don't worry if you haven't decided on this yet. For example, I started with the mindset that I wanted to simply take on some side work. Then my business grew so much that I was able to start freelancing full time. And finally I got so many clients that I had to hire developers to work for me and I was able to start building a full digital agency.

This step is critical when it comes to scheduling your freelance business launch. Your high level goals will determine the rest of the steps in the strategy process.

Decide on a timeline for launch

The timeline for your launch will be determined by a number of factors.

Full Time Freelancing

If you want to become a full time freelancer and you currently have a job, you'll most likely want to spend around 6 months of ramp up time to:

  • Build up a full list of clients.
  • Acquire reviews/testimonials from successfully completed projects.
  • Along with the full suite of freelancing requirements, such as setting up a portfolio and marketing tools.

Part Time Freelancing

If you are wanting to get into freelancing to generate an additional revenue stream your ramp up time can be as quick as a few weeks to a month.

Don't Forget the Paper!

Don't forget to write down your goals. Right now you should have a piece of paper that lists:

  • What your long term freelance goal is.
  • What your timeframe is for launching your business.

What's Needed

In this section of the course we'll go through each of the items that are needed for launching a freelance business, including:

  • Creating a portfolio
  • Defining a list of services
  • Publishing a website to showcase your skills
  • Compiling professional proposals to give to potential clients
  • Setting up freelance profiles
  • Setting up accounting systems for tracking projects and revenue

What's Next

In the next section we'll walk through how to create a portfolio that showcases your skills as a developer. We'll also review some freelance portfolios that other developers have built that have helped them to acquire and keep clients.

Scheduling Your Freelance Business Launch

When building a freelance business, building a portfolio is one of the most important steps that you will take in order to be successful. One of the first things that clients do when they're deciding to hire you or not is look at your portfolio of projects. So let's be very strategic at this stage.

Before deciding on the types of projects you want to include in your portfolio it’s important to answer a few key questions:

  1. Who will I be showing this portfolio to?
  2. What type of features do I love developing?

The first question is pretty standard, you need to know you your audience to ensure that your work will have its greatest impact. For example, if you want to attract small mom and pop businesses it wouldn’t make much sense to fill your portfolio with 3D Unity zombie game renderings.

The second question speaks to your passions as a developer. Too many coders create a portfolio full of generic projects that they don’t truly love and it’s apparent to potential employers and clients. Make sure that the projects you build fit your personality as a developer and that you are happy with the end result. Portfolio projects are not an item meant to be simply crossed off your developer checklist, they should be projects that you’re personally proud of and enjoyed building.

Examples of Freelance Portfolios

The following examples of freelance portfolio projects entail a comprehensive feature set and should impress a wide variety of clients. However they are simply starting points, not hard and fast rules.

Social Network Utility

This is where you build a basic social network with a clean design and features such as having:

  • Posts
  • Followers
  • Comments
  • Integrate at least one unique/advanced feature, such as giving users the ability to edit each other’s posts.

When I’m looking to hire a new developer I like to see that they know how to work comfortably with complex data models such as the ones required by a social networking application and being able to work with advanced permissions structures is very important, so this makes a good portfolio project.

An example would be to develop a search engine for StackOverflow that enables more advanced features than the main web application. A project like this would show that you can work with APIs and can implement a search engine feature.

For my API project I showcased a number of applications, both web and mobile that were API based. Before I got actual clients I built a simple StackOverflow data based app but I eventually swapped it out for real world apps.

Accounting application

You don’t have to re-build quickbooks, however an accounting project can illustrate that you know how to work with financial calculations, callbacks, advanced database queries, and information security.

Scheduling application

I’ve built several scheduling applications, this type of app will show that you know how to work with dates and times (which is no easy task for any dev), along with complex validations.

Front End application

Create an app using a front end framework such as AngularJS or React and integrate it with a server side backend such as Ruby on Rails, this will show that you know how to work with service based architecture and design, which is a prerequisite by my clients.

If you build these apps (or apps that contain the same level of sophistication), and you will be able to clearly showcase your expertise to potential clients, colleagues, and future employers. These projects will also give you a great code library that you can reference for future projects. I’ve lost count of how many times I’ve reviewed past portfolio projects to see how I implemented a specific feature so I could use it on an app I was working on at the moment.

I hope this list has inspired you to build out your own portfolio of projects and feel free to message me when you’ve finished your set of projects, I’d love to see them and possibly showcase them in future episodes.

In the next guide we'll walk through how to create a list of services so you can have a focused target market for your freelance business

Creating a Freelance Portfolio

As we continue down the set of requirements for building a successful freelance business, the next checkpoint is building a list of freelance services.

Creating a thought out service list will accomplish a number of goals:

  1. It will help you focus your target market - if your goal is to work with local mom and pop business it probably wouldn't make sense to list Machine Learning Algorithm Development as a core service.
  2. It is a key component of your portfolio website - your website, that markets your freelance business, will need to have a decent amount of content. A solid list of services not only helps website visitors learn what you do, but it also will help with search engine optimization.
  3. It helps you focus - my goals for being a freelancer were pretty vague in the beginning. Writing down a full list of the services that I was going to provide actually helped me focus on what I really wanted to do.

Example List of Services

Here is an example list of services that I have for my portfolio that focuses on enterprise clients.

This list of services includes:

  • Enterprise business setup
  • Employee systems management
  • Mobile app development
  • Accounting system configuration
  • Data management
  • Marketing

Some services can be a little too general, so I also like to specify what type of work I do in a specific vertical. For example, the service Marketing can mean countless things (many of which I have no desire to do), so under the service name I'll also outline what Marketing represents. In this case it means: Web design, search engine optimization, and content marketing.


Your homework for this guide is pretty straightforward. Get a piece of paper out and write down the full list of services that you want your freelance business to focus on. After that add a subsection under each service that describes a practical explanation of your service. Please feel free to use my example as a template for starting your own list.

What's Next?

In the next guide we'll walk through various ways that you can create and publish a freelance website that showcases your skills and can help attract clients.

Preview 02:44

In order to showcase your skills and experiences to potential clients, it's vital that you have a website for your freelance business. Websites for freelance businesses come in all shapes and sizes. However there are a few common characteristics that they should all include. Some of the key elements are:

  • A clear explanation on what makes you unique as a freelancer
  • A list of your services
  • Projects or companies that you have worked for in the past
  • An easy to find and descriptive portfolio
  • Any positive testimonials
  • Multiple methods for contacting you

That may seem like a long list, so let's look at each item specifically and walk through why it's an important component.

Describe what makes you unique

You're going to be competing against countless freelancers. Many of whom have more experience than you and may even charge a lower cost. When I launched my freelance business I had no pre-existing clients and my hourly rate was about 5 times more than many of the freelance competitors I was competing with.

With this in mind I dedicated that my point of differentiation was going to be transparency. A complaint that I heard from many individuals, when working with freelancers, was that they didn't know what work was going on each day. Therefore I decided to focus on explaining my development process. And after a client hired me for a project I made a point to update them daily with each task that I performed.

This made clients feel more comfortable with working with me on their projects and many time led them to give me more work after a project had been completed.

List your services

In the last guide we walked through how to build a list of services. Now that you have your list you need to ensure that they're clearly described on your site.

Projects or Companies You've Worked With in the Past

Next you'll want to show the logos or names for organizations or projects that you've worked with in the past. If you're just starting you can create logos for portfolio projects you've built and show those.

This section is different than your portfolio showcase. This is simply a nice quick visual that clients like to see. It will give your site a more professional look and help separate you from the competition.

Your portfolio

This is one of the most important components of a freelance site. Many clients will simply skim the rest of the site and spend the majority of their time looking at your portfolio of projects. I know that when I'm looking to hire a sub contractor to work for me the most important criteria I look for is a solid portfolio of projects.

Due to the portfolio's importance when it comes to getting hired by a client, it's also a good choice to include as much detail as possible for each item. For example, if a potential client clicks on the Eventbrite portfolio item it will pop up a modal that explains the work that I performed for the customer.

This is also a great spot to include testimonials from clients.

One mistake that I see many freelancers make is to simply show screenshots of the projects they've worked on. However screenshots won't give potential clients enough information about what type of work that you do. Instead make sure that your portfolio describes exactly what work was performed on the various projects. This will let clients know your specialties and will also give you more credibility than simply listing them on the About Me section.


Make sure to include any positive testimonials that you may have from clients. If you're just launching your freelance business this section can include quotes from past co-workers or bosses that are willing to describe how much they liked working with you.

As you acquire clients, make sure you continue to add to this list of testimonials.

Also, it's helpful to include links to the applications that you worked on. I've seen too many times when freelancers have a great testimonial but don't show the client project. This takes away from the credibility of the testimonial and makes it seem fake.

Contact methods

You need to make it easy for potential clients to contact you. I recommend placing your phone and email information on the site. If you're not comfortable doing that make sure you have a contact form that's easy to navigate to.

Building the site

If you're going through this course you are most likely already a developer or designer. Therefore you already have all of the necessary knowledge for building the website yourself. However here are some helpful tools that can help you quickly get your site live:

  • Themeforest - Themeforest has thousands of great HTML/CSS templates that you download, many of them are specific to portfolio type websites.
  • Wordpress - Even if you're a backend developer it's perfectly fine to utilize a CMS tool like Wordpress to launch a portfolio website. I'm a Ruby dev, however I have a number of websites that are Wordpress based simply because it's easy to use and it's also search engine friendly.

What's Next

After your site is live you'll be ready to move onto the next guide where I discuss setting up multiple freelance website in order to target specific clients and categories.

Creating a Website for a Freelance Business

Building a list of freelance clients is a challenging task. However with the proper marketing strategies you can be successful and grow your business. One strategy I've used through the years is to create multiple portfolio websites to advertise my business.

Even though the marketing websites carry the same theme, they focus on my skills in specific categories. For example, my personal freelance site showcases my social media projects.

I have another website,, that has a completely different focus. The content is targeted to the Oil & Gas, enterprise, and machine learning verticals. And I'm currently working on several other sites right now to target new categories that I'm looking to extend into.

When I'm sending out proposals to clients I will direct them to the marketing website that matches their specific requirements.

A/B Testing

The approach of having multiple websites is not dishonest or tricky. Instead it is a form of A/B testing. Sites like Facebook and Amazon attribute high levels of their growth to A/B testing strategies.

If you have never heard of A/B testing, it's pretty straightforward. Essentially it's the practice of having multiple versions of a website or a proposal to see how they perform.

If you build multiple websites and realize that one of the sites is generating twice the conversion rate as the other site, that fact will provide you with data to help you improve the site with lower performance.

Other Examples

The strategy of having multiple sites is not specific to the freelance space. I once had a law firm hire me to build them a large number of sites. One for each city or region that they represented. I also created them sites for each practice area they specialized in (personal injury, wrongful death, etc).

Why create multiple marketing sites?

This marketing approach is very powerful for a number of reasons:

  1. It helps with search engine optimization. If you are targeting specialized industries or locations with your websites you have a better chance of ranking higher on Google compared with simply marketing yourself as a application developer. This is called long tail marketing and has proven itself to be very effective in the search engine marketing space.
  2. You target client needs. Many freelancer websites fail to connect with potential client needs. However if you have websites that target specific categories you will have a better chance of appealing to customers.

What's next?

Work on building several websites that target specific industries or services that you want to focus on. This is an important step in appealing to potential clients so make sure to build websites that clearly describe how you, as a freelancer, fill a hole in the market that you're targeting. In the next guide we'll walk through how to create proposals that generate results.

Creating Freelance Marketing Websites for Specific Client Categories

Creating well written sales proposals is one of the most critical keys when it comes to getting new clients. This is especially true when it comes to getting hired off of freelance sites such as Upwork or

When a potential client posts a project on a freelance job board they are going to get inundated with sales proposals. This means that your proposal needs to stand out amongst the rest, especially if you are a domestic freelancer and have a higher hourly rate than offshore providers.

It's also important to treat your sales proposals like living documents. They should continually evolve based on the feedback you get from them and more importantly from their respective performance. For example, if you have 3 proposals and 1 of them is getting 10x the responses, there's a good chance that the other two proposals need to be updated.

Components of Successful Sales Proposals

Through the years I've been able to see very good and very poor proposals. And I've developed a list of four components that make for an effective sales proposal. And when I say effective, I mean a proposal that sparks a potential client's interest and leads to them hiring you.

A good sales proposal should:

  1. Gain the potential client's trust
  2. Showcase your skills
  3. Prove that you're a fit for their specific project
  4. Show how you're different than other freelancers

Let's take a look at each of these elements in detail.

Gain the Potential Client's Trust

One of the greatest challenges to getting hired as a freelancer is to earn a client's trust. If a potential client trusts you, they will send you more work than you know what to do with. However if a client doesn't trust you they won't even give you a test project. This idea makes sense. Imagine if you had to hire your own freelancer, would you hire someone that you didn't trust? Probably not.

So let's walk through what kinds of things you can do to earn a client's trust.

Clear and Concise Communication

First and foremost you need to demonstrate that you can communicate clearly. Whether you are working in the same region as the client or if they're remote, the client has to feel confident that they will be able to clearly speak with you.

If a client feels like you're not understanding the project that they're describing, they're not going to run the risk of paying you and you not delivering what they need.

On a practical side, make sure you take the time to thoroughly read through everything a client sends you, whether it's a set of requirements or a competitive analysis. Once they feel comfortable that they're going to be able to communicate with you, you're well on your way to earning their trust.

Public Profiles

Next, you can earn quite a bit of respect from clients based on your public profiles. This can include profiles such as:

  • GitHub
  • Twitter
  • LinkedIn
  • And any other profile that showcases your expertise

I was once offered a 6 figure project from General Electric simply based on the work they saw on my GitHub and LinkedIn profiles. Make sure that you spend time building your online presence... because clients will Google your name to perform their own research.

So which profiles are the most important? It really depends on your goals. As a freelance developer I focus the majority of my time building out my GitHub and LinkedIn profiles since I've had the most success using those channels.

In addition to earning respect from clients, your public profiles can be a great way for clients to find you. I have had a number of clients that discovered me via my social media profiles and they sent me projects based on what they saw.

Online Skill Tests and Certifications

When it comes to earning a client's trust it may also be worth your time to take online skill tests and post a list of any certifications that you've earned. This is a much lower priority than communication and public profiles, however these types of criteria can be beneficial.

I say that these elements are a lower priority than others because they're more difficult to trust for clients. For example, online skill tests are very easy to cheat on, so they don't give you a great deal of credibility. However a naive client may care about them, so they're most likely worth your time. If there is a client who doesn't have much experience with hiring freelancers and they're comparing you with another freelancer who has a bunch of high scores on online tests you wouldn't want to lose the client simply based on something as trivial as tests.

Certifications are a little more tricky. Pretty much anyone can print out certifications, so I'd recommend only sharing them if they come from reputable sources. An example would be if you went through a well known bootcamp. Or if you earned your PMP certification for project management.

Just stay away from doing things such as saying you earned a "certification" from a 2 hour online Excel course. Clients will see right through these types of "certifications" and they'll actually detract from your credibility.

Showcase Your Skills

List Your Services

When it comes to sending out proposals you'd be shocked at how many freelancers neglect to clearly outline the services they offer. Many clients don't include 100% of the requirements in a request for proposal, so it's important to list out key services that you offer.

There are a couple ways to include your list of services.

  1. You can be very explicit with your list. In other words you can simply list out the services that you offer in bullet point form.
  2. Or you can list out your services and slide them into the proposal itself.

Examples of both options are below.

List format

I offer the following development services:

  • Ruby on Rails development
  • PostgreSQL and MySQL database management
  • Deployment services for AWS EC2, Digital Ocean, and Heroku

Content format

I have experience working with a number of modern languages and frameworks and follow best practices. My specialty areas are Ruby on Rails development, leveraging both the MySQL and PostgreSQL database engines. I also work regularly with deployment engines such as Amazon's EC2, Digital Ocean, and Heroku.

I'm not going to say that one option is better than the other. I recommend that you try both out and see which one converts the best for you.

Hand Pick Portfolio Items

Next on the list is ensuring that your portfolio items are specific to the client needs. If the client submits a job request saying that he wants a social network developed, your proposal should highlight your experience with social networks.

Imagine that you're shopping for a truck. Would you appreciate it if the salesperson showed you ever car on the lot? Or would you prefer to only be shown the trucks? I personally would only want to be shown the type of car I was interested in.

Your clients are the same way. They have a specific project in mind, therefore your proposal needs to focus on portfolio items that show you have experience with those types of projects.

This doesn't mean that you have to have a portfolio item that's an identical match for what the client is asking for. If you did you wouldn't need to build anything! However the portfolio items you include in your proposal should illustrate that you have experience building the types of features the project will require.

Remember that your portfolio is going to be one of the most critical components that determine if you get a job or not. And you need to have more than a great looking set of applications, you also need to have worked on projects that will make the client feel confident that you can build their application.

Prove that You're a Fit for their Specific Project

So how can you prove that you're a fit for a client's project?

Discuss Experience on Similar Projects

Typically I'll start by discussing similar projects I've worked on in the past. For example, if a client is asking for an API to be built I'll give a case study of a previous project I've worked on that required similar skills.

This can include a similar programming language, framework, or a set of features.

In order for a client to trust you, they have to trust that you are capable of building what they're requesting. And if you can explain how you already solved a similar problem to what they're looking for, it will dramatically increase your credibility and your chances of getting hired.

Show How You're Different than Other Freelancers

Lastly your profile needs to clearly communicate how you are different than other freelancers. I personally focused on the project development process that I follow, including describing how I communicate daily updates on the work that I performed.

Only you are going to know what makes will make you stand out amid the pool of available freelancers. It could be:

  • Your experience in a specific area
  • How you perform project management
  • Etc.

What's Next?

In the next guide we're going to walk through the proposals that I've used through the years that have proven to be the most effective.

Creating a Targeted Set of Sales Proposals

This guide will provide you with multiple proposal templates that you can customize and provide to potential customers.

Over the years I've experienced the most success when I tested multiple proposals. Below are three proposal templates that you can use for your clients.

Standard Proposal

This proposal is has worked effectively for me on clients of various sizes. The template takes the perspective that you have already discussed the project with the potential client. However if you're sending out cold call proposals on services such as Upwork or you won't always be fully informed on the project. If this is the case I would recommend that you take out the timeline and instead give approximations.

Note how the proposal lists the key criteria, such as:

  • Easy access to your portfolio
  • Listing out your services
  • What makes you different as a freelancer

Informed Proposal

The informed proposal takes a slightly different approach than the standard option. I've had this proposal work the best on potential customers that have been referred by other clients.

In this proposal you'll notice that I spend less time showcasing my services. Instead I focus on the problem that the client is trying to solve. One of the keys to success with this type of proposal is laying out a practical plan on how you are going to implement their solution.

Formal Proposal

This proposal is typically the most comprehensive proposal that I'll send to a potential client. Usually you will send this type of proposal to a client that you've spoken with several times and can give a detailed outline of what you are going to deliver.

This proposal includes:

  • Scope of work
  • List of technologies used
  • Description of features
  • Formal assumptions
  • Work Breakdown Structure (WBS)
  • Cost & timeline

These are not theoretical proposal templates that I made up for this course. I literally copied and pasted these from proposals that I've sent to potential clients through the years. They've been refined and have gone through more versions than I can count.

I recommend that you review each one and customize them to fit your specific needs.

Freelance Proposal Templates

This guide reviews the top freelance bookkeeping options. Keeping track of finances is probably one of my least favorite parts of being a freelancer. In order to properly manage a freelance business you have to manage a wide range of accounting components.

  • Profit and loss reports to capture your overall profitability.
  • Aging reports to see how long it takes to get paid.
  • Expense logging to ensure you capture all potential deductions.
  • Accounts receivable system so that you can get paid.
  • Project tracking tools if you’re working on large scale projects for clients.

Freelance Bookkeeping Options

I’ve used a number of bookkeeping solutions over the years and the following are some of the ones that I’ve had the best experience with.


freelance bookkeeping options

Freshbooks is the system that I use for my freelance business. As far as accounting software goes it covers 100% of the requirements I have. Thankfully it is also easy to use, which means that I didn’t have to spend time learning how to use the software. It has an intuitive interface and allows me to login, perform whatever tasks I have to, and then get back to working.

How it works

freelance bookkeeping options

On this page I can:

  • Select a client.
  • Add additional accounting information. This includes items such as a purchase order number.
  • Add items to the invoice. I also like how easy it is to add fractional quantity units. If I worked a little over 14 hours I can enter 14.1 hours and Freshbooks calculates the amount.
  • Enter the payment method. This portion of the system makes it easy to let clients know if I want to be paid via: standard PayPal, PayPal Business, or via Freshbooks Payment system.
  • Add comments. You can post any additional information that will be sent to the client.

Additional Features

freelance bookkeeping options

It would take hours to go through the full system, so I will simply gloss over some of the other features I find the most useful.

  • Invoice sending flexibility. As great as it is to send invoices electronically I still have a few clients who prefer paper based invoices. Thankfully, not only does Freshbooks allow me to print out invoices, they actually mail them for me directly to the client.
  • Expense tracking. Tracking business expenses is a tedious exercise. However with the Freshbooks mobile app I can take pictures from my phone, enter in the expense details, and the expense will be logged into the system.
  • Creating estimates. In the past I would create an estimate in Excel or Word, and then send it to the client. If they approved it I would then have to enter the details into an invoice. However with Freshbooks I can create an estimate and email that directly to the client. If they decide to move forward with the project the estimate will automatically transfer into an invoice.


As much as I love the Freshbooks system, it does have a few weaknesses. First and foremost it can get a little expensive if you get a large number of clients. Also, if you start hiring a large number of employees it can become a little unwieldy to manage. Personally I’d recommend using Freshbooks for any business with under 20 employees. When you grow beyond that point you’ll want to move to a more scalable system.


freelance bookkeeping options

If you’ve grown out of Freshbooks, Quickbooks may be a good option for your business. Quickbooks has been the industry leader for small business accounting software as long as I’ve been around. Even though the company has acquired the reputation for being difficult to manage, over the past few years they’ve done a good job in making the system more flexible.

When you list all of the potential features needed by accounting software for a small business, Quickbooks has it all. Also, due to its popularity, there is a good chance that any admins that you hire will already have experience using the system.

With all of that being said, I personally wouldn’t choose to use Quickbooks for devCamp or any of the companies I work with. The main reason is because I’ve seen too many times where companies grow out of Quickbooks and found it very hard to migrate to a new system. I also don’t like the reporting engine that the software uses. For example, if you plan on running your financial data through a big data analysis reporting engine, Quickbooks makes it difficult to export it in a format that’s easy to use.


freelance bookkeeping options

If your business is growing, both in clients and employees, Netsuite is a great bookkeeping option. Technically Netsuite is probably overkill for the typical freelance business. However if your development shop starts to turn into a full fledged digital agency you’ll need a robust  ERP system. ERP systems are different from traditional bookkeeping software. Typically they’ll offer tools such as:

  • Resource planning. This means you can allocate developer time on a project basis.
  • Advanced tax planning tools. Once your business hits a certain size it’s important to ensure you’re taking advantage of all the potential tax deductions available. Tools like an ERP system do this for you.
  • Payroll Integrations. Being able to manage your employees, track turnover, and tasks such as that get important as your business grows. However they’re hard to track manually. A system like Netsuite calculates all of your employee tracking metrics so you can use them to manage your team.


I hope that this has been a helpful set of freelance bookkeeping options that will help you decide on the right system for your business.

Setup Bookkeeping Services
+ How to Get Freelance Clients
5 lectures 43:51

Now that you have a full freelance launch plan and portfolio for your business it’s time to discuss how you can get clients. Because at the end of the day, a freelance business without paying clients isn’t a business at all.

  • In this section we’re going to discuss:
  • Where to get Clients
  • The Secret to Getting Clients on Outsourcing Services
  • How you can Develop soft skills to make yourself a more marketable freelancer.
  • And lastly we’ll put together a full system for Organically growing your freelance business
Preview 00:52

There have been three main ways that I’ve gotten new clients:

  1. Outsourcing services such as Odesk and Elance (which have now merged to be Upwork)
  2. LinkedIn
  3. Referrals

In future episodes I’ll go into detail on various ways that I’ve had success in each one of those channels so that you can take some of the experiences I’ve had and apply them to your own freelance careers.

freelance servicesFreelancing services such as Upwork are great for finding new clients, the keys to success are to constantly send out proposals, dozens per day and be quick to communicate with potential clients. If you’re a US or UK based developer make sure you understand that you’ll be competing from developers from all over the world which means that the bids that you’ll be competing with could be dramatically lower than what you’d want to charge. However I’ve been able to get dozens of long term clients from these services, including large organizations such as Eventbrite and Quip.

clients from linkedinLinkedIn is an interesting tool for freelancers, I’ve gotten several clients from the service simply by having a filled out profile and joining user groups for the languages and frameworks that I specialize in. I’ve gotten clients such as AppDev and the Flatiron School from LinkedIn. Interestingly enough I was never pro active with reaching out to clients, if you have a good profile showcasing your skills and join enough groups the jobs start to come in. It’s incremental growth, but I’ve found some great clients though LinkedIn.

clients from referralsLastly referrals are one of the best ways to get clients. This marketing channel typically takes the most time depending on your own social and client network. When I say referral I’m not simply referencing referrals from other clients, I’ve gotten referrals from co-workers, friends, family, and through networking events such as local Chambers of Commerce organizations.

An Overview of Where to Get Freelance Clients

If you’re wanting to start a freelance business, the most pressing challenges typically revolve around getting new clients. When I initially launched my freelance business I struggled to acquire customers. However after a few months of trudging through the traditional channels I discovered a great solution that resulted in generating over $290,000 in revenue last year. And it’s what I want to discuss today.

Where to Find New Clients

getting new clients as a freelancer

Let’s begin by reviewing the list of options for where you can find new clients as a freelancer. I’ve read countless blog posts and a number of books on the subject, and the following were the most popular recommendations.

  • Friends and family. This may seem like a natural place to start, however it’s been my experience that friends and family typically expect you to work for free or incredibly cheap. This channel can be good if you’re just starting out and you need to build a portfolio, however it is not scalable and usually not too profitable.
  • Network events. For networking you can join your local chamber of commerce or find networking groups where you can promote your business. This approach can work well in some cases. However each time I’ve tried it I’ve discovered that there were already several other developers attending working on getting new clients for their own freelance businesses. I wouldn’t let my experience with this option stop you from trying it, but make sure you’re prepared to compete with others. I remember attending a chamber of commerce “meet and greet” a few years ago. When everyone around the room introduced themselves and their business, there were half a dozen freelance developers, who were all offering the same services.
  • Outsourcing services. This is the option that I want to focus on today. Interestingly enough I was told by a number of freelance “experts” that this avenue was too difficult. However I found a great way to use it for getting new clients as a freelancer.

Challenge in Getting New Clients with Outsourcing Services

getting new clients as a freelancer

Like I already mentioned, I had a difficult time in the beginning getting new clients. Using services such as Odesk and Elance (which have now merged and are now Upwork) were especially challenging. Even though I had a solid portfolio and a decade of experience I couldn’t get a single client. Some of the challenges were the following:

  1. I didn’t have any ratings or reviews. Not many clients are willing to take a risk on a developer without some type of recommendation from others.
  2. I was priced higher than the majority of other freelancers. The majority of the freelance teams marketing services on outsourcing sites are offshore. This meant that I was having to compete against developers offering to work for, at times, 90% cheaper than my rate. I charge $100 per hour, while the majority of offshore teams are charging $10-$20 per hour.
  3. I didn’t have the time to pitch each potential client. In regard to marketing my freelance services, I was very streaky. I would get motivated for a few days and send out a large number of pitches. And then I would get depressed that I wasn’t getting any replies and I wouldn’t send any proposals for weeks.

After struggling for a few months I knew I didn’t have any control over challenges #1 or #2. However I could do something about #3. I was working a full time job at the time, while also attending grad school, so my time was very limited. With that in mind I came up with a marketing system. And it actually worked!

Getting New Clients as a Freelancer

getting new clients as a freelancer

Since I’m a little bit on the stubborn side it took me a while to admit it, but I finally came to terms with the fact that I wasn’t getting new clients as a freelancer. Especially with the methods that I’d been trying up to that time. So I put a plan into action that involved hiring some freelancers of my own. I assembled a team that helped fill in my weak areas.

In order to start getting new clients as a freelancer I knew I had to have clearly written proposals that described my services. And I also knew that the proposals would have to be sent out 24/7.

Proposal Material

getting new clients as a freelancer

With that in mind I researched sales copy writers on Upwork and hired a talented marketer who created three different proposals that I could use. This included sales copy that advertised my: experience, portfolio, and expertise as a developer. I had three versions created because I wanted each one to be targeted to a specific type of project. For example, one of the proposals focused on enterprise projects. Another proposal was targeted at building APIs. While the third had content geared toward startups.

Sending Out Constant Proposals

getting new clients as a freelancer

With a full set of professional proposals I was ready to implement the second step of my plan: consistently sending out proposals. For this I hired a detail oriented and fluent virtual assistant from the Philippines named Sy. I was able to hire Sy for $6.50 an hour and he paid for himself in the first week! I walked him through the proposals and described the types of projects that I wanted to get hired for.

After I was confident that Sy clearly understood my goals I let him loose on Elance. He reviewed the full set of potential projects on the marketplace and sent my targeted proposals to each project that fit my criteria.

Within a week I was getting responses back from clients and within two weeks I had been hired for multiple projects. Three months later I had to hire my own developers because I was getting so many clients hire me to build applications.

The result

So how did my strategy for getting new clients as a freelancer work out? Well here is a screenshot of my Freshbooks dashboard. Last year my freelance business generated over $290,000 in revenue.

getting new clients as a freelancer

With one month hitting over $40,000.

getting new clients as a freelancer

I’m not going to pretend like this was easy. This is pretty much the opposite of a get rich quick kind of scheme. However by implementing this strategy I was able to cost efficiently outsource the marketing for my freelance business so that I could focus on actual development.


I hope that this has been a helpful guide for getting new clients as a freelancer and has given you some ideas on how you can build your own business.

The Secret to Getting Clients on Outsourcing Services

I talk quite a bit about improving as a developer. Most of the time I focus on how you can learn new technical skills, such as becoming more proficient in a programming language or framework. However if you limit your knowledge to technical talent you will be decreasing your chances for success in the marketplace. In this guide I’m going to walk through five key developer soft skills that you can utilize to become a well rounded coder.

Developer Soft Skills

This list is by no means comprehensive. Instead it represents the skills that I’ve personally used and had success with. From being the IT Director of a national energy company in my late 20’s to the CTO of coding bootcamp with locations around the world, I’ve seen these skills help me at every level of my career. And as you’ll notice, they have very little to do with actual technical ability.



developer soft skills

First on the list is the ability to write. In the book ReWork. The authors, who are also the founders of Basecamp and the Ruby on Rails framework, wrote that one of the skills they look for in job candidates is their ability to write. This includes positions that you would think writing skill would be pointless, such as developers and system administrators.

Obviously a developer needs to be able to be skilled as a coder. However the book explains that if a developer can write, it is a sign that he or she is a good communicator. Writing skill doesn’t mean that each memo you write has to sound like a riveting novel. Instead it means that:

  • You can organize your thoughts properly.
  • And that you can communicate what you want to say so that others can understand.

If you feel like you lack writing talent, I’ve included a link to some helpful tips in the Resources section of this guide.


developer soft skills

Next on the list of developer soft skills is the ability to converse well with others. Now if you’re like me, this is by far the most challenging skill on this list. If I had my way I’d stay behind my desk building applications all day and never interact with a another human. It’s simply the way I was wired, and I know I’m not alone in that desire.

However, conversational skills are an absolute requirement when it comes to advancing in your career. Whether you are a freelance developer looking for new clients or a software engineer looking to get promoted, you’ll discover that the top prerequisite to your success is not technical skill, it’s likability. If someone likes you they are going to want to give you a chance to succeed. And one of the most straightforward ways to get people to like you is by becoming a good conversationalist.

Conversation Tips

Thankfully I’ve discovered that the system for having great conversations is pretty straightforward. Here are some tips that I’ve used to improve at this skill:

  • Think back through your life and come up with some entertaining stories about yourself. People love stories, especially if they are funny. And I’ve discovered that telling a few well timed stories has been able to get me in the good graces with CEOs and executives through the years.
  • Make the focus of conversation be on the other person. People love talking about themselves, so by simply asking insightful questions you will be considered a great conversationalist… even though you let the other person do all the talking! Like your stories, come up with a list of questions that you can recall at a moment’s notice.
  • DO NOT COMPLAIN. I have yet to find the person that likes to converse with someone who constantly complains. With that being said, countless people seem to enjoy bringing up every negative thing that has happened in their lives when they meet someone. The good thing about this is that if you can have a conversation without complaining you will stand out as being an upbeat and likable person.


developer soft skills

Moving down the list of developer soft skills, the next item is management. Now if you’re an entry level developer don’t tune out. Management doesn’t have to mean managing people or projects. When I say management I’m referencing how you attack each task you’re given.

For example, if you are handed a new feature to build, do you jump right in and start coding? Or are you more organized with your approach?

If a client or managers see that you take a systematic approach to every task you’re given they are going to feel more confident giving you more responsibility.

For improving this skill I recommend you reading up on project management books or taking an online course on the topic. The few days that you’ll spend learning about management practices will help serve you well the rest of your career.


developer soft skills

Next on the list is design. In Scott Adams (the creator of Dilbert) book ###a href="">How to Fail at Almost Everything and Still Win Big, Adams describes how knowing the basic fundamentals of design should be required knowledge for all engineers. I can’t tell you how many times I’ve heard a developer say something like “design really isn’t my thing”. It’s fine if your top skill isn’t design. However learning the basics of what qualifies as a well crafted design takes such little work, that anyone who doesn’t learn about it is simply being lazy.


I’ve included a link to a great book on design in the Resources section of this guide.

Public Speaking

developer soft skills

Last on the list of developer soft skills is public speaking. This may seem like a useless skill for a software developer. However let me give you two scenarios to think about:

  • In scenario 1 there is a brilliant developer with poor public speaking skills. When asked to present a project that he built. An incredibly well built project I may add. The developer talks in a monotone voice during the whole presentation and the product demo is filled with him simply moving from one page to another.
  • In scenario 2 there is another great developer. But this engineer has worked on his public speaking skills and gives a well organized demo. His time in front of the room is filled with clear language, amusing anecdotes, and analogies for each feature to make the project understandable for everyone in the room.

If you were in the room which one of the projects would seem more appealing? It doesn’t take a MBA to know that the developer in scenario #2 will win each time.

Note that both of the projects were great pieces of software. Like I mentioned earlier, soft skills are not a replacement for technical skills. They are something to layer on top of programming expertise. You could give a Steve Jobs’ level speech, but if the product doesn’t work it won’t matter.

Becoming a Better Public Speaker

Public speaking is ranked as one of the most feared tasks to perform. However, I can tell you from experience that you can improve at public speaking quite easily. There are two things that I’ve done to become a better speaker:

  1. I am a member at a local Toastmaster group. Each week I attend a group meeting where I am able to practice getting up and talking in front of a group of people. By simply forcing myself to practice this skill consistently my public speaking ability has improved dramatically.
  2. Additionally I listen to one TED Talk each day. The TED conference lectures are given by some of the most skilled orators in the world. By listening to a new talk each day it has helped give me ideas of ways that I can craft my own speeches and it has helped to build a mental model for what makes a great speech.

The Importance Soft Skills

So now that you know the list. How important are developer soft skills? I can’t tell you how many times I’ve seen an inferior developer promoted to management simply based on their ability to speak well in meetings or converse with co-workers. Remember that the key to each of the skills on this list is that they help people feel more comfortable being around you and that they will be confident that you can get the job done. Likability and confidence are two key prerequisites you’ll need in order to gain an edge in the marketplace.


  • A Guide to Becoming a Better Writer: 15 Practical Tips:
  • The Design of Everyday Things
Soft Skills for Becoming More Appealing to Freelancers

We have discussed how you can market your freelance business on sites such as Upwork and And as great as those options are, they should only make up a small portion of your client acquisition strategy. In this guide I’m going to provide you with tips for organically growing a freelance business.

When I say organic, I mean that these are strategies that should work while you sleep. For example, I have had some of my largest clients contact me out of the blue based on them coming across a blog post or GitHub project I published.

Organically Growing a Freelance Business

Having an organic marketing strategy is key for building a sustainable business. And in my experience the marketing mechanisms that have been the most effective are the six I will discuss.

Referral Requests

Starting off the list are referral requests. Word of mouth marketing is one of the most powerful tools you can use for acquiring new clients.

Imagine a real world scenario of referrals. If someone opens up a new restaurant in your town, are you more likely to be influenced by the restaurant advertisements or one of your close friends telling you how great the food was? If you’re like me, if a friend sings the praises of the restaurant I’m going to value their opinion much more than an ad from the restaurant itself. The reasons for this is because I trust my friend more than the restaurant.

It works the same way when it comes to marketing yourself as a freelancer. If you have happy clients they can help grow your business.

Through the years I’ve had multiple clients refer their friends and colleagues to me. However I’ve also discovered that sometimes it helps to give them a little push. After you have successfully completed a project is a great time to ask a client if they have any friends that may need your services.


Next on the list of organic marketing strategies is blogging. I considered placing blogging at the top of the list because it’s such a powerful tool. Through the years I have been contacted by multiple clients that told me they found me via my blog and subsequently hired me.

Blogging is content marketing at its finest. With your blog you are able to showcase your skills, position yourself as an expert in the field, and give clients a taste of your personality.

If you have never blogged before and are wondering what type of content to write, here are some high level topics that have worked for me:

  • Tutorials showing how to build features I specialize in. For example, if you focus on building eCommerce websites you could write blog posts explaining how to connect an application to a payment gateway.
  • Soft skill strategies. For this you can write posts related to experiences you have had while learning how to become a freelancer. An example could be writing about a time when you had a challenging client and how you were able to work with them effectively. These types of posts have multiple benefits since they are effective for content marketing and also allow you to contribute to the freelancer community.

Expert Positioning

Blogging is a great way to position yourself as an expert. However writing blog posts is not the only way to be considered an expert. Another great way to accomplish this feat is to contribute to other blogs and news outlets. If you look at my personal site you’ll see that I’ve been interviewed or quoted in dozens of blogs and magazines through the years. These outlets include sites such as ReadWriteWeb and the magazine CIO.

HARO, which stands for Help A Reporter Out. HARO pairs individuals with reporters around the world. The way it works is that reporters can post requests on HARO asking for interviews or quotes on a topic they are researching. Each day I monitor HARO and when I see a topic that I am familiar with I’ll write up a few sentences and send them to the reporter.

Don’t let the expert moniker scare you away. There are many times where I am far from an expert in a field that I’ve been quoted in. However I’ll perform a little time researching a reporter’s question and then I’ll simply give my opinion.

This type of marketing is great because:

  • It’s free.
  • Credible reporters are the ones positioning you as an expert.
  • Many times the reporter will link back to your website, which helps from an SEO perspective.

Open Source Contribution

Next on the list of strategies for organically growing a freelance business is contributing to the open source community. When it comes to open source contributions there are a number of strategies that you can take:

  • Direct code contribution – this usually comes in the form of creating a code library that other developers can use. One of the more successful Rails development firms in the world, Thoughtbot, has take this approach to the extreme. The Thoughtbot team has built libraries such as FactoryGirl, Paperclip, and Administrate. These Ruby gems are some of the most popular gems in the Ruby development ecosystem and the Thoughtbot team released these libraries completely for free. However I can assure you that the company’s open source contributions have directly related to acquiring clients.
  • Tutorials – if you don’t feel that you’re quite ready for building a code library that other developers will use, that’s perfectly fine. You can find a feature that you feel comfortable developing and you can create a screencast in which you walk through your process for building the component.
  • Contributing to Pre-Existing Libraries – another great way to contribute to the open source community is to help add features or fix bugs on pre-existing code libraries. You can easily discover the full list of requested features for a code library by looking at its issue list on GitHub. By taking this approach you don’t have to worry about building a code library from scratch. You can simply add onto another app which helps the original development team and also will give you experience and confidence in working with professional code bases. Personally I contributed to multiple Eventbrite API RubyGems and built in functionality that previously didn’t exist.

Social Media Marketing

No post that discusses organically growing a freelance business would be complete without mentioning social media marketing. I have to admit that this is probably my least favorite marketing channel. If you peruse Twitter, Facebook or Instagram it seems like they are cluttered with annoying sales pitches. However I have been discovered by multiple clients via my social media accounts.

Each day I try to post a development picture on Instagram. And by taking this approach I have received a number of unsolicited project requests. And several of these requests have turned into freelance clients.

When it comes to social media marketing my recommendation is to find an outlet that you enjoy working with. And once you’ve picked your favorite channel, put all of your available energy into that specific service. This is important. Because if you pick out an outlet that you don’t like, you’re not going to want to post in it in a regular basis. And when it comes to social media marketing, consistency is a key to success.


In summary, when it comes to organically growing a freelance business I focus on three approaches. First, once you have happy clients work on getting them to refer you to their friends and colleagues. Next, make sure that you’re constantly blogging and positioning yourself as an expert in your space. And lastly, find a social media outlet that you enjoy working in and post in it daily.

Preview 19:57
+ Project Management for Freelancers
14 lectures 02:19:25

So far in this course we’ve walked through how to build your launch plan and how to acquire clients for your freelance business. However, in order for your business to be sustainable you’ll need to have a comprehensive plan for managing the projects that you work on. In this section we’re going to walk through:

  • How to Create Accurate Bids so that you can accurately predict how long projects are going to take and how much they should cost.
  • Next we’ll discuss how to Build a Requirements Doc for a projects.
  • We’ll also walk through the various Project Management software Options so that you can effectively manage projects.
  • I’ll walk through how to install and work with code version control to allow for you to remotely store code projects and keep a log of all the work you’ve performed.
  • Next I’ll explain how I leverage version control systems to Automate Client Updates
  • After that I’ll walk through how I create Product Demos for clients
  • I’ll also discuss how you can Manage Advanced Features, specifically addressing what to do when a client asks you to build a feature you’ve never created before.
  • Next I’ll explain how you can Define project success to ensure that every project you work on has a clear finish line.
  • Additionally I’ll describe the importance of Dodging Silver Bullets so that you can build projects that are scalable.
  • And lastly I’ll discuss a system for Managing outsourced developers for when you take on a project too large to build by yourself.
Preview 02:56

Being able to give good estimates is one of the most critical tasks you can do as a freelancer, if you quote too low you’ll end up with an angry customer because, even if you did great work, he’s having to pay more than he budgeted. And if you bid too high there’s a good chance you won’t get the job and the potential client will go to a competitor who gave a lower bid.

Through the years I’ve been guilty of erring on both sides of the spectrum and I’ve had to deal with the consequences, and they were not fun, which is why I’ve put together a formula that I follow for building bids.

  • Get a detailed drill down of the project requirements, without this you won’t be able to create an accurate bidno matter what else you do. Imagine if an architect had to give an estimate to a client who said, “I want a nice house with a cool fence”, he wouldn’t be able to accurately estimate how much the house would cost to build. An architect will get a detailed breakdown on: square footage, number of bedrooms, along with a list of all of the bells and whistles. In the same way you need a detailed breakdown of every feature that the application needs to have.
  • After you have the list of features, break them into categories, such as: database setup, front end design, user permission configurations, etc. and then put each of the features into one of the category ‘buckets’
  • Put all of the data into a spreadsheet segmented by the categories you created in step two.
  • Give a conservative estimate on each feature in the spreadsheet
  • Have the spreadsheet tally up the total hours or cost and that is the project estimate

Does that seem like common sense? Good, because creating accurate freelance bids should be a simple process. If you came up and asked me how long it would take to build a payroll system I wouldn’t have a clue what the bid should be. However I do know how long building a user database will take, and I know how long it will take to implement the design, etc. And by breaking down the project into small, specific chunks I’m now able to feel more confident about how long the individual features will take to build.

I also update the spreadsheet as I progress through the project. That way I’ll actually have a guide for future projects, for example if I originally estimated that building a video upload feature would take 8 hours but it ended up taking 14 hours I will be able to more accurately estimate that feature in future projects.

I hope that this has been a helpful guide for learning how to systematize your process for creating estimates as a freelancer. I’ve also attached a sample spreadsheet to the resource section of this post that you can use as a template for your own projects.

Freelancer Resources for Accurate Freelance Bids

Download sample spreadsheet

How to Create an Accurate Project Bid as a Freelancer

Imagine for a minute that you’re a freelance developer who was handed a new feature to build by a client. Then picture yourself building an elegant feature, all of the code working perfectly. You follow best practices and ensure that all of the potential edge case scenarios are covered. Now imagine that you’re demoing the bright and shiny new feature to the client. But instead of telling you that you’re the best developer in the world that they’re going to name their 1st child after you. They look at the application confused, because what you built didn’t match what they had in their mind at all.

This is a scenario that is played out all too often in the freelance development world. And in many cases it’s due to a poor requirement elicitation process.

The story I just mentioned is not a made up parable, it happened to me recently. And when I say recently I mean yesterday (at the time I wrote this).

My Name is Jordan and I Wrote a Poor Requirements Doc… “Hi Jordan…”

So what did I do wrong? The issue was caused by me rushing through the requirement elicitation phase. I have worked for this specific client for over 5 years and I got lazy confirming the exact set of requirements needed for the feature.

Freelance Requirement Elicitation

Let’s walk through what happened so you can avoid the same embarrassment and wasted time.

How it Started

A few weeks ago the client contacted me and said that an application I built for them needed a new feature. The application is an invoicing system that their drivers utilize to generate invoices for clients.

freelance requirement elicitation

In an email the client attached this spreadsheet. He said that the application had to generate this invoice to give to the customer.

The Build

To be 100% honest I was very proud of the work that I did. The feature was flawless and completely bug free. It also fit in perfectly with the rest of the application. I deployed the code to the staging server and I waited for the client to start showering me with praise… but the praise never happened.

The Problem

I emailed the client and gave a video demo of the feature. A few hours later I received an email from the client that said:

“I’m confused, what exactly is all of this? In my email I just meant that we need the invoices to be formatted like this spreadsheet.”

So it turned out that the client didn’t want a new module built into the application at all. Instead they simply wanted an additional format option for their invoices.

Who Was at Fault?

So who exactly was at fault? It may seem natural to put the blame on the client since they didn’t make their request clear at all. And I was tempted to get upset and blame them (especially for the first 10-20 seconds of my fury). But then I realized that this issue was completely within my control.

As freelancers it’s our job to manage each stage of a project. If we rush through the requirement elicitation phase, anything that happens after that stage will fall on us.

A Better Way

So how could this has been avoided? Let’s walk through the process I should have followed and which would have lead to a better outcome. For myself and the client.

Step 1

Right after getting the email I should have responded back to the client with clarification questions. Examples might have been:

  • Do you want this to be on a new page of the application? This is better than saying something like: Do you want this to be a new module? Because a non technical client isn’t going to know what a module is. But they will understand what a new page on the site is.
  • How will this interact with other parts of the website? This question would have instantly given me the feedback to know that this spreadsheet was simply meant to be a different invoice formatting option.
  • Can you describe the flow on how this will be generated? This is one of my favorite questions to ask because it forces the client to be explicit with how a new feature should work. Many times I’ll ask a client to create a PowerPoint slide deck showing the flow they want from a feature.

Step 2

After asking clarification questions I should have followed up with a prototype. I could use a tool like ###a href="" target="_blank">InVision or even a simple PowerPoint deck where each slide held a different page of the proposed new feature. Examples would be:

  • Starting with slide 1 – Here is where you can click on a button to get to the new page.
  • On slide 2 – I’d show the form page where the user would enter the information.
  • Lastly on slide 3 – I would show the invoice that was generated by the new feature.

A Better Ending

If I would have followed these two steps it would have taken me anywhere from few minutes to a hours to establish what feature was actually needed. As you can imagine this is a much better option compared with wasting weeks of development time.


I hope that this has been a helpful guide to freelance requirement elicitation. And that you’ll be able to learn from my mistake and apply it to your own business.

Feature Requirement Elicitation Process

In preparing for this post I went through some directories that listed all of the known project management software applications on the market. To be 100% honest, I was a bit shocked. There are literally thousands of project management options available to freelancers. Thankfully I’ve been able to work for a number of clients and worked with various project management apps through the years. For this post I want to give you a list of the top project management tools along with their respective strengths and weaknesses. With this knowledge you can decide on which one is the best fit for your project and freelance business.

The following are six of the top project management tools that I’ve used. I’ve probably used around a dozen tools, however I only wanted to list applications that:

  1. I had actually used on production projects.
  2. I had a good experience with and that I’d recommend to others.

Top Project Management Tools


Top Project Management Tools

My favorite application for project management is Basecamp. I’m probably partial to it since its founder, David Heinemeier Hansen, also happens to be the creator of the Ruby on Rails framework that I use daily. With that being said, Basecamp has a clean interface focused around todos and messaging. Here is a set of the todos assigned to me and various devCamp team members right now:

Top Project Management Tools

In addition to project management I also use Basecamp as my daily planner. Essentially I move each of my todos from one day to another. I like how I can have a number of my projects and their respective todo lists all shown on one page, as shown here:

Top Project Management Tools

Top Project Management Tools

For the negatives to using Basecamp, depending on your prior experience with project management software, Basecamp may not feel very natural. If you’re used to dashboards based on gannt charts and similar tracking mechanisms, Basecamp will take some getting used to. It does have the ability to have all of those features via their add on module, however at its core Basecamp focuses more on messaging between team members, todo lists, and scheduling.

Basecamp also doesn’t have the best suite of mobile options, I have its iOS app on my phone, however it’s not the most intuitive, especially when compared with a few of its competitors such as Trello.

With that being said, Basecamp is still my go to choice when it comes to project management software due to its simplicity, speed and because I’m drawn to its to do list structure.


Top Project Management Tools

Trello essentially gives you a virtual kanban board and lets you move tasks through each stage of the product development lifecycle. For example, here in the image I would move a task from being a ‘to-do’, to being ‘assigned’, to ‘working’, to ‘under review’, and finally to ‘finished’.

Top Project Management Tools

This approach makes it straightforward to visualize each each task that’s assigned to you and it also has a good interface for managing a team of developers.

Top Project Management Tools

I also like how you can add images and attachments to tasks, which lets you encapsulate all of a task’s conversations, data, and statuses in a single screen.

Another bonus that Trello offers is that it works nicely on smartphones and tablets, so it’s easy to track the progress of applications when you’re not at your desk.

Trello has worked great for me on small to medium sized projects, however for large projects or complex applications I’ll usually opt for Basecamp or the next one on the list: LeanKit.


Top Project Management Tools

When I was managing an entire IT organization, LeanKit was the software I went with for tracking the projects that were being worked on. It doesn’t have the attractive user interface that Trello offers and it takes longer to learn. However it worked quite well for me when I was managing very large scale projects, such as enterprise application rollouts to 800+ employees.

Much like Trello, LeanKit utilizes the kanban strategy of project management, however it focuses more on enterprises compared with smaller teams. The mobile and tablet applications offered by LeanKit were intuitive and helped me to manage projects even when I was traveling, which was a nice bonus.

LeanKit’s strength is in how well it allows you to nest and organize projects and subprojects. After you’ve learned how the system works it’s relatively straightforward to manage large teams.

One of the biggest negatives of LeanKit was something that I considered very odd. They have a pretty archaic method for payment that requires quite a bit of manual work. I remember times where I was forced to contact the company via email simply to add new users to our account plan. This wasn’t a deal killer for me, however it does make it a poor choice for freelancers who want to work multiple projects from the same account.


Top Project Management Tools

ProWorkflow is one of the more standard project management options on this list of top project management tools. It does a good job of combining features such as: timelines, task management, and working with teams.

I only worked one project that utilized ProWorkflow, however it was a good experience and I didn’t have any complaints with using the software.


Top Project Management Tools

I have a bit of a love/hate relationship with Wrike as a project management tool. If you’re managing a team of developers Wrike is a great application to use. As a project manager you’re able to use it to see the status of each project along with detailed analytics for every task that is being worked on.

However if you are a developer working on Wrike there is a pretty steep learning curve. I would like to think that I’m pretty adept at understanding how to use a new piece of software. However I kept getting lost in Wrike’s dashboard and had a difficult time finding where to post updates to clients. Eventually I asked the client to go through a screen sharing session where we walked through each dashboard that I would use.

With all of that being said, Wrike is a good option if you’re managing a team of freelancers on multiple projects and that’s why I put it on this list.


Top Project Management Tools

This may seem like an odd option to put on a list of top project management tools since technically GitHub doesn’t market itself as project management software. However when I’m working on a project that only has developers I’ve found that using GitHub’s issue tracking module doubles as a project management tool. And it makes sense since some of the largest frameworks and languages are open sourced projects that base all of the tasks on issues and features that can be easily tracked on GitHub.

Top Project Management Tools

As you can see in this screenshot of a specific issue you’re able to:

  • Create issues, which can also be features
  • Assign users to each task
  • Add links and images via the Markdown syntax
  • Mark the issue as being completed

Additionally, with an experienced development team, using GitHub to manage a project has the added benefit of making task management efficient. For example, developers can close tasks automatically based on git commits. And the easier you make a piece of software to use, the more development teams are going to like it.

I hope that this has been a helpful list of the top project management tools that you can use in your development projects and that it will help you decide on what software to use on your next project!

Project Management Application Tools for Freelancers

In this guide I discuss the importance of using Git on freelance projects, including how it can be used when working with teams and automating version management.

Introduction to Using Git to Manage Freelance Projects

If you're new to development, the idea of version control may seem like a scary topic. All those terminal commands... But don't let the command line interface scare you away. When I started freelancing, the most popular version control system that's used today, git, hadn't even been invented!

While the world of version control may seem vast, you can learn 95% of the commands that you'll need each day in a few minutes.

Guide to Version Control

guide to version control

So what is version control? It's a pretty explicit name. To put it simply version control gives you the ability to designate specific versions for your code projects.

So the best way to think about it is that each new feature of your application should have its own version.

This gives you the ability to designate specific points in time where features were deployed to your application. Some examples of versions could be:

  • Integrated authentication to allow for user registration, sign in and log out features.
  • Built out permission structure to block non admin users from management dashboard.

Using Git

There are a number of version control systems on the market. However the top choice for most developers is git. The git version control system was created in 2005 by Linus Torvalds, the creator of Linux.

At a high level git gives developers a clean interface for managing versions of codebases.

A World Without Version Control

In a world without version control life would be pretty frustrating. I remember back when I started building programs without version control. Each time I made a significant change I'd have to create a duplicate code file in case the change I made broke the site and I had to quickly switch back to the old implementation.

This approach to development was clunky and was lead to fragile applications. After I learned about version control it opened a completely new world to me and I haven't looked back. When you use version control properly it will allow you to feel more confident with your development because you'll know that you can always revert back to an old version if you make a mistake.

Surfing and Version Control

guide to version control

When I started integrating version control into my projects it reminded me of when I learned how to surf. When I first learned how to surf I simply jumped into the waves with a surf board. Every time I crashed I freaked out because the surf board would float away and I would have to furiously swim after it.

However after a few times on the water I noticed that all of the other surfers has straps that connected their ankles to the board. After I bought one of the straps I never had to worry about the board floating away because I could always bring it back with a tug.

You can think of version control as your surf board ankle strap. No matter what change you make in your project, you're always only a few commands away from reverting back to a working version. This type of capability should make you feel more confident when it comes to building new features

Terms to Know

Some of the key terms to know when it comes to understanding version control are:

  • Master Branch - The master branch is the code branch that is considered the live branch. You shouldn't push to the live branch until your feature is ready for the public to see it.
  • Development Branch - You also have the ability to create development branches. These branches allow you to build full features that you can create outside of the view of end users.
  • Commit - A commit describes the work that you do on specific features. Commits can be smaller than branches. For example, a branch called permission structure can have multiple commit messages, such as:
    • Installed code library to manage application permissions.
    • Built custom rules for guest users
    • Blocked non admin users from editing accounts
  • Merge - After you have built a full feature you can merge a development branch into the master branch. After deploying this will allow users to use the new feature.
  • Add - After you have performed work you need to add each of the changes into version control so it knows what changes to include in the version update.
  • git ignore - You have the ability ignore any files that you don't want checked into version control. This is important because certain files, such as any files that contain API credentials should not be pushed to version control.

How to Use GitHub

In this video we walk you through how to use Git, including:

  • Building a project from scratch
  • Using commit messages
  • Working with a remote GitHub
  • Creating git development branches

GitHub Isn't Git!

As a side note, please don't confuse git with GitHub. The GitHub website is a great service that allows developers to remotely manage code projects. And it integrates nicely with git. However they are completely separate entities.

Remote Version Control Options

When it comes to working with centrally located git systems the two services I use the most are GitHub and BitBucket.  Both services offer similar features. However I personally prefer GitHub simply due to its clean interface and the fact I'm more comfortable with using it.

Summary Guide to Version Control

I hope that this has been a helpful guide to git and that you feel ready to start implementing it into your application.

How to Use GitHub Part 1 of 2

If you're new to development, the idea of version control may seem like a scary topic. All those terminal commands... But don't let the command line interface scare you away. When I started freelancing, the most popular version control system that's used today, git, hadn't even been invented!

While the world of version control may seem vast, you can learn 95% of the commands that you'll need each day in a few minutes.

Guide to Version Control

guide to version control

So what is version control? It's a pretty explicit name. To put it simply version control gives you the ability to designate specific versions for your code projects.

So the best way to think about it is that each new feature of your application should have its own version.

This gives you the ability to designate specific points in time where features were deployed to your application. Some examples of versions could be:

  • Integrated authentication to allow for user registration, sign in and log out features.
  • Built out permission structure to block non admin users from management dashboard.

Using Git

There are a number of version control systems on the market. However the top choice for most developers is git. The git version control system was created in 2005 by Linus Torvalds, the creator of Linux.

At a high level git gives developers a clean interface for managing versions of codebases.

A World Without Version Control

In a world without version control life would be pretty frustrating. I remember back when I started building programs without version control. Each time I made a significant change I'd have to create a duplicate code file in case the change I made broke the site and I had to quickly switch back to the old implementation.

This approach to development was clunky and was lead to fragile applications. After I learned about version control it opened a completely new world to me and I haven't looked back. When you use version control properly it will allow you to feel more confident with your development because you'll know that you can always revert back to an old version if you make a mistake.

Surfing and Version Control

guide to version control

When I started integrating version control into my projects it reminded me of when I learned how to surf. When I first learned how to surf I simply jumped into the waves with a surf board. Every time I crashed I freaked out because the surf board would float away and I would have to furiously swim after it.

However after a few times on the water I noticed that all of the other surfers has straps that connected their ankles to the board. After I bought one of the straps I never had to worry about the board floating away because I could always bring it back with a tug.

You can think of version control as your surf board ankle strap. No matter what change you make in your project, you're always only a few commands away from reverting back to a working version. This type of capability should make you feel more confident when it comes to building new features

Terms to Know

Some of the key terms to know when it comes to understanding version control are:

  • Master Branch - The master branch is the code branch that is considered the live branch. You shouldn't push to the live branch until your feature is ready for the public to see it.
  • Development Branch - You also have the ability to create development branches. These branches allow you to build full features that you can create outside of the view of end users.
  • Commit - A commit describes the work that you do on specific features. Commits can be smaller than branches. For example, a branch called permission structure can have multiple commit messages, such as:
    • Installed code library to manage application permissions.
    • Built custom rules for guest users
    • Blocked non admin users from editing accounts
  • Merge - After you have built a full feature you can merge a development branch into the master branch. After deploying this will allow users to use the new feature.
  • Add - After you have performed work you need to add each of the changes into version control so it knows what changes to include in the version update.
  • git ignore - You have the ability ignore any files that you don't want checked into version control. This is important because certain files, such as any files that contain API credentials should not be pushed to version control.

How to Use GitHub

In this video we walk you through how to use Git, including:

  • Building a project from scratch
  • Using commit messages
  • Working with a remote GitHub
  • Creating git development branches

GitHub Isn't Git!

As a side note, please don't confuse git with GitHub. The GitHub website is a great service that allows developers to remotely manage code projects. And it integrates nicely with git. However they are completely separate entities.

Remote Version Control Options

When it comes to working with centrally located git systems the two services I use the most are GitHub and BitBucket.  Both services offer similar features. However I personally prefer GitHub simply due to its clean interface and the fact I'm more comfortable with using it.

Summary Guide to Version Control

I hope that this has been a helpful guide to git and that you feel ready to start implementing it into your application.

How to Use GitHub Part 2 of 2

If you have limited freelancing experience, it may surprise you to discover that a significant portion of a developer’s day is spent detailing the work performed for that day. In this guide I’m going to walk through automating client updates so that you can be as efficient as possible.

Importance of Daily Updates

Before diving into how we can automate updates to clients, let’s discuss what a proper update is and what it entails.

An update is a message sent to a client, usually every day or at least every day that you’re working on the client’s project. The days are long gone where clients would hire a freelancer and the developer would disappear for a few months until they brought back a finished product.

Nowadays clients want to have a transparent view of the work performed. This is especially true if a client is paying you on an hourly basis. This makes sense because if you hired someone and paid them for their time, wouldn’t you want to know how the time was spent?

Regular and explicit updates are also an important way that you can distinguish yourself from offshore development teams. Over the years I’ve worked with development teams across the world. And the number one issue I constantly had with them was finding out what they did each day.

So if you can give a transparent view into the work that you perform for a client it can give you an edge over cheaper, offshore freelancers.

Example Client Update

So what does a good daily update look like? Here is one I took from a real world client update:

  • Integrated css fix for the location widget
  • Continued working on bug fix for the well on the right side of the page
  • Updated css for the locations widget on the city pages
  • Integrated the checker for posts on the city specific show pages
  • Updated sign up buttons
  • Temporarily hide sponsor text
  • Implemented changes to the contact us text
  • Implemented custom sub division with master division annotation for the forms
  • Updated the edit label on the post show view

Notice how these updates are practical and informative. None of the items are too technical, since overly technical updates would simply confuse clients.

Automating Client Updates

So we’ve established that client updates are important and we know what a good client update looks like. However if we have to type these updates in from scratch every day for multiple clients it would tally up to quite a bit of time.

I’m not a fan of wasting time and I doubt you are either. Which poises a dilemma:

  1. We need to created detailed updates of all the work we do each day.
  2. But we don’t want to waste time writing reports (and isn’t our hatred of writing boring reports what made us want to become freelancers in the first place?!)

Whenever I come across a situation like this I try to see if there is any way that I can automate a boring task. Thankfully there is.

Version Control to the Rescue

In the beginning I was writing out all of the daily updated manually. However if I wrote them at the end of the day I had to go back through all of my GitHub commit messages to reference the work that I did.

After going through this process for a while it dawned on me that if I simply added a little more detail to my GitHub updates I could simply copy and paste them each day and I wouldn’t have to write them from scratch again.

This process ended up saving me a considerable amount of time each day because for best practice reasons I had already been writing GitHub commit messages for each new feature I implemented. So now I am able to remove the duplicate work I had been doing.

Here is a screenshot of a GitHub project where I used the technique of leveraging commit messages for automating client updates.

automating client updates


I hope that this has been a helpful guide for automating client updates. And that you can leverage it with your own clients.

Preview 06:03

So you have a freelance client and you’re ready to show off your work… But how can you showcase a project when you work remotely? If the entire application is completed you could simply send the client a link to test it out. However it’s been my experience that this approach is not a great idea. As the designer or developer you know the inner workings of the app. The client on the other hand, especially if they’re of the non-technical variety, will stumble through testing the application out.

Even if you did a great job on the project, if the client doesn’t know how to use the software they’re not going to be happy with your work.

Why Proper Demonstrations are Important

Through the years I’ve discovered that well thought out demonstrations are a key to successful projects. There are two main reasons for this:

  1. A proper demo will let you control the flow of the app. You can control the focus of the work and spend time showcasing how the system works. This will essentially function as a tutorial for the client of the app. A well organized demo will educate the client on the application and remove many of the common issues related to user experience confusion.

  2. You will get practical feedback. No matter how well you think you understood the client requirements, there will always been misunderstandings, especially early on in the development process. Thankfully, if you put together a proper demonstration of the software you can get a more clear view of the client’s vision. If you simply sent off a link to the app for the client to test, many of the feedback items they would send back would be related to not understanding how the system functions. However if you can clearly show how the app works it will shortcut this process and let you understand the actual fixes sooner.

Review of Services to Remotely Demo Work

There are a number of ways that you can remotely demo work for clients. I’m going to go through the processes I’ve used throughout the past few years and discuss when each option is ideal.


remotely demo work

The first option I’ll review is creating a screencast. This is a great option if there are a number of clients that will need to review the feature. At its core a screencast is you recording yourself walking through the application. If it’s a web based application you can have the video showcase each feature of the application. In the show notes I’ve included a link where you can see an actual screencast that I sent to a client where I give a project update.

If you review that video you’ll see that it walks through each of the new features that I added in the past few weeks. I use tools such as:

  • Zooming in to specific screen zones.

  • ###p

This process only takes a short period of time. However it is well worth it because it enables clients to have a tangible walk through of the system.

You can use a number of tools for recording screencasts. My personal favorite is Camtasia, however it is a little expensive. So if you are trying to keep a low budget there are countless free options, such as ScreenCast O Matic.

After you finish filming a screencast demo you can upload it to YouTube, Vimeo, or an video hosting site. From there you can have the client view the link at their convenience.

Remote Desktop

remotely demo work

Next on the list of tools to remotely demo work are remote desktop sessions. Every client is slightly different. Many clients are fine with email and video demonstrations. However other clients want more of a personal touch.

If a client likes to have full interaction with you during the demo, a remote desktop tool may be the best choice for showcasing your work. I have also found that this option is ideal when I’m working for other developers. This is mainly because remote desktop demos allow for pair programming.

There are a few different options when it comes to remote desktop tools:

  • GoToMeeting  – If your client wants to have a traditional live demonstration, services such as GoToMeeting or JoinMe work nicely. They will let clients view your screen and they also come with dedicated conference call lines if you’re working with multiple stakeholders.

  • Screen Sharing – There are times when you need the ability for you and a client to simultaneously walk through a demo. This is for the scenario I just mentioned where you’re working for a developer and he wants to be able to go through the app at the same time as you. My favorite service for this type of demo is ScreenHero. It offers an easy way to have multiple users control a screen at the same time and it’s pretty affordable.

  • Free options – If you’re on a budget there are a number of free screen sharing and remote desktop options. Some of the notable ones are Google Hangouts, TeamViewer, and Skype.


remotely demo work

Last on the list of tools to remotely demo work are PowerPoint type presentations. I say “type” because you don’t have to actually use PowerPoint. I’ve used PowerPoint, Google Slides, and Keynote for product demos. I like using slide based demos early on in the project development process. There are many times where I’ve built back end functionality that I wanted to confirm was configured properly. However I realized that if the client saw an ugly user interface they wouldn’t be able to appreciate the work that was performed.

So I took a play out of the Google Venture’s playbook and I created a Keynote slide deck. I designed the deck to mimic the user interface that I planned on eventually adding. From there I simply loaded the slides with the behavior I had built into the actual application. This approach worked quite well and the client was happy. More importantly this option let the client focus on what I had built as opposed to requirements that were still on the todo list.

This option also works quite well for mobile app demonstrations. Mobile apps are pretty complex for clients to demo on their phones. So a slide based approach makes it possible to show an app’s design and behavior in a more efficient manner.


I hope that this has been a helpful freelance guide and will help you remotely demo work for clients.

Show Notes

  • Example screencast of project update -
How to Remotely Demo Work for Freelance Clients

One issue that every freelancer comes across at some time or another is managing advanced features. And by advanced features I mean that a client asks you to build functionality that you’ve never built before.

When this happens to you. Notice that I said when and not if? That’s because every freelancer, no matter how experienced, has been asked to build something they’ve never created before.

Managing Advanced Features

Through the years I’ve been asked to build a wide range of features. Some of them I had experience with, and others… not so much.

A good example of this was a number of years ago when I was asked to build out a GPS tracking iPhone app. The client wanted to track their employees in the field and allow them to remotely submit tickets. Sounds like a great idea, right? I thought so too. There were just a couple of issues:

  1. At the time I hadn’t built a single mobile application, much less a production app.

  2. My experience with real time GPS tracking was minimal.

Due to my lack of experience, my first thought was to pass on the project. However, the client was a Fortune 500 company and at the time I did have long term plans on building out my mobile portfolio. Not to mention that the job paid well over $100,000. With these factors in mind I took the offer.

The Talent Pool

Now I would have be mentally insane if I thought I could build an application like they requested by myself. With zero experience and no domain expertise in mobile apps the project would have died before it even started. Therefore, as soon as I signed the contract I searched Upwork for a mobile specialist to help build the application.

I found a great iOS developer and we agreed on a mutally beneficial contract where I would manage the client he would build out the application. This was a foreign concept to me since all of the other projects I worked on were ones where I built out 100% of the functionality. However, if you decide to take on projects that you have limited expertise in, partnering with other developers is a great way to expand into new markets.

The Process

The application development process was different than any I had ever experienced before. I was used to working on every component of a client application. However for this application I limited my work to the web API development. This allowed me to work with the mobile dev on a daily basis and after around six months we completed the project.

As a controlling person I found the process challenging on a number of levels. The main issue I ran into was due to feature scheduling. Since the mobile developer was remote, I had to work with his schedule. There were a number of times when this caused issues because I would have an API component completed and I had to wait until he completed a mobile feature. And vise versa.

However, after switching to a Kanban project management board (we discussed Kanban boards in the project management guide) we were able to schedule our tasks in a more organized manner.


To review Kanban boards, remember that they are a project management system where you have a number of columns designated as:

  • Pending

  • Working

  • Under review

  • Completed

We organized each of our tasks into each of these columns. And from that point we were both able to see what features needed to be worked on. Being able to see the stage for each component allowed us to move forward in a more organized fashion than when we were working independently.

The Result

After a number of sleepless nights and few frustrated back and forth emails we finished the project. And not only was the project a success, the application has processed tens of millions of dollars worth of tickets and is still used to this day by one of the world’s largest energy companies.


So when a client asks you to build a feature that you have zero experience with, my advice is to partner with a specialist in that area. The example I gave in this guide was specific to situations where a freelancer has literally no experience building a feature. There have also been times where I was asked to build a feature I had experience with, but I wasn’t comfortable committing to building a production application. In those cases I hired a mentor to answer questions that I had during the development process, and those projects turned out quite well. And they had the added bonus of teaching me how to build advanced features I had limited experience with.

In summary, when it comes to managing advanced features for clients, don’t let your lack of experience stop you from getting jobs. As a freelancer you have access to a nearly limitless supply of resources to help you build any project.

A Caveat

Before you go out and take on a dozen jobs that you have no clue how to build, let me add a word of caution. I have seen freelancers and even large software development agencies take the approach of believing that they can simply hire outsourcers to do all of their work for them. This approach will fail every time. In order to work with outside contractors you need to work with them daily. Did you notice how one of the prerequisites to the mobile application I worked on in this guide was that I had a clear communication channel with the mobile developer?

If I would have simply sent him a list of requirements and waited for the finished product the project would have failed miserably. Working with contractors is typically just as time consuming as writing the code yourself. So don’t think that outside contractors are a magic bullet that will do all of your work for you.

Freelance Guide to Managing Advanced Features

When it comes to freelancing, defining project success is a surprisingly challenging task.

Defining Project Success

A Clear End

defining project success

Imagine that you’re competing in a marathon. When do you know it’s the right time to stop running? For me, it’s when I cross the finish line. It seems borderline insane to picture running a race without knowing where the finish line is, so why do so many freelancers work on projects without a clear concept of completion?

If you don’t establish mutually agreed upon project completion criteria with a client, you may find yourself subject to scope creep.

What is scope creep?

defining project success

Scope creep in a project is when a client asks for changes in the application that exceed the original set of features. Many times the client doesn’t do this on purpose. A normal progression is for a client to see the development progress and then realize that they forgot a “key” feature.

When scope creep isn’t scope creep

There are times when the right thing to do is incorporate the feature they’re asking for. I can think of examples where the client hadn’t listed a specific feature. But the feature was truly necessary and required by pure common sense.

Recently I headed up the development of an iOS project where the client didn’t specify that a push notification needed to be directed to a post. After the application was completed the client was frustrated that the system didn’t have dynamic and clickable push notifications. I could have pointed to the fact that they never asked for the feature. However in my mind the behavior was a common sense feature, so I had it added for no extra cost to the client.

When scope creep goes badly

Scope creep is rarely that easy. You’ll discover that typically clients will come up with new ideas and then try to get you to implement them for free. If you haven’t established a clear definition for project success you’ll end up with an angry client who thinks that you’re trying to over charge him. Remember that in the client’s mind they may not realize that they’re asking for a feature outside of the original set of requirements.

There are two ways for defining project success. And we’ll walk through both of them.

Based on Requirements

First and foremost is the traditional approach, which is based on a set of requirements. This approach is ok, however it rarely works in the real world.

This process goes through the following workflow:

  1. Write out a comprehensive set of project requirements.

  2. The requirements sound something like: user should be able to login.

  3. Each feature has its own requirement

  4. Once all the requirements are implemented, the project is considered complete.

Theoretically this seems like a great plan. However in real world projects it rarely works. The issue is mainly that even the most experienced developer or project manager won’t be able to list every… single… little feature. What will happen is that features will be missed. And when they are either you or the client is going to have to compromise to get the project completed.

Based on a Story

So if defining project success based on requirements isn’t practical, what’s a better approach? Personally I have had the most success by building easy to follow application stories.

What is an application story? Let’s take a look at one I wrote for a recent project:

When an admin user logs into the application she will be shown a custom dashboard that renders all of the projects that she manages. From there she can edit project details. She also can navigate to the resource section, user management dashboard, and user audit log.

Notice how a story is different from a set of requirements? When clients are presented with stories it is easier for them to visualize the final product. This leads to them supplying you with the full set of required behavior in the beginning, instead of at the end.

Lastly, well constructed user stories give you a clear definition of project success. Are the stories functioning properly? Then the project is completed, it’s that easy.

The Sign Off

After the client has approved the full set of application stories, make sure to get a formal sign off from the client. Typically this means having them sign a document that contains all of the stories. This provides a practical agreement that you can point to when all of the features have been implemented.


I hope that this has been a helpful guide for defining project success as a freelancer and that you can use this approach on your next project.

Defining Project Success as a Freelance Developer

When it comes to working on client projects I’ve worked on applications ranging from apps that I could build in a few days to applications that have taken over a year of development time and involved over a dozen different developers. So what the best way to work with outsourced web developers? Whenever I have a large project that requires a development team that I need to bring onboard it presents a series of challenges, such as: do the programmers specialize in the features that need to be built out, will bringing on other developers allow the project to stay on budget, how can I make sure that the code quality meets the client expectations?

I could pretend that the outsource web developers I’ve worked with were managed properly for every project, but that would be a horrible lie. In fact I got the idea for this post based on the many times that I’ve had poor experiences managing development teams.

Based on my mixed experiences in managing outsource web developers, I’ve built the following system for ensuring that I have picked the right set of developers and that they are producing code that will help make clients happy.

System for Managing Outsource Web Developers

  • Automated testing – whether you working by yourself or with outsourced developers it’s vital that you use automated testing. This can include behavior driven development or unit testing. However this process will help to ensure that all of the features of an application are working and also that new features do not break pre-existing functionality.
  • Daily Reports – depending on the situation that you have with your clients, it’s important that you receive daily reports on the development work performed for that day. If you’re not getting daily updates there is a good chance that no work was performed.

  • Access to applications – If you happen to only be managing the application and not actually developing, make sure that you have proper access. This includes: command line database access, your public keys on the server that the application is being deployed on, and any error logging system such as HoneyBadger or AppSignal.

If you’re bringing on an outsourced development team it typically means that your time is limited, however if you follow these three steps it should help your project to be successful.

Some of the tools that I use to manage development teams are:

Managing Outsourced Developers

Does the idea of a code library fulfilling a significant portion of a freelance project sound appealing? It’s ok, you can be honest and say ‘yes’. When I started out on my freelance journey, any time I came across a large feature request the first task I’d do was check to see if there was a code library that took care of the requirement. In the development world, code libraries like these are called silver bullets.

However, as appealing as it may sound for a plugin or library to take care of the lion share of a project, it’s been my experience that this approach ends up taking longer to implement than simply building the components from scratch.

The Problem with Silver Bullets

Let’s start off with a practical case study. A few years ago I took on a fleet management project. The set of requirements included features such as:

  • Having full CRUD capabilities for a number of database tables.

  • Creating a search engine that could search through various attributes of each database table.

  • The ability to use filters to drill down data.

  • Edit/Delete records

After starting the project I started to research code libraries that would work as silver bullets and take care of the key features. After a few days I came across the RubyGem called rails admin. The ###a href="">rails admin gem is pretty impressive. It includes features such as:

  • Easily querying database tables

  • Implement custom filters for running advanced queries

  • Export records to Excel/CSV

  • Add new records from the dashboard

  • Edit/Delete records

As you may have noticed, this code library looks like it fits nicely with the set of requirements for the project I had.

Silver Bullet Customization

I quickly went to work building out the application. And I integrated the rails admin gem as a cornerstone component of the project. The client was ecstatic during the demo. They absolutely love the application and they were shocked I was able to build the app so quickly.

So what was the problem? The issues started when the client started to ask for new features. After testing the application out for a few weeks they came back with feature requests such as:

  • Being able to save common queries.

  • Export out to rare file formats that worked with their accounting system.

  • Integrate a tax API to calculate depreciation.

Each of these new features are relatively common requests for a fleet management system. There was just one problem. Because I built the entire application around the rails admin code library I was limited to the features that the gem offered. And this was a problem because rails admin turned out to be incredibly difficult to modify.

In fact, after several weeks of tedious work I came to the conclusion that it would take less time to build the entire system from scratch as opposed to customizing the gem itself. So the end result was that I wasted quite a bit of time and the project was delayed. All because I thought a single silver bullet code library was going to be able to take care of a significant portion of the application.

Become a Sharp Shooter with Code Libraries

So does this mean that I’m suggesting that you stay away from code libraries entirely? No, not at all! Part of the reason why freelancing is possible (and affordable for clients) is that you don’t have to create 100% of an app’s functionality from scratch.

Instead I’ve learned to be selective about the code libraries that I integrate. Let’s look at a couple of the code libraries that I regularly use on projects:

  • Pundit for building a permission structure. Pundit is a lightweight code library that is easy to customize and doesn’t lock you into a narrow set of permission features.

  • Devise for authentication. Writing an authentication system from scratch is time consuming. The Devise gem allows Rails developers to quickly integrate features such as: registration, login, logout, and advanced components such as secure password retrieval. Additionally, Devise is customizable and I’ve rarely run into a situation where it didn’t work for an app’s requirements.

Do you notice how these code libraries operate like helper libraries for specific features? My rule for integrating code libraries into projects is that I pick out packages that assist with small elements of a project. And I shy away from silver bullets that promise to take care of large portions of a project’s functionality, but are difficult to customize.

Dodging Silver Bullets as a Freelancer

During the early stages of a project’s development it’s traditional to build a prototype. Typically it’s smart to create a prototype to ensure that your perception of the project matches the clients. In this guide I’m going to walk through the top developer prototyping tools on the market.

There are literally hundreds of applications to help you build prototype apps. This post would take a few days to give each of them a review. Therefore I’m instead going to discuss the tools that I use for the projects I work on.

Also, I’m not going to only list services that are defined as prototyping tools. By definition a prototype is anything that visually illustrates to stakeholders how an app will look and/or behave. With this in mind I’m going to walk through the tools that I use to serve this purpose. And that I’ve had the best experience working with.

Top Developer Prototyping Tools


top developer prototyping tools

Starting off the list of the top developer prototyping tools is InVision. If you’re familiar with the design space you may have already used InVision. The service has been a market leader for quite a while and for very good reason.


  • Upload Photoshop files to show a design.

  • Add in the sections where users can interact with the designs. This may include features such as clicking on a button or sliding your finger across a portion of the screen.

  • Share the prototype with project stakeholders so they can test it on their own computers and phones.

When I started as a developer years ago, these types of tools didn’t exist. In order to build a prototype I would build an application with minimal backend functionality. This process would takes days or even weeks depending on the complexity of the project.

However, thanks to tools like InVision I’m now able to create a working prototype in a few hours. And clients are then able to review the entire system and give feedback.

InVision is great with web based designs, but where I find it the most helpful is with mobile projects. Giving clients the ability to play with a prototype on their phone that acts like a real app is truly helpful.

Lay Out It

top developer prototyping tools

Next on the list is a service called Lay Out It. This service is a code based website that generates full Bootstrap themed code. Therefore Lay Out It is only useful if your web application utilizes the Twitter Bootstrap design framework.

Many of the apps that I build utilize Bootstrap, especially during the early stages of development. With that being the case I’ve found myself using this tool on a regular basis.

top developer prototyping tools

Lay Out It lets you drag and drop web app elements and when you’re done it will generate the HTML code that you can paste into your application.

Technically, this type of service wouldn’t be considered a prototyping tool. However I’ve come to use it so often that I wanted to include it so that you can take advantage of it on your projects.

Explain Everything iPad App

top developer prototyping tools

Next on the list of the top developer prototyping tools is the Explain Everything iPad App. Many of the applications that I build are microservice based API applications. These types of apps are difficult to show to clients without walking them through the code itself.

Therefore I like to use the Explain Everything app so that I can literally draw out the software functionality. Explain Everything allows me to:

  • Record my voice.

  • Draw on the screen.

  • Record the full session as a video screencast.

  • Share the screencast with stakeholders.

This type of prototyping tool is great when you need to be able to describe a piece of functionality that is 100% on the backend. With that being said this may not be the best selection if your project has a user interface, so keep that in mind.


top developer prototyping tools

Fourth on the list is using a slide based tool such as PowerPoint or Keynote. In the book Sprint, the authors explain how the Google Ventures team utilizes slide based prototypes extensively.

In the book they explain that building a functional prototype in a few days is not always practical. However it is possible to mimic an application’s functionality if you’re creative with slides.

In a slide based prototype you can perform tasks such as:

  • Showcasing a design.

  • Include animations, such as the ones you’d see in iPad applications.

  • Walk through a logical progression for how the project will function.

Another bonus to using a slide based prototyping system is that there are a number of free options available. If you’re on a tight budget and can’t afford a professional prototyping service, this may be a great option. The top three slide services I’ve used are: PowerPoint, Keynote, and Google Slides.


top developer prototyping tools

Last on this list of top developer prototyping tools is the Marvel app. Don’t get this confused with the comic book company. Marvel is a great tool that lets you build fully functional prototypes with a strong focus on smartphone apps.

If you are a mobile developer and need to showcase an iOS or Android app prototype to clients I’d recommend that you check Marvel out. You’ll discover that it’s very similar to InVision, however it’s always nice to have alternative options to look at.

A Word of Warning for Prototypes

Before this post ends I want to offer a word of warning. Building great prototypes is an important stage in a project’s lifecycle. However please make sure that clients are completely aware that a prototype is simply a design.

When I was new to freelancing I’d be excited whenever I had created a great looking prototype and I’d send it off to the client. The clients would love to see and play with the system, but there was a negative side effect. Non technical clients will many times confuse a well constructed prototype with the finished app.

I had a number of times where clients got frustrated after seeing the prototype when I would tell them that the actual app was still a few months off from being completed.

So please take care to always inform your clients that the prototype is simply a non-functional mock up. And that the majority of the development still needs to be completed.


I hope that this has been a helpful guide to the top developer prototyping tools on the market. Please let me know in the comment section of any tools that you’ve had a good experience using. And good luck with the coding!

Freelancer Prototyping Tools
+ Testing Freelance Projects
3 lectures 23:06

In this section we'll cover various processes you can follow in order to ensure that your projects follow freelance best practices, including:

  • How to use TDD.
  • How to generate automated reports that analyze code quality standards for a project.
Preview 01:26

When approaching a new freelance project, one of the first questions many developers and designers ask is:

Do you want it done fast… or properly?

In this guide I’m going to specifically discuss the topic of whether or not you should use TDD on freelance projects. However the concepts I’ll discuss today apply to any type of quality control system.

Quality vs Speed

tdd on freelance projects

There’s an old software engineering rule that states that there are three options you have when building a project:

  1. Quality

  2. Speed

  3. Cost

This diagram represents this rule as a venn diagram. The elusive center is where you have a project that’s built quickly, for a low price, and was created with industry wide best practices.

In my experience it’s rare for a project to reside inside of this sweet spot. Instead I’ll tell clients that they can pick two out of the three. For example:

  • You can have the project built properly for a low cost, however it’s going to take quite a while to develop. This is because the project will need to sit on the back burner since higher paying projects will need to take precedence.

  • Alternatively the project can be built quickly at a low cost. However this approach won’t allow for the time needed to follow best practices, such as building automated tests into the application. I rarely offer this option to clients because it’s too tempting for them and I’ve seen from experience that these projects always end badly.

TDD on Freelance Projects

In this guide I selected the concept of test driven development (TDD) as a measurement of project quality for one key reason. Every time that I’ve been handed a messy legacy project to work on, there is always one common characteristic that they share:

The code doesn’t have a comprehensive test suite.

On the other hand, whenever I start working on a quality application I’ve discovered that these projects pretty much always have solid test coverage.

So I’m not saying that a full test suite is required for a project to be considered a quality product. However in my experience tests seem to be a key indicator that determines how well an application was built.

Making the Decision

So when you are embarking on a new project how should you decide on whether or not to use TDD?

Giving No Choice

I know plenty of developers who simply do not give clients a choice in the matter. All code that they write will be tested, period and full stop. This helps make the decision process more straightforward. This is the approach I take now, but that’s only because I now have the ability to be more picky when it comes to the clients I take on.

However if you are new to freelancing and you need clients it can be difficult to tell a client that a project will be around double the time and cost. If you don’t have a strong set of preexisting you may find yourself in a situation where you price yourself out of the market.

Letting the Client Decide

Alternatively you can let the the client decide on what approach they want you to take. In this situation you propose the pros and cons to building a full test suite compared with only building the application itself. If you have an intelligent client they will most likely see the benefits of including tests and choose for the pricier option.

This is an effective strategy because it allows for you to bring the client into the decision making process, which will make them feel involved in the work. And if the client is still looking at other freelancers, this approach may help win him over.

Another benefit to letting the client decide is that his response may give you insight into how he thinks. If he acts like tests are a pointless luxury and says that he simply cares about getting the project complete… He might be a nightmare client. And in cases like that you are better off moving onto more informed people to work for.

Using Common Sense

Lastly, make sure that you’re using common sense. Imagine being asked to build out a simple corporate website. In cases like this you only need to write some basic tests. At the most this should only add an hour or so to the project. There is no need to bog down the process writing tests that verify that every CSS class and ID are shown on the page.

As with most concept in freelancing and life, common sense is one of your greatest tools.

Using TDD (Test Driven Development) on Freelance Projects

So you’ve built an application, and all the features seem to be working properly. Now you can simply ship the source code and final invoice to the client, right? Not quite. Before you send out the application for final sign off, it’s vital that you perform a number of checks. This guide will walk you through how to test for code quality in your applications.

How to Test for Code Quality

When it comes to testing for code quality I analyze two key focus areas. I test for:

  • Security vulnerabilities

  • Best practices

So knowing what needs to be tested is great. But how exactly can you test for code quality? Simply giving the code a final review isn’t enough. For this task I turn to automated tools that can perform a number of quality checks on a codebase and compile a comprehensive report of fixes.

Tools for Testing Code Quality

In this guide I’ll walk through the tools that I use for testing Ruby and Ruby on Rails applications. However if you work with another programming language a quick Google search will reveal that every popular language has similar tools that you can utilize.


how to test for code quality

When it comes to analyzing a Ruby/Rails application, RubyCritic is a powerful tool. This code quality Rubygem pulls in three different code analysis tools (Reek, Flay, and Flog) and generates a comprehensive report.

I like using RubyCritic because it searches for a number of issues that developers tend to overlook. For example it looks for:

  • Code smells

  • Duplicate code

  • Poorly named classes/methods


how to test for code quality

Next on the list of code quality tools is ###a href="">RuboCop. The RuboCop gem is a great tool that analyzes a Ruby code base and focuses on verifying that the code follows the Ruby style guide. If you are not familiar with your language’s style guide, essentially it represents a set of recommendations for how your code should be structured. This includes items such as:

  • Capitalization rules

  • Indentation

  • Spacing

  • Etc

I’ve discovered that RuboCop is a great tool for ensuring that your codebase follows the accepted practices for your language/framework.


how to test for code quality

Last on the list of code quality tools that I use is the Brakeman gem. One of the most difficult items to test for in an application is security. The main challenge is that if you knew of a security vulnerability… you’d have already fixed it (hopefully). So Brakeman helps uncover potential security issues that you may have not even thought about.

Preview 09:58
+ Working with Legacy Applications
4 lectures 30:39

This section will teach you how to effectively work with legacy applications as a freelancer, including how you can develop a system for working with code that you personally didn't create.

Preview 01:25

In this guide I’m going to discuss taking over a legacy application. It’s one of the dirty little secrets in the freelance world that a high percentage of the projects that you’ll be asked to work on are actually legacy applications, which means that you’ll be taking over or working with other developers on pre-existing apps.

Taking Over a Legacy Application

There have been a number of times where I’ve had great experiences taking over a legacy application. Notably I was hired a few years ago to work on a legacy app for Eventbrite and I was very pleased to find a very well configured codebase. It only took me about a week to become familiar with the inner workings of the application and I was able to start building new features right away, it was a great experience. However that rarely occurs, typically freelancers are taking over a legacy application because the previous developer was fired from the project or due to the app owner having issues with the performance of the software.

Taking Over a Legacy Application

I was explaining my predicament to a good friend of mine who was a pretty experienced developer and he recommended I read “Working Effectively with Legacy Code” by Michael Feathers. Thankfully I was able to take what I learned in that book to help completely revamp the application that I had been having issues with.

Tips for Taking Over a Legacy Application

Taking Over a Legacy Application

Creating a Test Suite

While there are a number of techniques you need to apply in order to work with a legacy application, the first should be building a comprehensive test suite. No matter what language or framework that you work in, you will be able to create automated tests that capture the functionality of the application.

So in the legacy application I was working on I started creating tests for each model. I began with basic unit tests and then started branching out to integration tests that ensured that the various elements of the codebase were communicating properly with each other. Going through this process had the added bonus that I became more familiar with the structure of the app and I was able to refactor the code as I implemented the tests.

Add New Features via TDD

Once the test suite was built I started building all new features via the TDD (test driven development) method, which ensured that the test suite was up to date. By utilizing this process, it also made it possible to ensure that the new features that I added wouldn’t break pre-existing functionality, this is called regression testing.

Taking Over a Legacy Application

Break Out Specific Features into Microservices

The further I got into the codebase I started to notice that the app had become bloated with features and many of the components didn’t need to be included in the core application. Therefore I slowly started creating ###a href="">microservice applications that handled isolated pieces of functionality. Some examples were: creating a microservice that managed the user notification system and building an app that processed the reporting engine. After creating the microservices I was able to get rid of significant portions of the legacy code and then simply wire up the legacy application with the new microservices so they communicated properly.

Taking Over a Legacy Application

DRYing up the Codebase

In many legacy applications you’ll run into duplicate code which causes a number of problems, including the issue of having to make one change in multiple places in the codebase. An example of this was how the application I was working on dealt with view templates. There were a number of view files with identical HTML code. I was able to refactor these components into partials that could be shared across the application, which allowed me to make a single code change that would populate throughout the app.

The topic of taking over a legacy application is important to understand, not only for the reason of being prepared for what steps you need to take in order to work on a legacy app, but also so you will have a better idea of how to build applications from scratch. Remembering back to the Eventbrite application that I mentioned earlier, that application was easy to work with and add features to namely because it had been built from day one using each of the techniques mentioned in this guide.

If you develop an application from scratch using these best of breed techniques you will make it easier on yourself when you’re adding features in the future. It will have the added benefit that any new developers that may work on the application in the future will be able to start adding new features easily and they’ll appreciate the extra work you put into the development process.

I hope that this has been a helpful guide for taking over a legacy application and that you can apply it on the projects that you’re working on.

How to Take Over a Legacy Application as a Freelancer
Freelancer Interview: Practical Tips for Taking Over Legacy Applications

As a freelancer you will come across many times where you make a decision on starting over vs refactoring on a legacy project. Through the years I have come across this issue more times than I can count.

The Legacy Scenario

Typically the situation sounds something like this. I’ll get hired by a client who has a legacy application. The application is usually a few years old and has been managed by a number of developers. I’ve discovered that usually the code project started out small, and it grew from there.

Somewhere along the way the application lost its way. Instead of using a scalable application design approach, the previous developer patched new features on and the codebase devolved into a convoluted mess. Eventually every new feature causes another component to break and the client gets so frustrated he decides to hire me.

Does this scenario sound familiar to you at all? As a freelancer I’ve been on both sides of the legacy code spectrum. When I was a new developer I built new projects that got out of hand and I lost the clients. And as I matured as a developer I started getting hired to take over legacy projects.

I can tell you from experience that neither side of this scenario are fun. Especially when the client brings up the dreaded topic of starting over vs refactoring.

Starting Over vs Refactoring

When I was a young and naive freelancer I dreaded the idea of re-factoring a legacy application. The second that the client brought up the possibility of starting over from scratch I jumped on it! However the more projects I work on, the more my mindset has changed.

Over the years I’ve put together a system to help me decide between starting over vs refactoring a project. And that’s what I’m going to walk through here. The steps I follow are:

  1. Removing the fear factor

  2. Analyzing the 80/20 principle

  3. Building an automated bug list

  4. Becoming the client

Fear Factor

One of the reasons why inexperienced freelancers tend to opt for starting a project over is because of fear. And fear is rarely a good reason to make any decision (unless you’re running away from a wild animal or something like that).

So before I make a decision, the first task I perform is taking fear out of the equation. I’ll ask myself:

“If you weren’t afraid of the unknown issues with this codebase, what would your decision be?”

Once fear has been removed I can look at the project with an unbiased viewpoint.

The 80/20 Principle

The 80/20 principle has a number of practical ramifications. You may have heard it being used to say that 20% of the people make 80% of the wealth. Or that 20% of a customer base generate 80% of a company’s revenue.

However I’ve also seen that the 80/20 principle can work well for deciding between starting over vs refactoring.

Too many times I’ve seen a freelancer start a project from scratch when the legacy application already contained 80% of the functionality needed from the client. This means that the developer only needed to take care of the remaining 20%.

If you look at the numbers the answer becomes readily apparent. Would you rather perform 100% of the work (which is what would be needed when starting from scratch), or only 20%?

So at this step I take a step back and I analyze what features the client is asking me to build. If the legacy application is functional and simply has a messy codebase, it’s rarely the smart move to start over from scratch.

Typically in this case I’ll add the new feature and then start refactoring the application one module at a time.

Automated Bug List

Moving down my list I’ll next use automated tools for analyzing the application. Pretty much every programming language and framework has a wide range of analysis tools. I’ll utilize these tools to generate a set of issues for the legacy application.

I like this step because it accomplishes two key goals:

  1. It gives me a practical strategy for what needs to be fixed in the application.

  2. Since it’s automated, these types of tools are unbiased. Your personal judgments on the previous developer’s coding style are taking out of the equation. And the focus is centered solely around the project itself.

While each project is unique, the tests I run usually focus on giving me a report on:

  • Potential security issues

  • Best practices

  • Code that is not being utilized (this is vital!)

Becoming the Client

Lastly I try my best to remove my personal feelings from the decision. Instead I focus on taking the perspective of the client. I’ll ask myself:

“If I was a fully informed client, would I really want to pay for a developer to start the project over from scratch?”

Using some fuzzy math I’d estimate that around 9/10 times my answer to this question is that an informed client would request a refactor over starting over.

Starting a project over is expensive, and there’s no guarantee that the new codebase is going to be perfect. In fact I can pretty much guarantee that there will be issues with a brand new application. I’ve seen multiple times where a legacy application was replaced by a new piece of software that had the same number of bugs.

When Should You Start Over?

So far this guide has heavily favored refactoring an application. However there are times when starting over from scratch is a better approach. Some of the rationales that make starting over a wise decision for the client are:

  • A complete change in architecture. I have had clients who requested that I migrate an application from being a monolith (a large single application) to becoming microservice based (a number of applications that all only perform a single feature). In cases like this it wouldn’t make any sense to try to keep the legacy application since the core application structure would have to change.

  • Moving to a different language/framework. Through the years I’ve had a number of clients who had old ASP .NET and PHP applications approach me to rebuild their systems in Ruby. When it comes to changes languages or web frameworks it wouldn’t be possible to retain the legacy application.

Notice how both of these key reasons had nothing to do with bugs or messy code? The only time I’d recommend for a client to start over from scratch is if it’s literally impossible to retain the legacy application.


In summary, the key to remember is to go through the system of checks whenever you’re asked to decide between starting over vs refactoring. The more experienced you get as a developer the more you’ll realize that it’s incredibly rare that a functioning legacy application cannot be saved.

Starting Over vs Refactoring on Legacy Applications
+ Managing Client Relationships
5 lectures 32:10

In this guide I’m going to discuss how to have effective client communication. When I was originally building up my freelance business I heard a common complaint from clients talking about previous developers that worked on their projects: poor communication and a lack of transparency.

As a developer I know how hard it is to fall into the trap of wanting to dive into the code and build a project, however without proper client communication you’ll run into the following issues:

  • Clients will think that no work is being performed. Regardless of reality, if you don’t tell a client what you did their first assumption is going to be that you didn’t do anything. This can get very messy when you send your bill and the hours that you charged don’t match what the client estimated based on your updates.

  • You may be building a feature in a way that the client didn’t expect. I’ve had it happen a number of times where I understood a requirement to mean one thing, but the client had a completely different expectation in mind.

While the immediate reaction to try and fix communication issues may be to be in constant communication with the client, this approach will waste your time and it will also give them the mindset that you’ll always be available, which will limit your freedom, which kills one of the main reasons you became a freelancer in the first place.

So with these issues in mind I’ve put together a system for client communication that is balanced, meaning that the client will feel informed about the project but it will not inhibit your personal freedom. If you can perfect this part of being a freelancing you’ll see that it leads to happy customers while also being a healthy environment for you as a freelancer.

System for maintaining proper client communication

  1. Create a project management dashboard, I’ll typically use Basecamp or Trello, however you can use anything that you prefer and is easy for the client to use.

  2. At the beginning of the day schedule when you’ll work on the project. Each morning I write down on a dry erase board all of the projects I’m going to work on, and I list what time slots I’m going to work on them. For example: I’m going to work on Rails project for XYZ client from 2pm-3:30pm.

  3. After the schedule is set I message the clients and I let them know when I’ll be working on their project so they can contact me during that time slot if they need something immediate and they will also know that work is going to be performed that day.

  4. After each project time slot that day I post on the project dashboard an update on the tasks that were worked on that day. Because I like being efficient with time I’ll usually copy and paste the GitHub commit comments as bullet points.

If you follow this system your clients will be happy because they will know what you’re doing each day, and it lets your stay in control of your schedule.

How to Managing Client Communication as a Freelancer

In this guide I’m going to discuss managing client conflicts.

It’s simply a matter of life and business that you will run into conflicts with clients, some of the most common confrontations seem to be:

  • Going over the time you originally estimated

  • Going over the budget for the project

  • Not delivering a feature that matched the client’s expectations

  • A bug occurring in an application

None of these are fun to work through, and most of them can be avoided if the proper care is taken at each stage of the project management process. However I want to discuss what happens when conflicts occur and how to best manage them.

Strategies for Managing Client Conflicts

First and foremost, do not let emotions take over. This is probably one of the hardest ones for me because I love what I do and when bad things happen in a project my first response is to get defensive, which is one of the worst responses to have. So when I see an angry message come through from a client or take a phone call I make sure that before I respond I sit back and try to look at the situation from the client’s perspective.

It’s pretty rare that a client will get upset for no reason, the majority of people are rationale and they prefer to stay away from confrontation, so if the client is mad there is probably a legitimate reason for it. Therefore the first step I take is pretending that I’m the client and then I feel like I can give a better response from that perspective. If a project went over budget and I’m imagining that I’m the client, I can understand why they’re not happy – because I don’t like spending more money on something than I originally was told it would cost.

So instead of responding with a defensive messages, such as:

“It wasn’t my fault, you were the ones that changed the scope”

“I can’t control that the fact that the designer took twice as long to deliver the mocks”

I’ll start with saying things that show that I understand their perspective, for example I’ll say:

“I completely understand how frustrating it is, the project scope has grown and it’s been hard to meet all of the requirements based on the original timeline”

“I am sorry, I should have allotted more time for the design phase, it’s my fault and I will work to get it taken care of”

If you pretend that you’re a client hearing those four responses, which ones would put you more at ease? The ones where I was defensive and tried to blame everyone else or the ones where I took responsibility for the project and gave a calm reply back?

The easy thing to do in a confrontation is to become defensive or respond back aggressively, however neither of those approaches will fix the issue and they’ll most likely make things worse. Your first goal when a conflict arises between yourself and a client should be to see if you can see the issue from their perspective.

With all of that being said, there will be times where the core problem is the client’s fault. They may be very bad at stating project requirements or they may simply be poor communicators. I once had a client who hired me a few years ago and asked me to build an application and they simply gave me about 4-5 screenshots from another website and then they completely disappeared. I did my best to build what I guessed they wanted and I sent daily updates to them, and then a month later he messaged me furious that the app wasn’t what he wanted and then went on to list all of the features it was missing, even though they were features he had never asked for originally. I calmly fired him as a client on a spot and informed him that I wouldn’t be able to work on the project any longer. I didn’t raise my voice, I didn’t explain how he gave me little to no guidance for building the app, but I knew it wasn’t the type of client I could work effectively for.

I hope that this has been a good set of tips for how to manage conflict with your clients. I did quite a bit of research on this post prior to publishing it to see if there were any things that I was missing and I discovered a full library could be made out of the information based on conflict resolution. There are discussions about personality types and more acronyms than I care to list out here, however what I’ve published here is what I’ve used throughout the years and it’s worked very well for me through a number of challenging situations and many different client personality types and I’m confident it will work well for you and your clients.

Managing Conflicts with Clients as a Freelancer

If you’re starting on your freelance journey the topic of this guide may seem insane. However I can ensure you that knowing when to fire a client is a critical component of building a successful freelance business.

My Urgent Client

when to fire a client

A few years ago I was hired by a fast rising startup. The company had skyrocketing growth and I was hired to build their platform. After going through the interview process I was hired. Soon after taking the client I met with the developer who was leaving the organization.

After the developer walked me through the system he gave me a word of warning. He mentioned that the CEO of the company had a favorite word: urgent.

I filed the information in the back of my mind and started working on the application. Within days I learned why the previous developer left the fast growing startup. Literally EVERY email the CEO sent me contained the word urgent in some form or another.

Through the course of around a year I worked with the company and built out the full system. However I noticed that my quality of life was negatively affected by this single client. My nights and weekends were no longer filled with spending time with my family. Instead that time was spent working through countless urgent tasks from the client.

When to Fire a Client

After a while it dawned on me that if I continued to work with this client I was actually losing the benefits of being a freelancer. Being a freelancer is supposed to result in freedom and making my own schedule, right?

Once I realized that this client was making my life worse instead of better I put a plan in place and told him that I would no longer be working with him.

Through that experience I developed a system for deciding when to fire a client. There are three criteria that have to be met, and I’ve listed them below.

Being Treated Like an Employee

First on the list for deciding when to fire a client is when you are treated like an employee. Being treated like an employee typically means that you’re expected to be on the company’s schedule and thus limits your own freedom/flexibility. I have had multiple times where a client appeared to forget that I was a freelancer. Some telltale signs of this happening are:

  • When a client is frustrated that they can’t communicate with you 24/7. I once had a client that I had to fire because their employees would send me Skype messages all day and night for trivial issues. And then they would be frustrated when if I didn’t respond immediately.

  • No organized communication. Through the years I’ve had clients who would let multiple employees message or call me anytime they needed a task completed. It’s important to have a set number of project stakeholders. If a client lets any/all employees send you requests it’s pretty much guaranteed that communication conflicts will occur.

When I realize that a client is treating me like an employee I’ll approach the CEO or whoever my direct report is, and I’ll convey my concerns. Many times this will fix the issue. However there have been times where the problem persists and I have been forced to fire the client.

Tyranny of the Urgent

Returning back to my story from the beginning of this guide, a top reason for knowing when to fire a client is when they can’t separate urgent from normal tasks.

I remember a time where this specific client setup a project management job board. I kid you not, 90% of the tasks were marked with the tag: urgent.

Not only is this a stressful situation, it is also a recipe for failure. When all tasks are marked as ‘urgent’ it essentially means that none of them are urgent because there’s no designation between the projects.

In the book Rework, Fried and Hansson recommend that companies remove the word urgent from their dictionaries. I highly recommend this approach. Typically when a client marks tasks as urgent or ASAP it means that they don’t know how to properly manage a project. And poor project management skills is not an attribute you want in a client. Because the client who doesn’t know how to manage a project will eventually blame you for not implementing their plan properly.

Toxic Environment

Last on the list for knowing when to fire a client is when it’s a toxic environment. I’ve been fortunate to not run into this situation very often. However through the years I have a had a few toxic clients.

Being toxic can take a number of forms, including:

  • Constant negativity

  • Poor communication

  • Unrealistic deadlines

  • Moral/integrity issues

I can think of one client that embodied each of these traits. He hired me to build an application and gave an incredibly vague list of requirements. Throughout the build of the project I would send daily project updates and he would go weeks without giving feedback at all.

When I would hear from him all of his comments were negative. In many of the cases he would be upset for not implementing features that he had never even mentioned in his vague list of features.

Needless to say I fired the client on the spot and moved on to greener pastures.

The Joy of Firing a Client

When I started out as a freelancer the thought of firing a client seemed crazy. However as I built up my business I came to the realization that firing a client that constantly brought stress into my life actually resulted in making me a better freelancer.

Toxic clients are not fun to work with. They cause anxiety and kill the joy that freelancing should bring. So I’m constantly pruning my client list. And the more experienced I get as a freelancer, the better my client list has become. This has resulted in more joy for me and better performance in regard to what I produce for clients.

Knowing When to Fire a Client as a Freelancer

These resources can help you as a freelance developer, whether you’re starting out or if you’ve had a freelance business for years. Several of these books I’ve actually gone through multiple times. And with each time I’ve been able to learn something new.

Top Books for Freelance Developers