50 years of software engineering, so now what?
Software Engineering was the theme of a 1968 conference in Garmisch, Germany, with at the time the leading computer scientists and methodologists in the world. That meeting is considered being the beginning of software engineering and by now we have developed the discipline over 50 years.
“This is not the end, it is not even the beginning of the end, but it is perhaps the end of the beginning” (Winston Churchill).
We are more than 20 million software developers on the planet, with a large number of methods to develop software. However, the most successful recipe for success is a method that focuses on hiring the most brilliant people in the world and empowering them to create wonders. 50 years ago, Ericsson in Sweden did that. Now Apple, Google, Amazon, etc. do that.
What about the rest of the world? – banks, insurance, airlines, defense, telecom, automotive, etc. How can we get these industries to be more innovative and develop better software, faster, cheaper and with happier customers? How can we do that given that the state of the art of our discipline is in such a chaos, characterized by the multitude of competing methods out there?
The most powerful way to help the rest of the world to build excellent software is to dramatically increase the competency (and skill) of all of us. There are no shortcuts. Education must start from an understanding of the heart of software development, from a common ground that is universal to all software development endeavors. The common ground must be extensible to allow for any method with its practices to be defined on top of it. This would allow us to sort out the chaos and to increase the competency of all of us. As a plus, that competency increase wouldn’t hurt the brilliant people, but make them even more productive than today.
In this presentation Dr. Ivar Jacobson will revisit the history of methods, explain why we need to break out of our repetitive dysfunctional behavior, and introduce Essence: a new way of thinking that promises many things, one of them being to dramatically change the way we educate in software development to increase the competency in our profession.
Essence in Action
In the second seminar of the series we looked at the benefits from having a way to organise the knowledge of how we engineer software, having a common ground of universal concepts to build upon, and allowing the mixing and matching of various practices defined on top of it. Essence is this new way of thinking about software development. It gives us a standard way to capture and combine these practices, which may come from many different sources, to describe a team’s way of working.
In this presentation we will introduce some of the key ideas behind Essence, not in terms of the theory but by demonstrating how teams can put these ideas to work. We will see how we go from the traditional world where practices are just static descriptions, to one where the practices come to life and are actively used.
Most teams are familiar with representing their work items on cards, such as their user stories, change requests, defects, etc. They can be in either physical or electronic form and are great for helping to organize, prioritise, visualize and track the work. Essence uses a similar technique to represent the key concepts of working practices as a set of cards. This opens up a whole new set of powerful games, allowing a team to reason about and greatly improve their way of working.
Making the team’s way of working something tangible that they can see, touch and manipulate, can facilitate deep conversations and decision making around their process. It stops being a reference and becomes something that is used, adapted and living. We will see some example Essence games that teams can play to get started, track progress, and importantly identify improvements over time to their process. The games can be applied to any set of practices and the widely used one of Scrum will be used to illustrate the gameplay.
What is Essence?
So, what is Essence? Put simply, Essence is an international standard that defines two things:
- A standard language for talking about what we do, and how we do it
- A common “kernel” of key things that we encounter whenever we do it.
The Essence language is simple, visual and intuitive. It is designed to help us clearly express the common challenges that we share, and the practices that help us to be successful.
Core language elements include:
- Practice - an approach to achieving a specific objective (such as “Scrum” or “User Stories”)
- Activity - something we do to advance towards our objective (such as “Sprint Planning”)
- Alpha - the key things we progress and track progress of (such as “Product Backlog Item”)
- Work Product - the things we produce and update (such as a “Sprint Plan” or “Kanban Board”)
- Competency - the capabilities and skills we need to be successful.
The Essence Kernel defines the core concepts that are universal - i.e. to be found wherever and whenever we do software engineering. The authors of the standard had a simple rule - for any concept, if we can think of an example of an endeavor where it is not central or relevant, then it was not included in the kernel. Examples of Kernel Alphas include:
- The Opportunity - the reason why we need a solution of some kind (covering for example things variously referred to as the “business goals”, “problem”, “need”, “value” etc.)
- The Requirements - what we need a solution to do in order to address the Opportunity (meet the needs, solve the problems, realise the value, …)
- The Team - the group of people that work together to produce a solution that meets the requirements
- The magic of Essence is that if we simply take the time to share our practices using a common language, and relate then to our shared challenges, then practitioners can easily understand them, compare and contrast them, select the ones that are of most value, see how they fit and work together, and adapt them to meet their needs, all while maintaining absolute clarity and transparency of their way of working at all times.