Let’s lay out the scenario. You are a stakeholder in an organization that is looking to create a custom application to either support your core business competencies or maybe even to be your core business competency. You have a general idea of what you want the app to do and maybe even roughly how you want it to look and function. You have the idea; now you need your Woz. What do you do? Do you start the dreadful search of finding a 3rd party development agency and hope they have enough experience and expertise to walk you through and deliver what you need? Or do you bite the bullet and hire a small team of full-time software engineers, QA, UI/UX, product & project managers and hope that your business acumen translates into the building and maintenance of a software product?
Now, this decision is highly contextual and various weights need to be placed on each factor based on the type of organization you manage. If you are a technology company that produces software, the calculus is different than if you are, say, a car insurance company. Previous experience in technology (software development specifically), the centrality of the project to your business model/processes, and the future impact of the project on revenue/expenses are all highly significant factors.
Just to caveat this, when I say “agency,” I’m speaking of a full-service media or engineering agency that offers solutions for the full development life cycle from product to UI/UX to engineering to QA and beyond. This is significantly different from hiring independent contractors even if said contractors are part of an agency.
When to Hire an Agency
Let’s take a look at some of the markers that might point you to hiring an agency.
The easiest answer to this comes down to money. Depending on the needs of your app, you might expect a custom solution that addresses your needs to cost in the range of $50,000-$100,000 depending on the exact requirements. I would consider this a middle-of-the-road estimate where you might get a few low-ballers and a few top-tier providers. If your budget for this application fits the estimates, then you really don’t have much of an option. Hiring a small team would be overkill for a single project (though don’t dismiss this outright; as I detail later) and as long as you have a robust method to keep costs from running way (again, more on this later), this is simply your only option.
Now, there are many cases where cost is not the only, or even the primary concern. This is where things get a little more interesting.
Limited Time frame
If the app or site you need is on a very rushed or specific time frame, then an agency might be a good bet. In general, quality development agencies have resources to handle spikes in workload and can often absorb projects on tight timelines better than in-house resources especially if you need to hire new resources to achieve the internal capacity to get the project done.
Agencies typically have fairly experienced project managers who can quickly work with you to scope out features and requirements and get those to developers and designers fast. As an engineer who has worked within development agencies before, this is difficult to write but it is non-the-less the truth: most agencies work their developers pretty hard and don’t shy away from requesting overtime and weekend work to get meet client deadlines. That kind of pressure, while questionable from an ethics perspective, gets your project done on time in most cases.
You Don’t Expect Maintenance or Many New Features
If it’s one thing most agencies are good at it’s getting a product out the door. Maintaining said product, however, is another story entirely. In my experience, because they are so good at getting things done quickly, there are often corners cut when it comes to not only code quality but maintainability as well. Good software architecture and adherence to best practices takes time and sometimes significant planning. Having said that, if you are only concerned about a site or app for a limited time use or a very limited business scope, then not having to worry about maintenance issues like bugs, new features, or scalability; then an agency is a good bet. Just be sure (and honest with yourself) that this is truly the case.
One note here is that not all agencies write bad code. It is not my intention to suggest that. Most engineers want to do good work and write things that work well for their clients. The hindrance here is two-fold: time and experience. Time pressures always create poor code quality and shortcuts in implementation. There are reasons people don’t rush surgeons and other workers who do critical work! In terms of experience, as I mentioned above, agencies are well known in the field as being stressful places to work (for reasons that are beyond this post). As such, you don’t typically see high caliber software engineers sticking around agencies for very long. The turnover in those roles for quality engineers is pretty high given the myriad of other opportunities they have and the high demand they are in. This is not the case everywhere but it is the case in most agencies.
You Know this is a Throwaway Project
Akin to not worrying about maintenance or extensibility, is the idea that an app or project has a known shelf life. It could simply be a stopgap until a more robust solution is put in place or it could be for a particular client with bespoke requirements where a future relationship is unlikely. Either way; short, quick, and temporary projects are certainly the domain of agency work for the reasons listed above.
You Just Need a Well-Defined Feature Developed
If you already have an engineering team on staff but they are too busy or you just don’t have the resources to implement a specific feature or small project, that might be a good time to bring in contractors…did you catch that? I didn’t say an agency…I said, contractors. This is a very important point here. While this post is not about hiring contractors (that one is in the works), this is one scenario where it makes sense to use them over an agency.
If you already have an engineering department you very likely also have product/project managers and maybe even QA resources. Hiring an agency for this kind of work is overkill and will likely cost you more than the feature is worth. Temporary contractors, either independent or from a contracting house, are likely the best option here if your in-house management resources can handle the monitoring of a few more engineers whose work is constrained to the feature.
When to Hire or Expand an In-House Team
If your organization is even thinking about hiring an in-house team, then you are likely not dealing with the kinds of projects I mentioned above. That alone should give you pause on even considering an agency at all. Though perhaps you are at a crossroads of increasing your existing engineering team or having a blended team with some full-time staff and some work contracted out to an agency. This is a very real and also very common scenario that I have personally experience multiple times in my career.
Keep in mind that if you are considering an in-house team, the cost is likely not your biggest concern. When it comes to agency vs in-house, the investment difference is so significant that your primary concerns are generally more project control and quality-oriented.
The Project is a Core Competency of the Business
This is kind of obvious but I can’t tell you how many executives of small businesses and startups make this mistake. Now, yes, it can be done properly but doing so is likely exceedingly rare and every time I have personally experienced it (three times in my career so far) all have resulted in significant problems down the road. If your core business is literally the piece of software you need to have built, hire in-house, and do it off the bat.
Each time I have seen businesses hire an agency to “kick-off” the application development work (because hiring engineers is too expensive or takes too long), there have been significant problems with architecture, scalability, extensibility, bug fixing, and general maintenance. Now, these don’t crop up right away. In one instance, it took over two years (during a growth period) before the issues started to manifest, but they did and they always will.
Agency Work Quality is Subpar
In this scenario, maybe you already have a small in-house team or you have gone the “agency to kick start” the product route but are starting to notice quality issues in your product. These kinds of things are not always obvious but some of the things to look out for are:
- An increase in time estimates for features that seem relatively easy. This is a tell-tale sign of poor software architecture and the need for the agency to pad their estimate to refactor old code. Unfortunately, if you don’t have an in-house team or a technical resource that can review their source code, you have to take their word for things and that’s never a good place to be.
- An increase in bugs per release. Yes, this is obvious but it can also be subtle. Keep an eye on the kinds of bugs that arise and how quickly they are fixed. Are you noticing more bugs as time goes on? Does it seem to take longer (you are using Jira to track story age right?) to fix relatively simple things? Are the kinds of bugs you are seeing systemic feature failures or are the bugs more superficial (spelling or bad element spacing)?
- Are they playing the blame game? Misdirection is a strategy to buy time and in this case, your money. If they are blaming poor requirements or incomplete designs or your systems/architecture, that’s a pretty solid signal that they don’t have much experience in the full lifecycle and could not foresee possibly obvious pitfalls in the planning phase. Of course, be fair about this. Everyone makes mistakes but if this occurs often, take note!
If you notice these things over time, it may be a sign that you either need a new agency or more in-house technical resources to either take over the work or to at least monitor the work coming out of the agency.
You Need or Want more Oversight and Ownership of your Product
Again, this is a pretty obvious one (seems like all of these are ;). If you have concerns about oversight of your product then, in general, it is far better to keep the development of that product in-house. These could be concerns about anything from security, quality, and design concerns to the softer things like a desire to grow a technical team and foster personal and professional growth in people who are passionate about your company and product.
When you contract product development out to a 3rd party, you necessarily give up a certain level of control. Sure, you may be involved in things like check-ins and demos but from a day-to-day perspective, you don’t have the same level of involvement and thus emotional connection to the product being built. This is the primary reason you should never outsource a core business competency (within a software product anyway) as it keeps you at least one degree of separation away from your creation. Even the simple routine of walking downstairs and chatting with your product manager or engineers to get unfiltered feedback can be incredibly valuable from a business and a personal perspective to all involved.
The choice of hiring new or more staff vs just contracting with an agency is never an easy one. While cost is usually the biggest (and sometimes only) factor in the decision, I hope that I have outlined a few things to consider before making the decision. Keep in mind that these thoughts are from the perspective of a life-long engineer and not a business owner or CEO. It is clearly advantageous to have input from all sides on an issue like this but hopefully, my perspective will key you into some of the long-term pragmatic concerns of your product vs the immediate costs.