It's time for the software development community to end subcontracting.1
We've taken several jobs where our client was merely passing money and requirements down from their clients, and passing our work back up. At other times, we accepted more work than we could handle and hired subcontractors to do a big chunk of it. Both paths have convinced me that this practice is harmful.
We're all finite. It's terrible to admit this, but I have limitations of time and skills. My team has limited time and skills too, and so do you.
It's good to hire specialists as needed to fill holes in a skill set. I hire graphic designers to save me from having to look at my own creations, and it's great that your clients are hiring you to build the things they can't build on their own.
The problems arise when you re-sell the time of other specialists to your own clients, or let your clients re-sell your efforts up a chain. It's even worse if you're trying to do it in secret.
Imagine the last time a manager imposed a technical decision or baseless deadline on one of your projects. Interjecting your own limited understanding into the interface between other specialists and your client will produce the same kind of conflict.
Even if the specialist is just like you, there are problems that cannot be avoided. Each contract relationship relies on building a common understanding between two parties. When you subcontract down, you're guaranteeing to your client that you can produce an equivalent understanding with your subcontractor, simultaneously with a contract negotiation and scheduling to actually get the work done.
When have you ever seen such perfect communication and understanding between even two people? It doesn't happen. You're playing the classic telephone game with thousands of dollars at risk.
Compromises and flexibility are necessary for any project, but every layer increases rigidity. Want to accomodate a special request from the client? Better get approval from your subcontractor first, and hope that they haven't subcontracted even further.
No thanks. It's time to stop.
Emotion and motivation are huge factors in productivity. It doesn't matter how diligent you are, how focused you are, or how amazing your skills are. If you don't care, you won't produce the best.
It's human nature that the farther removed we are from a project's ultimate purpose, the less we are able to care about it. Whether the goal is delighting users, making money, building a business, humanitarian work—or all of these at the same time—every layer of contract terms, negotiations, pricing, and red tape will diminish the emotional investment of the participants and the quality of work they're able to bring to the project.
Over time, operating at low levels of passion will erode your craft. Don't risk it.
Teams are strong because they have common goals and commitments. If parts of your team are literally only present for the money, and not committed for the long haul, you can't invest your resources in developing and bringing out their best work, knowing they might be gone at any time.
The churn of subcontractors will compound your time required to manage the team, as there will be no time or incentive for members to build efficient communication structures—learning how to work together.
- Subcontracting upstream can be momentarily lucrative, but outsourcing your sales pipeline means you'll never know when you'll have work, or for how long.
- Confidentiality clauses will limit how much you can talk about the work you've done, and keep your portfolio thin. It's particularly frustrating to be prohibited from publicizing the apps you're most proud of.
- Middlemen have no incentive to send you referral business. They win by keeping you available for their use, and in a weaker negotiating position.
What To Do Instead
Focus on building a portfolio of clients so that you're able to decline subcontracted projects.
Hire a permanent team, not mercenaries. Find excellent people who value the same things you do but have different skills, and commit to building great things together. If you're not yet able to hire a complete team, use your experience and network to be a connector. For example, as an app developer, you know more about working with app designers than your client does, so be a trusted advisor as they find and engage a designer for the project team.