Ayende @ Rahien

My name is Oren Eini
Founder of Hibernating Rhinos LTD and RavenDB.
You can reach me by phone or email:


+972 52-548-6969

, @ Q c

Posts: 6,130 | Comments: 45,558

filter by tags archive

Concepts & Features: A concept cover the whole range, a feature is constrained

time to read 2 min | 264 words

A while ago I mentioned the idea of Concepts and Features, I expounded it a bit more in the Feature by Feature post. Concepts and Features is the logical result of applying the Open Closed and Single Responsibility Principles. It boils down to a single requirement:

A feature creation may not involve any design activity.

Please read the original post for details about how this is actually handled. And a the specific example about filtering with NH Prof.

But while I put constraints on what a feature is, I haven’t talked about what a concept is. Oh, I talked about it being the infrastructure, but not much more.

The point about a concept implementation is that it contains everything that a feature must do. To take the filtering support in NH Prof as an example, the concept is responsible for finding all available filters, create and manage the UI, show the filter definition for the user when a filter is active, save and load the filter definition when the application is closed/started, perform the actual filtering, etc. The concept is also responsible for defining the appropriate conventions for the features in this particular concept.

As you can see, a lot of work goes into building a concept. But that work pays off the first time that you can service a user request in a rapid manner. To take NH Prof again, for most things, I generally need about half an hour to put out a new feature within an existing concept.


Johannes Rudolph

In the Context of Agile Terms, what you Call a "Feature" seems more like a "User Story" to me. I group User Stories into "Features" corresponding to your "Concept".

What do you think about this? What term is more appropriate?

Johannes Rudolph

I have thought about that one again.

I do know think a feature is more of a user experience thing, a group of user stories, while a concept is more of a technincal term, describing technical means to implement a set of features which in turn implement a set of user stories.

Whats your take on this?

Kyle Szklenski

To me, it sounds a bit like a concept is Udi Dahan's role, and a feature would be a any set of lines in the play that is our job. :) In other words, you have a role in a play. There are a limited number of roles in said play, and adding a new one is probably going to be difficult. But for a person to add lines to a role that's already there, that should be much easier. And to add new scenes involving different roles. . .I don't know what that would be.

That's probably too abstract to be worth anything (has no explanatory power), but it sure is interesting.

Kyle Szklenski

Huh. Thinking about it more, the concept-to-role mapping is making more and more sense to me. Each new line you add to the role is really just a feature - you're just adding a separate piece to the pile of lines that are already there. They may or may not be connected, but more importantly you are necessarily guided by the parent role - you would never change way the main role works except with extreme reluctance (assuming you have unifying concepts to the play being written), and if you wanted to do something completely different with that role, then you'd consider adding a new role and having it handle it.

I guess I'll stop here. :)

Ayende Rahien


I explicitly avoid the agile terminology, there is no association between the two, and I find it confusing

Comment preview

Comments have been closed on this topic.


  1. How to waste CPU and kill your disk by scaling 100 million inefficiently - 7 hours from now
  2. RavenDB Conference 2016–Slides - about one day from now

There are posts all the way to Jun 01, 2016


  1. The design of RavenDB 4.0 (14):
    26 May 2016 - The client side
  2. RavenDB 3.5 whirl wind tour (14):
    25 May 2016 - Got anything to declare, ya smuggler?
  3. Tasks for the new comer (2):
    15 Apr 2016 - Quartz.NET with RavenDB
  4. Code through the looking glass (5):
    18 Mar 2016 - And a linear search to rule them
  5. Find the bug (8):
    29 Feb 2016 - When you can't rely on your own identity
View all series


Main feed Feed Stats
Comments feed   Comments Feed Stats