Wednesday, 15 March 2017

When is a Prototype not a Prototype

When is a door not a door ...

... when it's ajar

Throwing away things that we've put effort into creating is not something that comes easy to most of us. It is hard to look at our outputs without seeing the hours and days of effort that went into their creation. Yet throwing away previous efforts is exactly the right thing to do when it comes to prototyping, or the consequences can be dire.

When is a prototype not a prototype?...

I'm not going to discuss in this post the merits of prototyping, suffice to say that an effective prototype can provide a massive learning opportunity. Whether or not to prototype in any situation is not really pertinent to the focus of this post. What I do find very interesting is that, whilst I have seen seen lots of what I would consider to be prototype code, it's rare that I've encountered a capability that was openly described as a 'prototype'.

What I have seen are 'proof of concepts' to demonstrate and trial a capability, or 'pilot' software where a product is being trialled on a subset of users and doesn't have to support the full scale of production use. I've seen 'innovations' coming from 'innovation silos' (where an individual or small group in a company has cornered the market in product innovation) which serve to demonstrate a new development. But I've rarely seen an honest, openly labelled prototype.

...when it becomes a product

Is there any problem with calling our prototypes something else? Well yes, there is a gigantic problem with it. Using the appropriate shared terminology is vital in understanding the situation we are in. In my opinion the correct approach in all of the situations I described above at the point of deciding to progress these capabilities into production would be to... wait for it... write it again using the existing code as a throwaway prototype. The team developing the production code would take valuable learning into that development from the existing capability and create a high quality piece of software from it. Unfortunately I've seen too many situations where this is not what happens.

Given that so many involved in developing and testing software are so aware of the perils of implementing poor code, it seems somewhat surprising that we'd ever allow the situation whereby we're trying to take prototype code into production, yet I've seen this happen many times, and often the development teams have little choice in doing so:-

  • In some cases where the code has come from an innovation silo, it has not been made clear that something is only a prototype. This is usually because doing so would rely on the innovator admitting in delivering low quality throwaway code, something that they're disinclined to do.
  • If a pilot capability hasn't been delivered to production quality, it can be a huge challenge to persuade the business of the need to rebuild when it is already being used, albeit in a limited capacity.
  • It is an unfortunate truth that, if you demonstrate a working piece of software to a C-level executive or customer account owner, it is then hard to persuade them that the next step is to throw it away and build it again, but this time 'properly', after all - you've just demonstrated it working.

Instead what I've seen happen on to many occasions is the decision is made to take the existing code as a starting point and turn it into a production quality piece of software.

This rarely ends well.

Turning prototype code to production code is a time consuming activity that yields little observable value outside the development team, as it generally involves such 'trivial' concerns as:-

  • Adding error handling and validation
  • Adding logging for monitoring and diagnosing faults
  • Putting in place proper decoupled architecture, isolating component responsibilities and defining interfaces
  • Adding transactionality around operations

All of this is critical to having a product that is genuinely ready for live use, yet delivers little in terms of new user facing capability that business owners can see as progress. Inevitably the development team come under pressure for taking so long to tidy up something that appeared to work with all of the features they needed. In one extreme example I had the CEO say to me of a particularly risky piece of research code written in a loosely typed script language -

'now we just need to test it, right?'.

Well wrong actually, what we needed to do was rewrite the whole thing in a more appropriate coding language that supported strong typing and at least compile time validation of parameters across function calls and interfaces, but that was not what he wanted to hear.

Shooting fish in a barrel

For testers this is a confusing and frustrating situation. Their initial explorations will typically expose a wealth of issues which should result in rethinking the entire approach but inevitably do not. Instead one of two things happens.

  • A massive onus is placed on testing to reduce the risk of release through bug finding.

    This is clearly an expectation which is not only impossible but demonstrates a lack of understanding of what testing is there to achieve (like giving someone a dilapidated old Datsun Cherry and expecting them to 'test' it into a Ferrari). The code has not been built incrementally to a high quality and so finding bugs in this situation is far too easy and, whilst potentially fun, is wasteful for the company and the skills of the tester. Error handling and validation and other basic requirements are eventually built in but, as these are done in response to the bugs found the result is that this takes longer and yields less consistent results than if it had been done as a consolidated activity during the creation of the software.

  • The testers are warned by management not to test 'too thoroughly'.

    I'm not quite sure what they are expected to do in this situation. All I can assume is that in order to release if the process is that code has to have been sprinkled with the 'magic fairy dust' of testing, then if this can be done without slowing things down by actually (gasp) looking for problems that would be a great help. On one occasion years ago I was actually told to test the 'easy bits' whilst avoiding any of the high risk areas I'd identified in my initial analysis of the system - sigh.

Other options

There are, of course, other options. Rather than attempting to test out an entire process with throwaway quality code another option is to create a 'tracer bullet'. A tracer bullet has a very different purpose to a prototype. Instead of a throwaway model designed to learn about the viability of a feature, a tracer bullet is a fully production quality but very narrow implementation of a small slice of the target feature set, which can be used as a starting point for evolutionary development. In the reference links there are some discussions around the purpose of tracer bullets. Here I'm referring to a thin slice of production code to help answer questions around architecture and interfaces, rather than a more incremental concept of developing slices and getting feedback, which some might consider 'evolutionary prototyping' however I consider implicit in an agile approach.

I recently had the pleasure of being involved in a cross team activity involving multinational teams to demonstrate an integration capability. I mentioned my determination to avoid the expectation of being able to implement prototype code with the developers. I was pleasantly surprised when they adopted a tracer bullet approach. In the session they developed an initial very thin but working slice of the integration that we could then directly implement and expand upon to create a production capability. It would have been all too easy to deliver a low quality prototype here and generate false expectation in the group around a realistic pace of development and the level of progress. Instead adopting a higher standard to a narrower piece of functionality provided a great starting point for the ongoing development.

Kidding ourselves

We do have a habit in software of kidding ourselves. Like cigarette smokers we go into a kind of state of denial that our bad habits will ever catch up with us and tend to repeat them over and over. I remember when I was a smoker I was terrified of the word 'cancer'. I didn't want to associate the grievous potential outcomes of my habit with the habit itself. Openly giving things the right names helps us to be honest about our situation, and software development is no different. By hiding prototypes behind terms like 'proof of concept','pilot' or 'spike' we are creating a loophole in our quality standards. We're excusing an approach of coding without rigour and testing, which is fine for a prototyping or research activity, but not the basis of a solid product.

My recommendation if you see this situation in the future is to openly and loudly use the word prototype at every opportunity.

  • I'm just working on some PROTOTYPE code
  • I'm not planning on testing the PROTOTYPE any further as I've found to many bugs, I assume I'll have more testing time when we develop the real one?
  • Is that the customer who are still using the PROTOTYPE version?

OK maybe you need to be careful with this, however promoting honest conversation around the state of what we're working with is the first step to avoiding some painful soul searching later.


Image: Old Door by Oumaima Ben Chebtit

Sunday, 19 February 2017

The Innovation Silo

Who is responsible for product innovation? Is it an individual, a specific role, a devoted team, or is it everyone? I can tell you now that unless the answer is the last of these options then you could well have a situation that undermines the motivation and performance of your development group.

The Innovation Silo

A couple of weeks ago I was discussing with a colleague the challenges of innovation. We'd both encountered in previous roles the situation where one individual or group was given a free role on innovation. These people went by different titles, either as individuals or teams : Chief Scientist, Architect, Research Team. The result was the same: those given the freedom to research and innovate would perform those activities in isolation from those working on the main product streams, operating in what was effectively an 'innovation silo'. The focus of the innovator's activities would be to come up with advances in technology or capability. Their output would be aimed at senior management, with the goal of demonstrating to them a 'working' capability of an idea that they had developed and obtain approval to push it through to production.

The Motivation Sink

Arrangements like this were great ... if you happened to be the ones in the innovator roles. These people enjoyed a high level of job satisfaction and operated with a low fear of failure as their work was rarely exposed directly to live use, instead it fell on the regular development team to take these initiatives and carry them through into production.

In addition to inevitable practical issues of handing over prototype code, (which I've decided is a big enough topic to merit a post of its own shortly), the problem was that this arrangement caused a huge amount of frustration for the individuals that weren't part of the innovation activity. The freedom that one individual or team enjoyed came at the expense of many other developers and testers working hard to deliver the commercial obligations of the company. The people who were responsible for the day to day delivery of release schedules and customer deadlines would rarely have the time or the freedom to try out new ideas, unless done in their personal time. The closest many would come to innovation would be in struggling to understand, implement and test designs (if they were lucky) or code (if they weren't) of new products or features which had been created by someone else.

The inevitable outcome of this type of activity on the development and testing teams is demotivation. Fundamentally what we are saying to these people is - "we don't trust you to come up with good ideas". Not only is the exciting work of innovation and research out of reach to the rest of the development group, but to add insult to injury they are then asked to take the output of that innovation and perform the necessary yet uninspiring activities that are so crucial in software, and deliver these in an atmosphere of unrealistic expectation and high fear of failure. I've never encountered the situation where a developer was ecstatic to be working on someone else's code, however at least when that code has been working as part of a live system there's an element of respect in it. When the author of the code has never had to expose it to formal testing or the rigours of production use then that respect is absent and resentment can result.

The arrangement places testers in a frustrating situation as well. Being isolated from the process of innovation results in a separation from the goal of the development. In order to perform effective testing a tester needs to be on board not only with the behaviour of a solution but also to have a keen grasp of the problem that is being targeted. When product research is performed in isolation from the testing group then testers are forced to work within the solution domain. Any benefits of having the critical thinking of a tester integrated in the design process to question decisions and refine early designs is lost. Even if the tester does have valid concerns it can be politically difficult to raise these in the face of support from influential technical staff backed by senior management. Instead the tester politically and practically is compelled to limit their frame of reference to what functional understanding they can gain from behaviour of the developed solution. Their role is diminished to a confirmatory one of verifying existing behaviour rather than a wider scope of questioning value.

An open innovation

I'm hoping that I've just been rather unfortunate to see this type of relationship in more that one of my past jobs - I'd be interested to know in the comments here whether anyone reading this has encountered a similar situation. It it a common scenario for opportunities for innovation to be restricted to a chosen few?

I'm sure that many companies out there have very open and inclusive approaches to innovation, and I'm keen to help make sure that my current company is one of those - so what are the alternatives to innovation silos? In a recent product workshop I ran, some ideas that we identified to avoid this kind of situation included:-

  • Getting everyone in the company on a user feedback forum to share their innovation ideas and vote internally for their favourites
  • Allowing people time to pitch their ideas and provide the support for small cross-functional teams to be created to develop them together.
  • On a similar vein one of the developers at River pitched an interesting idea recently of having 'ideation sessions' where at regular intervals different cross functional groups were given the chance to try out an idea and develop it.
  • Having innovation sessions at whole company days to get everyone involved at the same time to generate ideas.
  • Developing and trialling new capabilities into our own internal version of our engagement software

Whatever form it takes, I think the important thing here is that everyone should be able to contribute and feel part of innovation activities. At the very least everyone should feel included in the process and able to actually raise their concerns over any new approaches being adopted.

As I stressed in my post on 'sharing the vision' there's a huge amount of value in simply having all of your team members engaged with a vision and able to identify connections and opportunities that help to move towards it. You don't have to be the smartest person in the company, with a job title of 'Scientist' or 'Architect' to come up with an idea that advances your capabilities. Naturally some individuals are more inclined to innovation and will generate more ideas than others, however at the same time many great advances come from simply making connections, such as applying an existing approach to a different problem, which anyone can do. The less we think of innovation as part of a role, and more part of an organisational culture, the more likely we are to get everyone driving and supporting our innovations rather than resenting them.


Tuesday, 31 January 2017

Sharing the Vision

When you work in the field of employee engagement , as I've done for the past year at River, it's hard not to pick up a thing or two about the subject. Luckily for me this was already an area of interest - as I wrote in this post I've always placed a high value on the motivation and personal development of the individuals in my teams, so working in the field of employee engagement is a great opportunity to extend my own knowledge in an area I care about.

Whilst researching the subject of engagement, one strong driver of people's commitment to their employers that I've seen referenced as crucial across a number of studies is when they share in a vision of the company's goals and culture. This sounds like a simple thing to achieve, however many organisations struggle to do exactly that.

The importance of vision

Studies such as this one of employee engagement and motivation, such as this one have identified the feeling that you are a contributing part of a larger vision for your organisation as one of the strongest factors in engagement and motivation. In fact some studies have concluded that a feeling of being part of a wider vision is the single most important factor in employee motivation.

But what do we mean when we talk about a vision? Well what I'm not referring to its a facile written statement, posted on the office wall - although I'm aware some organisations seek to compensate for an absence of genuine vision with just such a weak imitation.

This is not to say that vision statements themselves cannot be inspirational - this list of vision statements for nonprofits organisations contains some wonderful examples (though you have to admit the creation of an inspirational vision statement must be somewhat less challenging when ones organisation has such inspirational purposes). For organisations with less altruistic goals the encapsulation of the vision into a one line statement can feel contrived, and I personally find written vision statements in isolation from company practice or principle both trite and unsatisfactory.

A vision is, and needs to be, more than a statement. Just as in agile development we describe a user story as a place-holder for a conversation, so a vision statement needs to act as a place-holder to summarise the common values, goals and behaviours that characterise the employees of an organisation. A company vision is more like a shared consciousness of where we want to be, and how we want to get there and has to be not just understood but embodied by the individuals working for that organisation.

Missing the vision

Given the importance of a vision it's surprisingly easy to overlook when hiring teams and structuring work. This HBR article quotes 95 percent of employees being unaware of the company strategy. In development specifically I've seen situations where there simply isn't a high perceived value in sharing corporate goals with development teams. Perhaps it is the often quiet, focused nature of roles such as development and testing that results in the perception of people in these roles as resources that can be moved around interchanged, needing only their immediate inputs and outputs to be defined to deliver effective work. It is easy to target peoples' efforts on tackling the feature developments, bug fixes and releases that the make up the day to day activities, without considering any value in their understanding the wider organisational vision.

Why would we worry about missing the vision? As we tackle the tactical work that is prioritised around our immediate needs there will be opportunities to advance ourselves towards our longer term goals. Whether or not we take these opportunities depends heavily on whether the individuals working on those activities identify them as important. I've seen very successful cases of teams identifying opportunities. For example a team working on a customer website project recently identified the addition of a new user role in the programme as an opportunity to start introducing a content management capability that was one of the long term strategic aims of that programme.

On the flipside, opportunities can be missed if those involved don't have context of a wider purpose. I've also encountered projects that deliver value in the project context in question, but miss the opportunity to deliver value on a more central strategic level for the organisation of the work had been approached slightly differently. If the whole team is not on board with the strategic goals of the company then opportunities can be missed.

Vision workshop

Small companies, such as the ones I've worked in for the last 12 years, often have a distinct advantage when it comes to sharing a vision in that they are likely to have a much more accessible CEO or leadership team than larger organisations. Having a leader that can interact directly with employees is one of the key strengths of smaller organisations and I believe can provide competitive advantage in the motivation and engagement that it can drive. Software development and IT teams in particular can be operational silos, separated from the roles with a more direct business connection. Having access to top level leadership who can convey the importance of the work that is being achieved across a company is a huge benefit to these roles.

Recently I organised a workshop day with the main aim of sharing the vision of the CEO with the new product owners recently brought into the company and to allow those POs the opportunity to cement their relationships with other key people in the company. An introductory session from the CEO on the history of the company justified the day before we'd even hit lunchtime. I'd not previously appreciated the direct historical link from the very first engagement rewards company to the modern company that we were now part of. Learning the history of River and how this has shaped the programmes and capabilities now being offered was both interesting and important knowledge for the attendees to understand.

In further sessions we explored our capabilities across various customer programmes and examined how these fitted with the theories and models of engagement which are relevant to our business domain, as well as looking at options for how to validate new ideas and innovations through the research and development lifecycle.

Whilst some elements of the day were more successful than others, for example the sessions probably generated too many high level ideas at the expense of practical implementable suggestions, overall the value of having the Product Owners in a room with the experience of the CEO and creative and UX folks discussing our products was invaluable in instilling in them a vision of the company and where we wanted to be.

making your own vision

Not everyone has the autonomy to arrange events such as the one I just described. Even those that do sometimes don't have the luxury of an inspirational leader or a company situation that they find engaging or motivating. The good news here is that in my experience it is still possible to engage people with a vision in the form of a group cause that people can get behind.

At one point in a previous role the development department were struggling with motivation. A significant change was being imposed externally which as a group we had little control over or belief in, but risked a damaging impact on the quality of our work and our pride in it. It was a challenging time where engagement was in short supply. Whilst it was never going to be an inspiring project, I focussed on establishing a collective cause for the development team. Our goal was to take ownership of the situation and do the best job that we could of providing a quality delivery. As a group we renamed the project to introduce some team ownership of the situation. We established the work we were able to do in the short term to understand and improve the status of it and defined and communicated appropriate approaches to refactoring, testing and documenting the changes (the testing was based around my mind map for testability).

I believe that the work done in the time available on that delivery was exemplary. As a group, having a shared vision of what we were working towards really helped us to gel together, when it would have been easy to descend into melancholy and denial of the situation.

Just do it

"If you are working on something exciting that you really care about, you don't have to be pushed. The vision pulls you". Steve Jobs.

Even without inspirational leadership of the nature of Steve Jobs it is possible to create a vision within a department or team that motivates and inspires. This could be working towards an aspirational goal or simply collectively tackling adversity in a constructive way. Just as there are always going to be times when things aren't going as well as we'd like and a clear vision can help us in persevering, so it can be that when times are good a vision helps individuals to make connections and create opportunities to move us further, faster.

Having a higher purpose in terms of a group or organisational vision is such an important motivator that, if you don't have one, and you don't have access to someone who does, maybe it's time you made your own.