I’ve been working with IBM Watson and cognitive computing for a while now, and I have seen a lot of really amazing and innovative applications of cognitive technology by our customers. Customers take combinations of the cognitive capabilities of Watson, and combine them to provide capabilities, insight, and intelligence that is unique and game changing.
Often these efforts begin as small prototypes, showing the potential of the application being developed. They are bare boned, lack an attractive UI, and just show the promise of what could potentially be a new and powerful capability. They have no security, and don’t address any of the other non-functional requirements of any enterprise application.
As these prototypes evolve, they are used to generate interest in further funding their development – and this is where things begin to get tricky. Up to this point, the prototype has displayed great promise and raw capabilities with relatively little effort. The development team is either very small, or limited to people doing this in their “spare time”. Getting the thing 50% or 75% completed has taken a relatively short amount of time, cost very little, and has been done through the efforts of a small group of people.
Once the enterprise concerns need to be addressed, the costs and effort begin to balloon. Adding fully functional security to a project requires effort, as does the need to build a scalable and robust architecture. Management begins to think that the team has gotten dumb, as the “last 25%” of a project takes twice as long and costs twice as much as anticipated. It is at this point that many organizations abandon their cognitive efforts.
Some organizations do continue their efforts, and when they do, they are rewarded with a new cognitive capability that provides them with benefits that they cannot get with their existing tools and systems. So what makes these organizations successful, while others are not? I’ll explore this a bit in this series of blog posts, and discuss what you can do to improve your chances for success.
Getting Some Terminology Straight
This post is focusing on the organizational and business concerns that you will encounter in the development of a cognitive application. One of the largest sources of confusion between the business people and the technical staff is in the terminology used to describe the maturity of a cognitive application. Terms like “prototype”, “MVP”, “pilot”, “proof of concept” (or POC), and “production” get thrown around, and there are different understandings of what they mean.
I asked a bunch of Watson architects for their definition of these terms, and we all had some differences of opinion. So we discussed it, argued a little bit, and generally hashed it out. We ended up with this progression of application maturity:
Demonstration (Mockup) – this is exploring technology for understanding, developing, and managing requirements. This is something that is done so people can say, “Now I see what you mean…”
Proof Of Concept (POC) – this is a collection of services and code that show what cognitive services can do, with a functional but not fully polished UI, that show the basics of a technology. It helps determine the feasibility of implementing some cognitive capability, and focuses on the highest risk area. It is meant to a focus on figuring out what you don’t know and can only figure out by putting code on machine (and in the case of Watson content, by pushing data through our APIs). The POC is not really polished, and could be completely thrown out (depending on what you learn) before moving to the next phase.
Prototype – This has a more fleshed out architecture than a POC, consider it a big brother to a POC. This is a simple collection of services and code that show the basics of a technology, and the beginning of an architecture for a product. It should handle most of the primary use cases for a product. Still not fully polished, it could be considered a bit “rough around the edges”.
Minimum Viable Product (MVP) – this is the next stage. A collection of services and code that provide a fully functional use case, with a “happy path” and some alternative paths fully realized. It can stand on it’s own. A fully functional UI, but potentially a limited set of functionality and capabilities, that may only serve a subset of the intended user population. The core of the architecture has been completed, and there may be extension points for anticipated future enhancements.
Pilot – an initial release of the MVP application to a small subset of the anticipated user community. Used to help solicit end user feedback and to allow for the “hardening” of non-functional pieces of the architecture (performance, scalability, etc.). It’s where you learn to operationalize the application (even though you should have been doing this all along).
Production – A production system is the full system suitable for use by the complete target user group with the level of robustness and functional and non-functional capabilities that meets stakeholder expectations.
You might agree with this progression, or you may think we’re wrong. It doesn’t really matter, what does matter is that your technical and development teams and your business stakeholders have a common understanding of the terminology used and the progression that it implies. Otherwise you run the risk of having a huge misalignment of expectations. Technical people will know that a large amount of work is needed to mature and “harden” a prototype into an MVP, while your business stakeholders may see the prototype and think to themselves, “we’re only a week or two away from being able to make this available to everyone!”.
Have a real solution to a real problem
One of the key things to being successful is having a good idea for a cognitive application. Many people come up with “cool” ideas for applications, and even create new and inventive capabilities using the IBM Watson cognitive services. This is great – but it can lead to you burning time on projects that will never be funded or fully supported by your organization. These types of things should be done as “open source” projects. Develop your idea, learn more about the capabilities, and share your ideas with the world – while demonstrating your understanding of the cognitive space.
For those of you working for an organization that you want to fund and support your idea, you need to make sure that your idea provides a real solution to a real business problem. It should provide a competitive advantage if not save your organization money, or both. You should be able to roughly quantify the benefits of your cognitive application. If you want your organization to spend money to develop your application or solution, they have to have a reasonable expectation that your efforts will be worth the time and money spent. It also needs to have a clear benefit to the end user. If nobody wants to use this, then how much benefit can it really have?
The best way to do this is to build a two slide slide deck. I know, I know…. Powerpoint and slide decks are evil – but in this case your effort will save you time and provide a vision for your efforts in the future. Slide one should be a quick description of the problem that your cognitive application or solution will solve. Describe the problem, and highlight the negative impact that it has. Get quotes from leaders within your industry or organization that highlight the negative impact – and use them. Slide two should be a high level description of your cognitive application or solution. Don’t get too detailed – just describe how you will solve the problem, and then highlight the benefits of your solution. Don’t neglect to highlight the consequences of failing to solve the problem, it helps put the effort into context. Now make sure that EVERYONE on your team has access to this slide deck, since EVERYONE (developers, business analysts, project managers, and the receptionist) on the team should be aware of what your primary goals are, and should be able to communicate that.
I know that this is “Business 101” kind of guidance, but you would be amazed at how many teams are unable to explain WHAT they are building, and WHY it is important. Even worse is when the technical leadership thinks that they are building one thing, the business leadership thinks they are building something else, and the development team is actually building something that is neither of the two. It is also important that you keep this deck updated. Keep in mind that situations change, and that the benefits of your solution may change based on your competitors, the business environment, and other outside factors. The key here is to keep it simple, brief, and easy for EVERYONE involved to understand. You need to be able to “sell” this idea to anyone who questions your use of people, time and money – from the most senior Executive, to the most junior developer.
So now we have an idea, a mission for the team, and some succinct benefits that your cognitive application or solution can provide. That should help us articulate our vision and our mission to our technical stakeholders and our business stakeholders. We should have ALL of the people involved having a similar understanding of how things will progress, and what it is that we are actually building. In Part 2 of this series of blog posts, I will explore the use Agile development methods, and how to dig into the real work of developing a cognitive application.
Thanks to my fellow Watson architects for their input and observations on cognitive application maturity. The version that I shared in this blog post bears little resemblance to what I originally started with….