The simple fact of the matter is that we care too much about the quality of what we do and the environment in which we do it in. That's why, for a few years now, we have not subcontracted for other people and we have not subcontracted out any of our work.
Subcontracting for other people
After a few failures working in a situation where we are subcontracting for somone else we realized that because we didn't have a direct responsibility to the end customer, and very often no direct lines of communication, we were not able to properly introduce them to our way of working and to properly set expectations. When we were left to communicate through someone else in order to ask questions, talk about deadlines, etc. there is the danger that it's not being told like it needs to be told in order to properly set expectations.
In addition, in a subcontracting situation, you are often beholden to a third party for invoicing and collection. We invoice our clients on a weekly basis, with Net 15 terms. All too often, when we didn't have direct access to the end customer we were left waiting for our invoices to be paid while the person we were subcontracting for waited for their client to pay them.
We are in the business of working on successful software projects. We are tenacious about identifying things that aren't working for us and stopping doing them. Every once in a while, we identify something like this that becomes a real core principle to the way we work. These principles, or rules, stand as guidelines to remind us what we need to do in order to ensure success.
Subcontracting out work to others
We also had several instances where subcontracting out work to others didn't quite work out, and so have stopped doing it. Everyone who works for thoughtbot is an employee and we don't subcontract any work out.
One of the main reasons why we don't do this is that we found it difficult to maintain our high level of expertise and quality when we were subcontracting. Additionally, we care very much about the environment and comraderie among the team. In cases where the expertise may have been great, its still hard to integrate that person into the culture of the team, and the contractor is ultimately always an outsider.
I know many firms find themselves subcontracting work that is not their core area of expertise out to other firms so that they aren't turning away work. I'd rather turn away work than take projects which aren't a good fit for us. If there is a component which isn't quite right for us, we assist the client in making a relationship directly with someone else to do the work above, for the same reason that we don't subcontract for people.
Also, working within our core expertise has allowed us to become experts at what we do, which has so many more benefits than the extra revenue we may get by being able to take on and subcontract Flash work.
Breaking the Law
Because these rules are there to guide us, of course there may be situations where we might subcontract for someone or subcontract to someone (there hasn't been in quite some time) if we try to make the relationship directly with the end customer and subcontracting is the only way we can work, but we think the project might be good anyway. The rule causes us to remember why we created it in the first place: 1) lack of direct access to the client 2) dependency on a third party for invoicing and collection 3) inability to integrate subcontractor onto the team 4) problem maintaining high level of quality. If we can subcontract and still work around those key sticking points, then so be it. However, at least we are then making the active decision. We've thought it through and decided that the project can be successful in spite of it, rather than just blindly taking any and every project and praying for success.