How to create clear features by using the Sitecore Helix structure

Auteur
Paul Dohmen
Datum

Because there are some challenges when implementing Sitecore Helix I would like to propose a way of working to help dividing a Sitecore application into features properly.

For two main reasons Sitecore introduced Sitecore Helix as an architectural way of working to support building Sitecore web applications in a proper way.

  • Build your application using a ‘clean’ architecture
  • Let the community build Sitecore based applications in the same way so developers can be interchanged

Sitecore logo

Sitecore’s documentation is excellent and rather complete - except maybe the Habitat example might create some confusion - and by reading one should understand that a feature is a deviation based on business goals.

However, in my daily work I see many developers struggle in deciding how to divide their work in features. I have seen many features that where actually technical or functional representations. In some cases, I saw that developers had difficulties in seeing the difference between a feature and a component.

What does the Sitecore documentation exactly say about features?

  1. The feature layer contains concrete features of the solution as understood by the business owners and editors of the solution, for example news, articles, promotions, website search, etc.
  2. The features are expressed as seen in the business domain of the solution and not by technology.

How to help Developers and their team?

More often, it will happen that a development team receives a visual and a functional design of an application. Most likely, there will be some explanation done by the business. Planning and scheduling of the work is done by the business, project managers and so on.

However, the development team does the technical division of the work. When working in the Helix way this is not effective enough. The division should be business based so the development team should talk intensively with the business people. Put effort in understanding the business. It is not that easy.

Asking Questions

In order to help the development team to design features based on business goals I have created a method based on Questions. The first goal of these questions is to help designing the features. The second goal of the questions is to test whether the designed Features are truly business based.

Please keep in mind that I do not pretend to create the perfect method. It is an attempt to support the community and I hope this way of working will improve in the future. Feedback is very appreciated.  

The feature creation method

Task 1: Define the prime business goal of the application to create

What is the business goal of the application you are going to build? Discuss this question with the business and get a clear answer. While discussing, it’s important not to think about technical questions at all. It will distract you to understand what the business has to say.

It is good to have an exploring discussion. Ask more questions to find an answer. However, take care that eventually the answer to the question has to be a short and clear definition.

Task 2: Divide your application into separate Feature parts that represent business value on its own

Divide the business goals of the application in logical separate parts that still present business value. Every business part will become a feature.

The next questions will guide you through this proces and will help to decide whether your approach is done correctly.

- How does the feature help to achieve the business goal defined in the previous task?

When you are not able to answer this question, it is very likely that the name of the feature and/or the planned content of the feature is not correct. Reconsider.

- What value has the separated designed feature to the business goal as defined in the previous task?

When you are not able to answer this question, it is very likely that the name of the feature and/or the planned content of the feature is not correct. Reconsider.

- Is it potentially possible to release the feature separately?

You do not have to actually ship the feature separately. However, thinking about a feature as a shippable part will help you to create a logical deviation.

- A feature will most likely consist of multiple components. Is it logical to group the presumably to create components in this feature? You might conclude that the later question is not applicable. In that case, you might have to group features into one feature or create extra features. In all cases, the first three questions have to apply to every feature separately.  

###An example I wrote this blog based on real life experiences, during a project where I concluded that the separation was not as well implemented as it could have been, So.. I tested my proposed method.

Task 1: Define the prime business goal of the application to create

I interviewed a representative of the business and asked the question:

What is the business goal of the application we are going to build?

We talked about several goals we try to achieve by building the application. However, we were capable of defining the prime goal of the application: “The website we are going to create is a web shop that sells vacations”

Task 2: Divide your application into separate feature parts that represent business value on its own

Together with the business representative I came to the following separation: Exploration, Accommodation Search, Accommodation Detail, Commercial presentation.

###The questions: Because this is an example, I will wright down the answers to these questions only regarding the first two features. Because I used these questions while dividing the business goal in separate parts, the answers on all questions regarding the features are confirmative.

Feature “Exploration” - How does the feature help to achieve the business goal defined in the previous task? Before people book a vacation, they want to explore options. What type of vacation do we want? Where do we want to go? Which options is in our price range? When people know, what they are looking for it is more likely they are going to find a vacation they want to book.

- What value does the separated designed Feature add to the business goal as defined in the previous task? When people can explore vacation options with success, it is likely that they book a vacation. That is the goal of our website.

- Is it potentially possible to release the Feature separately? Yes. The components we want to create for exploring vacations are different from other components. Exploring is an important part of the customer journey a visitor of our website will make. Therefore, it is important to be able to give this a specific touch. It could be possible to release this separately.

- A feature will most likely consist of multiple components. Is it logical to group the presumably to create components in this feature? Yes. The components are different from other components. They belong together. It could be helpful in measuring the success of these components as a group. So grouping the components together seems logical

Feature “Accommodation Search” - How does the Feature help to achieve the business goal defined in the previous task? People buy vacations as a package. Flights and other items can be a part of the vacation. However, the main item people book on our website are accommodations. When people easily find the accommodation they are looking for, it’s more realistic they will actually book the vacation.

- What value does the separated designed feature add to the business goal as defined in the previous task? When visitors easy find what they are looking for and they do not have to spend much time on searching they will have more focus on the information about their desired accommodation. The chance that they actually book the vacation will increase.

- Is it potentially possible to release the feature separately? Yes. The components we want to create for searching are specific. It is possible to release them separately.

- A feature will most likely consist of multiple components. Is it logical to group the presumably to create components in this feature? Yes. They belong together. It could be helpful in measuring the success of these components as a group. So grouping the components together seems logical.

Conclusion

I have created this method for designing Sitecore features in a consistent way and tested with a customer which helped me a lot. Not only are the designed features based on clients business, in addition, the number of features to create decreased substantial. As a result, this creates a more clear and consistent application design. For sure the method I propose can be improved and therefor looking forward to your comments.

Tags

CMS Development Sitecore