It's been almost been a year since I switched jobs, it has been a fun/exciting /frustrating/<placeholder for more emotions> journey, and besides the logical and expected differences between jobs.
There is one thing that has been quietly consuming my idle time: This company loves their agencies!
When there is no budget to hire Full Time Employees or support to do that altogether, the workaround is to hire Contractors, although is easier to get more people from an existing "Partner", however I tend to steer away from that strategy in order to build new practices or even increase velocity;
Besides the elephant in the room
These are my reasons on why I diversify my portfolio of partners and approaches on how to grow teams:
Agencies have an incentive to create hard boundaries and push towards a "feature factory" culture
This way they'll sell more "resources". Making roles more granular helps selling more profiles.
For example:
- 1 Project Manager
- 2 Backend Developers
- 2 Front End Developers
- 2 QAs
When it could be just 2 or 3 senior engineers!
With such segregation of responsibilities, each team member can also be more junior on average, and the non-senior profiles are the ones where agencies make the highest margins.
This translates into suddenly a team of 10 or 15 people, without actually shipping much value.
Agencies don't have an incentive for increasing code quality standards
Clunky QA and Deployment processes are an opportunity for them to sell the people who operate them. Why should they push for automated CI/CD? They would lose business by doing it!
Issues in Production mean more bug tickets, regression tasks, triage calls, etc. That's an scope increment they'll happily bill for.
Also there's an incentive to accept loosely defined tasks, and not go deep to define all edge cases ahead of development. This will generate more work down the road.
Bottomline, it will hurt the client's pockets!
Agencies create barriers and bureaucracy
This makes super easy to add new people to the team. But not so easy to downscale when needed. Or to fire that person who's not performing. Unless, the person responsible for the relationship decides to go over a lengthy process to discuss why you don't want certain individuals (I did this and it's worth the effort)
Contract clauses like minimum tenures and so on can really hinder nimbleness in a small team (your legal and procurement team will help you here).