Agencies have some nice advantages especially if you have no experience working directly with programmers. They typically have a project manager who will interface with you, established processes, and existing relationships with multiple vendors (developers, designers, marketers). You’ll have access to a CTO, architect, designers. They can easily scale up or down without going through a lengthy painful talent search. This allows you to stall in the middle of the project if need be and pick up again afterwards. As soon as you pay, they can start.
Unlike an in-house team, they can be held accountable on a different level and if they are not delivering on time, you can put pressure on them to onboard more resources. They also will have a track record that you can look and see their work.
This convenience for you comes at a cost, both in dollars and quality.
Agencies typically need to markup of their services 2–3 times in order to cover overhead. Because of the need to keep the talent they have in place in a hot market, the agency needs to take the work that comes. This means they very rarely specialize, least of all in marketplace development. They may be developing a marketing kit for Coca-Cola today and tomorrow a fitness-tracker and the following week a movie ticket website. No specialization = no domain knowledge.
Good developers are motivated by bringing their best game to the table and seeing a project come to fruition. Working in an environment where they are expected to switch between technologies, development approaches and differing goals is a compromise for them. They value focus.
No fixed prices
Because agencies don’t truly specialize, working on a fixed price is risky for them and thus they bill hourly. When they take on a project they cannot guarantee a fixed price because there is a good chance between starts and stops, developers working on multiple projects and projects with multiple developers working on the same section the final product will be buggy and require a significant QA process. That less than stellar code will continue to be problematic.
And if they do agree to work for a fixed price it’s usually a sign of an immature team. Something will give, either you will start sacrificing features to stay on budget, go past the agreed deadline, the price creeps up or all of the above. It has nothing to do with mal intent but rather software development is very unpredictable process and unless you have build very similar system and have a lot of codebase already in place having thus removed all the major risks - it is very hard to give precise estimate and the budget can easily go up to 2-3 times.
Because agencies operate on a high rate in-and-out model, developers on a project come and go. Therefore, the quality of the build is usually poor. The result is higher maintenance cost, more bugs and harder to grow after. Code for software companies their second largest asset, after the users.
Quick start and hands off
If you are very well funded and more of a hands-off type, an Agency can be a good option. Fast to start and if you can afford to keep them post launch as your development team going forward, any of those quality problems will land at their feet. You can also let them know from the outset that consistency in the team is important to you and try and get some guarantees that they keep a consistent team for you. With a clear goal what you want them to accomplish for you, with a full team they should be able to handle it so that you can focus on how you will be getting those users.