I was reading the Economist's Buttonwood blog today; he has a great post about an economic trilemma in with relation to the recent Panama Papers leak. The essence of the economic trilemma is you have 3 valuable goals at fundamental conflict, thus you're forced to choose between 2 of them. It reminded me of a common trilemma I see in my profession.
I've seen it described in many words, but I think it's best distilled down to the maxim, Fast, Cheap, Good...pick two, as it captures the essence of the problem that goes beyond problems in software development. I think, in general, each permutation can describe the type of labor you're hiring for a project:
- Fast/Cheap: You're hiring a novice who can fudge his way through the problem. It might get the job done, but there's likely to be problems down the road toward technical debt, for example. To throw down another maxim, you get what you pay for.
- Cheap/Good: You're hiring someone that hasn't experienced the problem before (or your particular variant of it) and thus needs to, learn about, understand, and solve it with a well thought out solution. This is, essentially, receiving a willing-to-learn discount from your labor.
- Fast/Good: You're hiring an expert in his domain in knowledge. He's knows the problem well, as well as its taxonomy of variants; you're paying a deep knowledge & experience premium.
Depending on your circumstances, each of the above can be the best decision to make. It really depends on the circumstances at the time. I try to navigate my clients to the best one given the knowledge of the situation.
- Fast/Cheap: In many instances, this is appropriate when someone has solved the problem at scale—WordPress, Medium, Blogger, Tumblr, et. al. are all great publishing platforms with an existing community—so the cost is very little, or it's okay to compromise on quality for expediency; much of the web is a marketing cost for a company ("50 percent of advertisting is wasted...") , if you're only concerned about getting your message out or you want a MVP to fish for unknown customer demand, you can worry about corners cut later.
- Cheap/Good: I think this best describes most long-term hired employees and the world at large. Both employer/employee has something each other wants with the opportunity presented (e.g. Company: "We need to invest machine learning!" Candidate: "I know linear algebra & have dabbled with Tensorflow!") and that produces a mutually beneficial relationship for the two. For hiring a freelancer, this might end up as fixed-price contract where there's give and take between both parties.
- Fast/Good: Sometimes paying a premium is worth it; if you don't have the resources or talent available, and time is of the essence, you'll want to find the best and brightness to get you to the goal in a timely manner. In other times, you need an expert to spread wisdom to the otherwise clueless who would spend much time searching for the answer.
Between projects, I'll find myself between these attributes (no man is a static set of attributes); while I attempt to focus on my core knowledge that I want to cultivate (Fast/Good: Drupal development / consulting, working with other Drupalers in the community, new projects, etc.), sometimes I work with clients on a long term basis (Cheap/Good: expert Drupal knowledge extended to areas that I haven't touched or ongoing maintenace projects), but at times I need to employ a GSD attitude because I don't want to define solely define myself as as a purveryor of type of service (Fast/Cheap: CEO: "Google Analytics is broke and our SEM guy is gone!" Me: "I have some knowledge of GA so I can probably figure out with some trial-and-error and Googling.").