Failing fast

Leave a comment
Growth

Buzzword bingo

Failing fast.

A phrase you’ve probably heard countless times in agile literature, in books about start-up and lean culture, and in umpteen articles on the Internet. And yes, here I am: yet another monkey on the proverbial typewriter. Fail early, fail often, fail smart. In the software development world it’s safe to say that we’ve all been bonked on the head with the proverbial fail-stick enough times for it to have been driven home.

However, I would like to make an argument that the phrase has become so much of a buzzword that it has lost much of its impact. The phrase is applicable much more widely than within the bounds of your team’s scrum ceremonies. It’s applicable to all work that you do.

As a manager, the bounds of your work are wider than just the code that you and your team are producing. Your job is about doing the most with what you have as efficiently as you can. You are involved in discussions, hiring, processes, and decisions that can all benefit from the mindset and methodology that encapsulates failing fast. Before we look at specific scenarios to explain this further, let’s explore a factory metaphor that neatly demonstrates the core concepts.

A factory

Imagine, if you will, that you are running a factory.

Let’s pretend that the production line produces cars. We’ll envisage an unrealistic scenario where the factory builds the cars completely from end-to-end, starting with the raw materials such as sand, metals and plastics turning up in trucks at the loading bay. At the end of the production line the cars are ready to be sent to showrooms nationwide.

There are some observations that we could make about the production line. The raw materials are very cheap (e.g. sand) when compared to the end result (a car). Therefore at each stage of the production process value is being added. A moulded, painted bonnet is worth more than the raw alloy that it is made of because a process has been applied which added more value. The same can be said about the cost of sand compared to a sheet of glass, compared to working electric heated window.

Therefore the closer that you are to the start of the production process, the more options that exist for what you can do with a given component. For example, even after sand has been made into glass, you could still make a window, windscreen, or mirror. For comparison, it’s a lot of effort to turn a finished car into a motorbike, even if the raw materials and components have many similarities. It’s hard to disassemble and go backwards.

This highlights the issue of waste. The more value that has been added to a component, the less reusable it is, and the more there is to lose when failure occurs. It is more expensive to fail further down the production line. It would be much better to check for defects in the sheet glass immediately after it has been made rather than discovering the defect in an installed windscreen at the end of the line.

If you were running this imaginary factory, I suspect you would be embracing the principle of failing fast in order to prevent issues upstream where they are more expensive to deal with. I find that when imagining the creation of physical products, from cars to computers to furniture, the principle is fairly obvious. But as a manager in mainly knowledge-based work, have you had ideas, projects, and decisions take a long time via lot of effort only to be thrown away?

Will we ever learn?

The ideas factory

The production line that produces software is complex and also much less tangible than the physical products that we alluded to in our example. Additionally, as a manager in a knowledge-based job, there is more to your role than just producing software. There are processes, discussions, prototypes, ideas, happy and unhappy staff, hiring… you name it. There’s a lot on the periphery. Can we apply the fail fast principle there too? I think that we can.

Let’s loop through some examples of areas you will operate in as a manager, and see where the fail fast principle can be used.

  • Software development. This is the area in which it’s likely you’ve heard the phrase used most often. If your production line is creating software, then failing fast is a very good idea. Do the riskiest and least known pieces of work first in order to learn more and fail if you need to. Do technical explorations as early as possible to fail smartly or understand what’s next more clearly. You don’t want to find yourself months down the line with code that you can’t work with. As lines of code increase in your project through ever more thought, time, and toil, the more value that codebase represents, and the bigger the potential waste if it isn’t fit for purpose. Get it right up front. Or even better, get it wrong quickly multiple times.
  • Product ideas. We can now move upstream to the Empyrean realm of product ideas and think about how we could fail faster there, so we don’t even need to consider writing any code! Before an idea goes anywhere near a developer’s keystrokes, it is worth considering that the more time that is spent on it, the more value that it has, even if it is still just an idea. How can an idea fail as quickly as possible? Let’s see. Can it be put in front of a user verbally or through some simple sketches to confirm that it’s worth doing at all? Before building something to test user adoption, can you fake a sign-up page to gauge interest? Can you build a quick financial model in a spreadsheet to see if six months of work pay off? Ideas can be generated and discarded so quickly and easily: capitalize on this.
  • Technical explorations. How can technical ideas fail fast? How fast can you prototype an approach to see whether it is going to suit your application’s needs at a required scale? Can you try something out quickly in the cloud to fail on somebody else’s hardware before you even think of buying your own? Instead of needing to collect petabytes of real data from production data stores in order to perform benchmarks, can you instead just generate petabytes of random data to meet your needs instead? The salaries of your technical staff are not insignificant, so you should be treating their time as an investment of company money. The same is true about serious production deployments in the cloud or in the data center: getting it wrong could prevent you from hiring a whole new team. Make sure that time and money is spent wisely.
  • Hiring. You’ll want to fail quickly with hiring. Is your interview process set up so that candidates that are not going to make the cut are screened out as early as possible? Do you perform a quick pre-screen on the phone? Interviews, like technical explorations, are an investment of time from your technical staff. Make sure that your interview process is like a funnel, with the best candidates getting the most of your time. Also, treat hiring decisions very seriously: you can consider the hiring process as adding value to a candidate, and when they are hired it becomes much harder to “fail” once you’ve gotten past a probation period. Nobody likes dealing with performance problems. It’s easier to say no after the second interview, or come to an agreement that it’s not working out after the probation period.
  • Decisions. The longer that a decision goes unmade, the more value that it gains, for better or for worse. Unmade decisions attract ever more opinions and become more diluted and complicated and harder to execute. This is especially true for decisions that are not being made because they may cause conflict, such as a strong veto that will inevitably cause some friction. Act confidently on decisions and do not be afraid to say no. If the team shouldn’t go in a particular direction, be firm and say so. Cognitive power can then be spent elsewhere with loose ends neatly tied.

Your currency

If you need motivation to fail fast then it can always help to think about time and money. One could argue that in the workplace time is money, because everybody there is getting paid; all activity can be considered an investment from the company.

If you don’t fail fast, you’re effectively wasting money. The bigger your team(s), the more investment that you risk by not doing so. A few engineering teams could easily represent a yearly investment of £500K-£1M. Thinking of it in raw currency, would you really let that project run for six months, or would you try to prove whether it is worth doing in the first two weeks? Would your team really interview those candidates with applications that you were on the fence about, just on the off chance that they were better in person? It’s critical to think about how you spend your currency, as your company expects a good return on their investment in your function.

In summary

You have a responsibility to ensure that you fail fast in all aspects of your job. After all, Plan C might have been the best plan all along. Bring the fail fast mentality to software development, product ideas, technical explorations, the hiring process and decision making and make sure that the company’s investment in your team yields the best possible results.

Are you unsure about anything you’re doing right now?

Force multipliers

Leave a comment
Growth

Now what?

It’s Thursday.

You stroll back to your desk from the coffee machine and before taking your seat, you have a stretch and you look around at your colleagues. Life is pretty good, isn’t it? You’re managing a team. People seem to think that you’re doing a great job. Your staff are a talented, happy bunch and you’ve got an interesting project with autonomy to build it in the language and framework of your choice. What could be better?

Hmm.

Something doesn’t feel quite right. You’ve wanted a stable team in a good company ever since you quit the role that will not be named a year ago, and now you’ve got it.

Still a strange feeling. So what gives?

Well, you’re ambitious and you’re not quite sure where to go from here. Is this it for you as a manager in this company? Will you be standing here on a Thursday four years in the future looking at exactly the same people in the same seats?

A sinking feeling develops.

The department’s headcount for the coming year is meant to stay constant, so you’re not going to be able to dramatically expand your team. What about the promotion angle? Unlikely. It’s pretty crowded at the top of the pyramid. Your boss is the CTO and she isn’t going anywhere any time soon. How can you continue to expand your output, influence and value if you’re stuck where you are? What can you aim for?

The equation

It’s a common dilemma. We are no longer patient when it comes to career development. Some considered that the architect Zaha Hadid, who passed away in 2016 at age 66, was “mid career”. Architecting buildings requires a lifetime to be considered a senior expert. Architecting software? Maybe not so much. Technology moves fast and so do promotions. Developers are sometimes grasping for Senior titles not many years after they’ve been legal to drink in the US.

How can we continue to apply ourselves in a way that increases our responsibility, interest and satisfaction in our jobs when we can’t rely on organizational change to hand us that sought-after promotion?

Let’s revisit the equation that Andy Grove coined in High Output Management:

A manager’s output = the output of their organization + the output of the neighboring organizations under their influence.

Reflecting on that expression, how can you increase your output if your team isn’t going to change size and you’re not going to be promoted in the near future?

Well, there are a bunch of ways, but you’ll need to think more laterally, both in terms of exactly what your own output is, and in turn, what you consider your organization to be. If you only consider your organization to be your team, then you’ll be limited. You’ll be tied to the current position that you inhabit in the org chart, and there’s only so much predictable impact that you can have on the future size and structure of the company that you work for.

How can you remain where you are, doing the same role, yet begin to measurably increase your impact? You can consider force multipliers.

Force multipliers

What do I mean by force multipliers? There are three broad categories:

  • Technical: You can make your technical skills go further. You can mentor others and teach them what you know, or you could be a technical advisor on other projects, offering your advice on design and code review.
  • Cultural: You can focus on improving the culture of the department by making it a more engaging and fulfilling place to work.
  • Procedural: You can focus on making department-wide processes better, such as the amount of time it takes to ship code to the production environment, or working on improving communication between teams.

For all of these force multipliers, you can decide as to whether you would like to work on them as an individual by setting an example of the change that you wish to see, or you can form working groups with your peers, meeting regularly and broadcasting your progress.

Technical

If you’re a manager in the Engineering department, then it’s likely that you have a technical background. Within your team you can spend more time on technical mentoring of junior members of staff. You can do this by sitting down and pair programming with them, always offering to be a sounding board for what they are thinking of building, being keen on sketching out approaches together on paper or whiteboards, and making a concerted effort to do thorough and helpful code review. It may require you to do less coding yourself; instead your output is through others.

You can extend this support outside of the team as well, depending on the time that you have available. If you have sufficient experience of the wider architecture of your application(s) then you can offer your help in the design of new parts of infrastructure, and act as a “networker” who can introduce engineers to each other; hooking an engineer who needs help up with a particular problem with the person you know to be the expert in that domain.

Even better, once you have a skilled team of autonomous engineers you can encourage for them to pick up the same technical mentorship culture with others in the company, effectively multiplying your output by having your mentees do their own mentoring.

Technical force multipliers make your department more skilled.

Cultural

Are there ways in which you can improve the culture of your department? As we’ve written about previously, culture is sometimes difficult to define. However, what would your department be doing if you were to imagine it with an amazing culture? Would it have regular technical talks from external guests? What about a closer link with the commercial side of the business, creating a heightened sense of hustle? Or perhaps it would have a regular video games night, lunchtime meditation sessions or hack days?

Rather than waiting for your wishes to be executed from from higher up in your organization, why not try and organize them yourself? Lobby around for interest, consult those that should have some say in the matter, and just do it. It’s very unlikely to cause harm.

Could you, perhaps, start working groups for broader cultural themes? As an example, at Brandwatch we have a social working group who arrange fun activities such as movie nights, outings and pub quizzes, and a wellness committee who have budget to fill the office with plants, put on regular company lunches and set up classes such as yoga at lunchtime. You could even start a blog in order to broadcast your culture to the world.

Cultural force multipliers make your company an even better place to work.

Procedural

What processes are bugging you and your team at the moment? Does it take too long to get code into production? Do code reviews take too long? Is it a pain to find documentation or is your hiring process convoluted? You could lobby support to effect positive change. These kinds of decisions should come from the bottom up rather than being mandated from the top down.

In a previous article I wrote about a management bugs initiative which was a method for raising, assigning accountability and fixing these procedural issues. That is a wholesale method for trying to tackle all manner of issues, but you could start off much smaller. What do your team find frustrating? Do any of the other teams or your peers share the same sentiment? If so, could enough of you get together to start making a difference? A concerted effort can snowball into a movement of people who join together to make things better for everyone.

Procedural force multipliers make work smoother and more efficient.

In summary

There’s always more that you can do.

Considering how to multiply your output by forming connections with others outside of your team (and even outside your department) makes you more impactful and valuable to your company. You can improve technical skills, culture and efficiency of process. Doing so introduces you to more people, raises your profile, and pushes you outside of your comfort zone so you can grow.

Go on, have a go.