The traditional software agency model is broken.
If you’re trying to build a software product, or looking for an agency to maintain a product that you have, you’ve probably been on the business end of a sales call with a software agency. I’ve heard these calls, and they’re a painful storm of misinformation, false promises, and guarantees that could never be met. If you’ve ever worked with an agency, then you’ve probably experienced delays, growing costs, poor quality, unstable applications, misunderstood requirements, and outright project failure. If you’ve ever worked for an agency – then you know exactly why.
The truth is, software is hard. Really hard. And building something out of nothing is going to produce some unexpected results. But I know that the majority of problems produced by agencies can be significantly reduced with some minor tweaks.
Kitchen Sink Agencies
When you have projects of all shapes and sizes, engineering resources never get an opportunity to master any one language or framework. Worse, the organization rarely has any standards in place. The wheel is reinvented every time a new project arrives. When one project ends, another begins. The unassigned resources will be reassigned as quickly as a new project comes through the door. However, that project will likely be completely different than what they were working on previously. If the engineer has previous experience, it will invariable be rusty and outdated given how quickly technology moves. They will spend much of their time (re)reading documentation and copy-pasting naive code from simplified tutorial to accomplish simple tasks. You will pay for more man hours and receive a lower quality deliverable.
How to Identify this Situation
This is a very easy problem to spot. Ask the following questions:
- What languages/frameworks do you develop with?
If they tell you that they can work with anything. That is a red flag. It’s mathematically impossible to maintain an agency of specialized full-time employees with such varying array of project specifications. Ask yourself what happens if a project of 50 Java engineers is terminated and a your new Python project is ready to start? Will they go recruit specialized Python engineers for your project and continue paying 50 engineering salaries hoping that a new Java project starts soon? Or, will they repurpose their engineers and assign them to a project that they may or may not have any previous experience with?
- How soon can you start working on my project?
If they say immediately, that is a red flag. Most agencies have a “bench” or “capability engine” of unassigned resources. Agencies have full-time employees and projects end as others begin. It’s normal to have some staff awaiting assignment. However, if the answer to question #1 above implies they work on multiple technologies AND they tell you that they can start immediately, you can be assured that you are having non-specialized resources assigned to your project. Again, this will result in slower development of lower quality (higher expense and greater defects).
Fortunately, the solution is very easy: Specialization. Agencies that specialize in a single technology stack, i.e. NodeJS and React, will work faster and provide higher quality results. They usually spend time developing processes and internal tools to expedite product development and increase quality. Engineers jump from one project to another and are able to apply their hard earned knowledge from previous projects on yours.
Full-time employees are hard to manage in an agency. Projects come, and projects go. Some are large, and some are small. There will either be overworked staff or underutilized staff.
Underutilized staff is overhead and engineering resources are expensive (at least the good ones). The traditional agency model bills 3x a resources salary, a third for cost, a third for overhead, and a third for profit. However, if your resources are only 50% utilized, the agency will sink. You can rest assured that the costs will get passed along to customers. Agencies sometimes avoid this by hiring low cost resources to minimize overhead during periods of underutilization. It should go without saying, but this produces lower quality at a usually higher price. Another approach to avoiding this overhead is to over-allocate resources. I’ve witnessed many agency employees have over 300% allocation – the agency is billing 120 hours for a resource that works 40… Usually, this resource works much more than 40, but not by choice, and certainly not 120 hours. This is unethical (fraudulent) and also results in burn out and poor quality output.
In 2020, remote office and flexible schedules rank as the number one most important factor in what people look for in a job. At Initprise, we are 100% remote, distributed, and have flexible schedules. We also have few full-time employees. We use contractors for large portions of project development. Contractors often cost more (per hour) than employees, but you only pay for value added effort. You’re not paying for under or overallocation. Additionally, we are able to acquire and assign highly specialized contractors for very specific tasks. We do not have to make an employe “fit” in a project – we simply find the best available within the projects budget constraints. We’ve found that we get higher quality output in a shorter period of time from specialists. This translates to awesome deliverables at a lower overall cost.