This is the story of taking a small web design and development shop from the edge of collapse to profitability in a few simple steps. I wanted to share with you all how I did this so that you too could grow your business, retain your sanity, scale up and down more easily, and make more money easier.
The Backstory:
About two years ago, things were rough. Some months we were doing great, and other months we were overwhelmed. We had both large scale software systems as well as smaller marketing projects we were doing for our clients. We’d been in business for a long time at this point, but were never really able to manage our growth effectively. The main reason for this was because some months we would get a lot of sales and others would be slim, but we couldn’t easily bring on more developers quickly. Good developers that you want to be a part of your team take time to integrate, and adding this kind of person takes a ton of recruitment and even then can still end badly. That’s when we realized we had to do something different. It’s also when I met Andrei.
Andrei had been running a Romanian outsource team for almost 20 years and helped me learn how to work effectively with this kind of team. I realized when I started talking to him that there were more options out there than just constantly adding more in-house developers. It’s been several years now working with him and his team, and I couldn’t be happier.
If you’re not in the industry, please read this!
If you’re not an information architect, project manager, designer, or developer; and don’t know how to plan a project, and can’t manage a project, or don’t already work with an outsourced team, you are almost certainly going to fail. A good way to think about building a web or mobile app is to compare it to a home construction project. If you were going to build a house, would you write the blueprints? Could you hire the right people and plan the project? Do you know the order of work and what things are more likely to go right or wrong? If you wouldn’t be these things when building a house, don’t try to do them with an app, web-based software system, or large-scale website.
Outsourcers are like the framers, plumbers, electricians, and carpenters. You need an architect and a foreman, otherwise the workers don’t know what to build, when do it, or how it should be done. The biggest issue I see is that people that start working with outsourced teams think that the team also has architects. I’ve seen a lot of good outsourced teams and good business people get into terrible messes and lose tons of money because they didn’t understand this.
In other words, and this is really important, if you are not a developer, designer, software project manager, or work in the industry and you want to build an app or web-based software system and you go hire an outsourced team, you might as well just give me twice the money you thought were going to spend and tell me to punch you in the face. It’s almost definitely going to be less painful and substantially less expensive this way. Or better yet, just put the money into real estate on the moon, I promise, you’ll still be better off. If you want to be successful in building a system and aren’t already in the industry, please hire a local team who has done this before to help you. You will ALWAYS be better off.
Getting Straight To It
Rather than going through the whole story on how I learned all these lessons and what happened to get me there, I’m just going to skip to the end and tell you what I learned and how I work with an outsourced team.
If you are a / an:
- Agency or Studio Owner that wants to be able to scale up and down more easily
- Designer who needs a development help
- Project Manager needing more resources
- Developer who needs more design resources
Let’s talk about how to work with outsourced teams!
Find the right team
I think one of the hardest things in business is finding the right people. This same thing applies to outsourced labor. If you were hiring a new developer, you would probably call their references, interview them, test them out, and then start them on a small project before working with them on something big, right? Why would you do anything different with an outsourced team?
Personally, I have found a lot of success using larger teams with lots of experience. When I say larger teams, I mean teams with 50+ team members. I like this because if someone gets sick or leaves, they can be replaced quickly. Additionally, I like working with a team that has worked together for a long time. They all know each other, they all know what they are independently good and not good at, and they are a lot smoother to work with. Smaller teams don’t have these qualities and so I recommend staying away from them, at least when you start out.
Make sure that whatever team you choose to work with, you start them with something small. A small wordpress site, a smaller feature on an app, whatever; just not a large scale system.
I have really enjoyed my relationship with CodeWright, a Romanian team.
Make sure you can understand your team
I worked on a couple projects with a team out of India and frankly I couldn’t understand anything they said. I don’t have anything against Indian teams, and I know a lot of people that work really well with them, but I couldn’t understand them, and they couldn’t understand me, and it caused a lot of problems. If you can’t verbally communicate, I would strongly suggest rethinking using that team. Or maybe it’s time to add another language to your vocabulary?
Time zones matter
The team I work with is in Romania. They get started at 3am or 4am EST and I get started at 9am EST. Their project managers work till about 10pm their time, which is about 3pm EST. It’s a big difference in time, but it works fine. I check in with them every day at around 9am and we go over any projects we’re working on and they’re pretty much always on top of things.
The problems come in when clients have issues after 3pm, which inevitably they do. Per Murphy’s Law, it’s usually at 3:01pm as soon as the developers have left their office. The key here is that you need to have someone available in your time zone, at your company, and preferably at your office who can pick up these issues when they occur, which they will.
Developers are developers
People are people, and developers are developers the world over. They still forget things, they still miss items that should be clear, they are still people, and they make mistakes. I have seen some overseas resources treated terribly because the people here didn’t have a personal relationship with them. Small mistakes were treated like mission critical errors, and good people and hard workers were fired for this kind of thing. Don’t make this mistake. Just because someone is overseas, they are just like you and me. They have good and bad days, make mistakes, and they deserve the same respect you give to your own team members. Remember, developers everywhere make mistakes. That’s part of developing.
You must have a scope of work!
My favorite subject! Whether you’re doing something as simple as a text or image change or working on a huge new project, you MUST HAVE A SCOPE OF WORK. This means a list of what is to be done, what you want to accomplish, and tasks to get this done. As I’m sure you can guess, I like to use BrainLeaf for this. The reason you need a scope is because your designers and developers need to know what to do and how to do it. They must also have something to be held accountable to. This sounds so simple, but I have seen people get really upset because they asked for something (without writing it down) and the developer forgot a piece or feature. It is such a simple thing to do, and a simple thing to forget.
Some sample scopes of work
Website Project Scope |
Simple Website Coding Project |
My recommendation is to have each thing being done listed out and the estimated hours for each item noted along with that item. This is exactly what we built BrainLeaf to do, and it was developed with this specific need in mind. Take a look below at the pricing section of this article for more information on mistakes people make and how to be charged by your outsource resources.
Project Management
No matter the size of your project, bug, or task you need to put it into a system so resources can see the list of items to be done and complete the work. I am a huge fan of Atlassian, and we use JIRA for all of our project management. For most projects in this system, when items are done they are moved to a ‘ready for review’ status, and a project manager moves them to ‘complete’ or ‘done’.
Without an effective project management system and processes, working with an outsourced team can be very challenging, if not completely impossible for larger projects. If you’re not using a PM system, you are not taking advantage of all of the resources available for you and your team.
As a final note on Project Management for outsourced teams, if your teams have agreed to deadlines on a set scope and aren’t making their deadlines with no changes to that scope of work, you have a problem, and you may be working with the wrong team. That being said, make sure that every person on your team has agreed to the timelines before you hold them accountable. You should always:
- Write a detailed, clear, and specific scope of work.
- Request deadlines for this scope. If the project is large be sure to break up milestones into small chucks, especially for the first few milestones.
- After the team has agreed to the deadlines, hold them accountable.
- If your team is missing initial deadlines without a good reason, you probably need to institute some disciplinary measures or find another team. However, it is development and sometimes things take longer than expected.
- Enforce your team’s commitments, but be understanding about problems encountered. Sometimes there are unknown unknowns and sometimes there are known unknowns that take longer than expected.
If your resources constantly miss deadlines maybe it’s time to look for new people. Just make sure you do this EARLY in the project. Changing resources halfway through a project can be disastrous.
Code Repositories
If you don’t know what a code repository (repo) is or how to use one, you need to learn. Code repos are absolutely necessary for utilizing outsourced teams. It enables multiple resources to work on a single file simultaneously, and this is critical.
We hold all developers accountable by checking their code commits daily, reviewing what they did. We pull some sample entries and make sure the code looks good. By checking when people make changes, we know they are working and committing their work to the repo. When project is ongoing, we constantly check the repo. If no commits have been made in the last few days, something is going very wrong. The repo makes it easy to see who is doing what and how everyone is working. I recommend BitBucket or GitHub for your repo needs. For more information on code repositories, look at the section entitled ‘Cross Checking Work’
Pricing – Flat fee, time and materials, or something else
Let’s say you’ve found your new team and have an idea about scope. Now you’re ready to talk about pricing. How should you be charged? It all depends on known items. Personally, if an outsourced team won’t give me flat fees on set scopes of work, especially for a small project, I won’t work with them. If you know what you’re building, have a set scope and have done this or something fairly close to this before, then an outsourced team should be able to confirm a flat fee.
There are other ways to think about this. As a business owner and designer, I know that sometimes you have to charge or be billed on a Time and Materials billing schedule. However, whenever working with outsourced resources, I ALWAYS push to get to a final estimate. From my point of view and from the point of view of my clients, it is not a good idea to have open ended billing without solid ideas on how much time and cost the final product will face. Consequently, I request a flat fee proposals from outsourced workers as soon as I can in every project.
Let’s take a look:
Situation: It’s a small project, you know your full scope of work, and there are no unknowns
Charge: Flat fee
Situation: It’s a large project, you know your full scope of work, and there are no unknowns
Charge: Flat fee with a variance of 10% – 15%
Situation: It is a large project with unknown integrations
Charge: Flat fee on known aspects of project. Time and materials estimate to review documentation and produce a flat fee estimate with variance.
Situation: Large project with features whose build time is unknown.
Charge: Flat fee charging for all known aspects of project. Time and materials work to produce an estimate on unknown features. First 10% – 20% of unknown feature on T&M, but then the rest of that item on flat fee.
Situation: Large, iterative project with multiple unknowns or integrations.
Charge: Scope all known items to get produce MVP features list and pricing. Unknown items placed as T&M with best guess on integrations along with a percentage variance based on how well known the item is. Continually push for flat fee on unknown items with an expectation that no later than at 25% completion per unknown item a flat fee will be produced and held to. Once MVP is completed or first iteration is done, reprice second iteration before starting work. Client should be versed in Agile Methodology and appropriate contracts put in place before work begins.
Of course there are going to be other situations, but this is a good overview on how I like to secure charges from outsourced resources. Knowing your costs is critical to your profitability, so find a way to receive flat fees from outsourcers whenever possible.
Check-Ins
Checking in with your outsourced team is so important! I check in with my team daily, and usually as soon as I get into the office. We just take a look at the project management tool, review tickets they’ve completed, review code commits and time used to make sure they are working on the right projects in the preferable order so there will be no problem with deadlines. Our conversation ends with discussions about upcoming work. Now that I’ve been doing this a while, it is a pretty straight forward process, but it did take some time to get it figured out. We recommend Skype as it is fairly reliable and the screen sharing option is always available.
Cross checking work
A few years ago we hired a freelancer to do a piece of a project that no one in-house could double check. This was a huge mistake. Without going into a long, sad, and costly story let’s just say it didn’t end well and could have been avoided SO EASILY.
If the team you are working with is doing work that no one on your team can check, you need to hire a third party consultant or freelancer to double check their work. This can be as easy as hiring them for 2 hours per week to do a meeting with the developers, review code, and give you a thumbs up or down. It can also be as complex as hiring a full time person to work with your team. But either way, make absolutely sure you have someone checking to make sure what is being done is being done well and on time.
Intellectual Property and Contracts
There is this rumor that I’ve heard multiple times now that a company in the US hired an overseas company to build something, then the overseas company reused the code for their own purposes or just rebranded the system they had built and started selling under a different name. I’m sure it’s happened overseas and over here, but what to do if it does happen, I don’t really know. The internet is a big place, and enforcing your property rights overseas is difficult. My best advice, not being an attorney, is to make sure you have a good attorney. But at the same time, if you have the right team, this won’t happen. Some of the things that we do are:
- Have all in-house or outsource workers on your system sign non-disclosure documents.
- Make sure your outsource company has a US arm with an established corporation. If you need to sue someone, sue a US company.
- If you have sensitive client or patient data within a system, have your outsourced resources build the system, but then have local resources do the transfer and setup of data. I’m not saying that you should never extend permissions to outsources to sensitive data, but limiting it is often a good idea.
Wrap up
Outsourced resources have saved me tons of time and money, and make scaling up and down a lot easier. It’s been great working with the team I’ve been with over the last few years. But it’s so important to remember that you must have solid, clear, and consistent processes when working with every kind of team. There have been so many times that I have forgotten to use the processes I listed above and it always causes problems. Just be consistent in your management, just like with all your teams and people, and you’ll be all set.
Please let me know if I missed anything big in the comments below!
Jason Long is the founder and CEO of BrainLeaf. A self professed serial entrepreneur, he is always interested in new businesses, new ideas, and new ways to change the world. He has over 15 years of experience in design and development, he has served in a variety of different roles ranging from designer to CEO. Most of his time is spent working on the build and development of new ventures while trying to travel the world.