Thursday, October 08, 2015

On Being A Consultant

I've been an engineer for multiple decades. I've been a consultant for more than a decade. I've only been a great consultant for a few years.

It took me a few years to become an master engineer. It took me decades to become a master architect.  It has taken me longer to become a master consultant.

Growing up through the ranks of Microsoft and shipping products such as Visual Studio can teach one the value of delivering technical excellence, but not necessarily the soft skills and relationship management to make the process smooth and experiences positive.  In truth, surrounded by anti-social geniuses it was as easy to learn bad business habits as it was to learn set theory and how write elegant code in one pass.

Becoming capable as a consult required an unlearning of many aspects of the engineering value system. Similar to the inspired theory made famous in "A Beautiful Mind", it requires solving for more than one definition of the right answer. Which inherently invalidates the idea of getting something right the first time without any interaction.

As I learned to find a balance, I realized that I enjoyed the process of finding this balance. That bringing together strictly technical elegance and the wider spectrum of elegance in business was in itself a unique type of challenge that I found rewarding. Which is why I have not found myself particularly at home in large corporations doing maintenance on legacy systems year in and year out. Or even within the same enterprise solving and re-solving the same problems over and over for incremental refinement. Instead I am most at home when I can bring together seemingly unrelated solutions to craft evolutionary advancements where the impact can be significant. For example, using the same sophisticated algorithms that solve just-in-time manufacturing problems but applied to slotting seats and routes for an airline. These problems are many but they are intrinsically non-repeating. And therefore making a consistent income from this type of interesting work requires exposure to many industries and many clients. If one wants to keep doing innovative work for innovative companies, one must always be searching for the next bit of innovative work. And therein lies the rub. While I am working, I prefer to be focused on my work, not on finding the next bit of work that will bring me income once this current bit of work is completed.

Which leads me to the online marketplaces and project boards as a means to expand the pipeline of available opportunities. Recently I decided to start working with some "new" agency types as a means to extend my network. While my social and client network has no seeming end to the need for talents such as mine, there are indeed limitations and the idea of increasing my pool of opportunities from a much larger perspective is enticing. Previously I have been reluctant to post my profile in more publicly trafficked spaces because of the lack of oversight and proper vetting. My time is valuable and my talents unique, so it makes sense that I would employ a buffer between my time and the deluge of clients who don't appreciate that I am not the best choice to build the [landing page|brochure|insert mundane UI here] for their [flower shop|dry cleaners|insert small business here].

After a few experiences I have concluded that these "new" types of agencies are really the same old staffing agencies and development shops in disguise. The worst of these has been TopTal which is really just a bunch of elitist shysters who have found an interesting marketing approach to increase their margins while providing no additional value.

Friday, May 08, 2015

The Iron Triangle

There is a concept in technology known by some as the Iron Triangle. I tend to approach it through the simple adage:
You can have it fast, cheap, or right. Pick two.
What this tries to make clear is that building anything requires a trade-off between how quickly you want it done, how much you are willing to pay, and how important it is to meet a need completely. The first tends to be obvious, because everyone wants everything as soon as they can get it, preferably now. The second is also straight-forward because everyone tends to think that everything should be low cost, preferably free. The last one is where things start to get complicated.

Do you value performance? Accuracy? Precision? Reliability? Maintainability? Scalability? Everyone has their own ideas about what "right" can mean, and sometimes they don't even bother to understand what they think "right" might mean before they start making assumptions. In the same way, we just assume everything is free and everything will be done right away, we blindly assume everything we produce will scale easily, work repeatedly and be easy to maintain.  We might be asking for a very intricate algorithm, but we don't even bother writing down the nuances of all the conditions and error cases.

How can anyone accurately estimate the effort to build something without having a solid definition of what "done" means? If you can't take time to write down your expectations, it seems unreasonable to get upset when these hidden expectations aren't met. Simply put:
A lack of planning on your part, does not constitute an emergency on my part.
It's good in theory. But in practice, people seem entirely comfortable being completely unreasonable on a regular basis. Which I suppose keeps consultants like me in business. So no complaints here, just observations.