Concepts & Features: A concept cover the whole range, a feature is constrained
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.
Comments
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?
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?
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.
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. :)
Johannes,
I explicitly avoid the agile terminology, there is no association between the two, and I find it confusing
Comment preview