New Year’s greetings is always an opportunity to contact people and I did call someone I had not been talking for a while. As we are in the same consulting business, we soon were sharing views about how things were doing, and I asked him about a company where we have been working together.
He told me that their projects had been going so chaotic that they decided to outsource their applications. They recognized that they failed in maintaining the source code: too complex, too much difficulties to implement evolutions without generating a lot of defects, schedules not met, IT image and credibility going down.
My first thought was that they had made a great step ahead: they know that they do not know.
There is a Learning matrix that describes the 4 stages to go from unskilled to skilled. It has been used in a lot of domains, and I did remember it watching a video about learning poker.
Usually, when someone begins playing poker, he thinks that knowing the rules and some basic strategies is enough. Some will play aggressively because they have seen some champions winning large sums of money or tournaments, applying a constant pressure on their opponents and using tremendous bluffing lines. Others will follow the basic ‘tight is right’ strategy and play only premium hands. Most of the times, all will play accordingly to the value of their cards and will not recognize situations when they could win with a low pocket pair and when they are crushed with two Aces.
I like the analogy with poker because this is a game of imperfect information: you must take decisions with poor information, as with most management situations. Now let’s take another example.
You have always been amazed by a friend who is a very good cooker, her ability to realize complex dishes and tasty food without any effort, or you never miss this TV program where a famous ‘chef’ teaches how to cook beautiful meals. So you decide to give it a try, buy a couple of books, some cooking utensils and a lovely kitchen apron. Even if your first experiments are pleasant and encouraging, you soon realize that it is not that simple and that you lack some knowledge that are just not written in the books.
Stage 1 – Unconscious / Unskilled
You know that you don’t know. You have come from the first stage of unknown incompetence to the second stage of conscious incompetence:
- You understand that more skills are necessary than you thought.
- You understand that you will not be able to improve without acquiring these new skills.
Doing this step is usually the easiest but some people never go to stage 2. A lot of poker players like to tell about when they took a difficult decision calling a big pot for a lot of money but usually attribute their losses to bad luck. Or you could decide that you will not listen at people who know nothing about cooking.
When it comes to project management and application quality, there are so many different kinds of programmers, from geeky enthusiasts to tired grumpy ones that it is difficult to make them all aware of improvement opportunities and put them in learning mode. Some even consider that programming is an art that very few can understand and are very reluctant to anything that could be interpreted as an attempt to control their work.
Stage 2 – Conscious / Unskilled
Now the real difficulty starts in stage 2 because most of the times, you don’t know what to learn in order to improve. You could start looking for some books and finally drown yourself in a lot of texts, articles and theories. You could spend a lot of time surfing on internets, on blogs or forums, subscribing to newsletters and discovering very interesting ideas, but never knowing how to put them in practice. You could search and try different tools and finally get disappointed and discouraged by their complexity, lack of integration, and the amount of effort to implement them.
Do you remember the last time you could not find the keys of your car? You did begin to look at the most common places where you usually let them, going through the whole house until you realize this is the third time you are searching under the sofa cushions and this is not very productive. Then, you decide to take a more systematic and rational approach, which usually means:
- To analyze the most recent events – when was the last time you saw these damned keys, where, and what did you do since.
- To search thoroughly all the most probable places and eliminate them one after one.
There is no easy path and no secret miracle recipe, but in the case of this company who decided to outsource its application, without knowing very much but their difficulty to maintain source code, I would recommend the same approach as in this post:
- Analyze the source code in order to get an idea of what is going wrong
- Talk with the stakeholders and the project teams in order to define priorities and a scope : what are the goals? Reduce defects and improve quality ? Reduce costs and improve time to market ?
- Define a plan or a process to reach the goals.
Not everything is compatible, or as you already know: better, quicker and cheaper is not of this world. So you have to begin simply.
For instance, identify the 10 to 15 best programming practices that are not well respected and most dangerous for the application in terms of robustness or performance. Put in place a 0 tolerance for these defects and do regular code analysis to identify them.
You could also do some training: programmers always like that, and certifications always embellish a CV.
Stage 3 – Conscious / Skilled
Zero tolerance does not mean you will boo at the programmer who forgets the good practice. This is not lack of knowledge, this is lack of attention. At this stage, he will need to concentrate and remember the good practices in order to improve.
In the video to learn poker, one of the advices to go from stage 2 to stage 3 was to define a range of cards to play consistently, according to some factors like the type of poker game or the position around the table. At first, applying this recommendation is not automatic and requires some thinking to remember it, and some hand reviews to see where the ‘good practice’ has been forgotten.
As a project manager or a quality consultant, providing feedback is important. Analyze the source code regularly, produce reports and the list of new defects to be corrected. Soon, you should see some improvements. It is important to define small achievable goals that will maintain motivation and avoid failure.
However, stage 2 and 3 are those where we will spend most times because we need to go from beginner’s mind to learning and practice and review in order to go to …
Stage 4 – Unconscious / Skilled.
The skill has become ‘second nature’ and you are able to use it automatically without even thinking to it. A developer has mastered completely all the programming good practices that were on the zero tolerance list. The poker player just needs a glance at his cards to decide if he can play them profitably. You are now able to cook in your oven any kind of meat of any size and weight and it will be perfectly ‘á point’ or at the exact degree of cooking that will please to your guests.
This task has become effortless, and even if you are still struggling with some other aspects of you game, your cooking or your project, you know that you can learn how to resolve these.
It is important to consolidate what has been achieved by presenting the results to your team and to the stakeholders: better skills should result in better code quality, less defects, improved time to market and users satisfaction.
Knowing how you learn improve your learning ability and your skills more efficiently. The more you practice it, the more comfortable it becomes.
For a project manager or a Quality consultant, code analysis helps you to identify what you don’t know and where to put your effort. Achievable goals, active listening and feedback will help going forward until everything click in place. Some training could help.
Once again, the most important in my opinion is that improved skills should results in better application quality and better IT image, and these improvements should be recognized.
This is not only a question of reward. It could avoid you to loose control of your project and see your applications outsourced.