7 Key Principles: Practical, Actionable and Extensible

7.1 The Big Idea

What Essence has provided is a common ground for software engineering. This is an important idea, and it is worth taking a few moments to think about why establishing the common ground in this way is so important. More than just a conceptual model, as you will see through the practical examples in this book, the kernel provides:

  • A thinking framework for teams to reason about the progress they are making and the health of their endeavors.
  • A framework for teams to assemble and continuously improve their way of working.
  • The common ground for improved communication, standardized measurement, and the sharing of best practice.
  • A foundation for accessible, inter-operable method and practice definitions.
  • And most importantly, a way to help teams understand where they are, and what they should do next.

What is it that makes the kernel anything more than just a conceptual model of software engineering? What is it that’s really new here? This can be summarized into the three guiding principles shown in Figure 34.

Figure 34       Guiding Principles Behind Essence

7.2 Essence is Practical

Perhaps the most important feature of the kernel is the way it is used in practice. Traditional approaches to software development methods tend to focus on supporting process engineers or quality engineers. The kernel, in contrast, is a hands-on, tangible thinking framework focused on supporting software professionals as they carry out their work.

For example, the kernel is tangible and deployed through the use of cards. The cards provide concise reminders and cues for team members as they go about their daily tasks. By providing practical checklists and prompts, as opposed to conceptual discussions, the kernel becomes something the team utilizes on a daily basis. This is a fundamental difference to traditional approaches, which tend to over-emphasize method description as opposed to method use.

7.3 Essence is Actionable

A unique feature of the kernel is the way that the “things to work with” are handled. These are captured as alphas, rather than work products (such as documents). An alpha is an essential element of the software engineering endeavor; one that is relevant to an assessment of its progress and health. As shown in Figure 26, Essence has identified seven alphas. The alphas are characterized by a straight-forward set of states that represent their progress and health. As an example, the Software System in Figure 26 moves through six states.  Each state has a checklist, which specifies the criteria needed to reach the state. It is these states that make the kernel actionable and enable it to guide the behavior of software development teams.

The kernel presents software development not as a linear process but as a network of collaborating elements; elements that need to be balanced and maintained to allow teams to progress effectively and efficiently, eliminate waste, and develop great software. The alphas in the kernel provide an overall framework for driving and progressing software development efforts, regardless of the practices applied or the software development philosophy followed.

As practices are added to the kernel additional alphas will be added to represent the things that either drive the progress of the kernel alphas or inhibit and prevent progress from being made. For example, the requirements will not be addressed as a whole but will be progressed requirement item by requirement item. It is the progress of the individual requirement items that will drive or inhibit the progress and health of the requirements. The requirements items could be of many different types, for example they could be features, user stories or use-case slices, all of which can be represented as alphas and have their state tracked. The benefit of relating these smaller items to the coarser grained kernel elements is that it allows the tracking of the health of the endeavor as a whole. This provides a necessary balance to the lower level tracking of the individual items enabling teams to understand and optimize their way-of-working.

7.4 The kernel is extensible

Another unique feature of the kernel is the way it can be extended to support different kinds of development (e.g. new development, legacy enhancements, in-house development, off-shore, software product lines, etc.). The kernel allows you to add practices, such as user story, use case, component-based development, pair-programming, daily standup meetings, self-organizing teams, to build the methods you need. For example, different methods could be assembled for in-house and out-sourced development, or for the development of safety-critical embedded system and back office reporting systems.

The key idea here is that of practice separation. While the term practice has been widely used in the industry for many years, the kernel has a specific approach to the handling and sharing of practices. Practices are presented as distinct, separate, modular units, which a team can choose to use or not to use. This contrasts with traditional approaches that treat software development as a soup of indistinguishable practices and lead teams to dump the good with the bad when they move from one method to another.

7.5 How Does the Kernel Relate to Agile and Other Existing Approaches?

As we will show more later in the book the kernel can be used with all the currently popular management and technical practices including, for instance, Scrum, Kanban, risk-driven, iterative, waterfall, use-case driven development, acceptance test driven development, continuous integration, test driven development. It will help teams embarking on the development of new and innovative software products and teams involved in enhancing and maintaining mature established software products. It will help all sizes of teams from one-man bands to 1,000 strong software engineering programs.

For example, the kernel supports the values of the Agile Manifesto. With its focus on checklists and results, and its inherent practice independence, it values individuals and interactions over processes and tools. With its focus on the needs of professional software development teams it values team working and fulfilling team responsibilities over the following of methods.

The kernel doesn't in any way compete with existing methods, be they agile or anything else. On the contrary, the kernel is agnostic to a team's chosen method. Even if you have already chosen, or are using, a particular method the kernel can still help you. Regardless of the method used, as Robert Martin has pointed out in his Foreword to [2], projects – even agile ones – can get out of kilter, and when they do teams need to know more.  This is where the real value of the kernel can be found. It can guide a team in the actions to take to get back on course, to extend their method, or address a critical gap in their way of working. At all times, it focuses on the needs of the software professional and values the 'use of methods' over 'the description of method definitions' (as has been normal in the past).

The kernel doesn't just support modern best practices, it also recognizes that vast amounts of software has already been developed and needs to be maintained. The software will live for decades and it will have to be maintained in an efficient way. This means the way you work with this software will have to evolve alongside the software itself. New practices will need to be introduced in a way that complements the ones already in use. The kernel provides the mechanisms to migrate legacy methods from monolithic waterfall approaches to more modern agile ones and beyond, in an evolutionary way. It allows you to change your legacy methods practice-by-practice whilst maintaining and improving the teams’ ability to deliver.

7.6 How Essence Will Help You

The main concepts and principles of Essence have been presented and you will learn more about its application as we follow Smith’s experiences in the remainder of the book. But how will Essence help you as you proceed in your career?

First and foremost, you will be provided with a common ground for understanding the scope as well as the application of software engineering methods and practices that will be of great benefit during your career. Certainly, as new practices and methods arrive on the scene, you will be prepared to easily integrate them into your own body of knowledge.

As Essence is accepted by software development companies around the world (a trend that is already happening) you will be able to reuse your knowledge when moving from working with one software system to working with another one without having to learn a new method that utilizes different terminology introduced by its founding gurus. This was normally not possible before Essence adoption; you would have to relearn what you already knew because of different terminology and different ways to talk about methods. In essence, what Essence gives you is a means by which developers can become reflective practitioners and think about their own ways of working outside of commercial frameworks.

Once you become an experienced software professional you will see additional values. For example, Essence provides guidance to help you assess the progress and health of your software development endeavors, evaluate your current practices, and improve your way of working. It will also help you to improve communication, move more easily between teams, and adopt new ideas.

By providing a practice-independent foundation for the definition of software methods the kernel also has the power to completely transform the way that methods are defined, and practices are shared. For example, by allowing teams to mix-and-match practices from different sources to build and improve their way-of-working, the kernel addresses two of the key methodological problems facing the industry. Teams are no longer trapped by their methods: they can continuously improve their way of working by adding or removing essentialized practices as and when their situation demands. Methodologists no longer need to waste their time describing complete methods: they can easily describe their new ideas in a concise and reusable way.