Breakdown of requirements into Major Feature Sets / Feature Sets / Features

(or, as discussed in a another topic, into whatever you want to call the groupings)

To help me convinve my partners that FDD is the way to go, could someone please provide examples of feature lists, showing the Major Feature Sets, Feature Sets, Features, from real projects?

I read in a Coad/Yourdon book that Einstein said that example is the best teacher, and I must say I agree.

Thanks in advance

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
Jeff De Luca's picture

give me a few days

I agree, however, this is a case where a contrived example might be better as a learning aid than real project data. However, I need to discuss this with the relevant clients before I can use their project data.

I'll get back to you with a lengthier reply.

Jeff

Thanks, Jeff

I think my partners have more or less bought into it, but I feel I need something concrete for them, something that can be subject to inspection.

Coad/Yourdon book - Object Oriented Analysis

shielde wrote: I read in a Coad/Yourdon book that Einstein said that example is the best teacher, and I must say I agree.

Me too!

BTW, I assume the Coad/Yourdon book you are refering to is Object Oriented Analysis. Its a good book if you are new to OO design. I also note that it is still in print and that is a significant achievement for a book first published 13 years ago in such a fast paced world.

Problem with Proprietary Information

The biggest single inhibitor to simply sticking a real world example up on this site is that it breaks our contracts of employment or terms of conditions of engagement under a statement of work for professional services.

It's pretty difficult to persuade an organization to let you post its proprietary information on the web.

I agree with Jeff - a contrived example would work better here.

David

David J. Anderson
author of "Agile Management for Software Engineering"
http://www.agilemanagement.net/

OK, a contrived example it is then

I appreciate the constraints we all work under. So, if it must be a contrived example then great. However, I would ask that the contrived example be realistic.

The domain I work in (finance) is complex. A contrived example would have to give some idea as to how to deal with this complexity.

For example, there is a requirement to hold back updates to the core system in a 'workflow' system, for authorisation, before the core system is updated. The users don't want the core system being 'polluted' by invalid/incorrect work. There are also requirements for comprehensive, generic audit trail; configurable, fine-grained access control; and other such gems.

This means something as apparently simple as 'Create Customer Account' becomes fairly involved. It has to support the features I mentioned above - authorisation, access control, audit trail.

Now, I want to build these additional features once, if possible.

I'd like an idea as to which major feature set/feature set to include them in.

I was hoping real examples would give me some guidance.

Thanks

An example

Could someone please provide a contrived example then?

Looking forward to it.

Thanks in advance.

Jeff De Luca's picture

I'm working on it

Hi shieldie,

I've written a lengthy reply to your question that includes several examples from real projects. I'm waiting on one final permission regarding that real project data.

Sorry for the delay, but worked FBS examples and the necessary descriptions around them is not a small writing task.

Jeff

Jeff De Luca's picture

3 Real Examples (partial)

Your request for an FBS from a real project is understandable but problematic - for several reasons. Features are very granular and therefore are very project and domain specific. This means that a small number features from a real project FBS are unlikely to make sense to someone outside that domain.

The FBS is of course, disclosing a great deal about a business operation that most companies are unwilling to put into the public. Even so, the FBS is for only one architectural layer, e.g. the PD layer. In some projects, the PD is quite thin and most of the work is in the SI layer and/or the UI layer. So, to get the full picture you would need all three FBS' which, of course, is disclosing even more detail about a project and a business operation.

Also, the FBS is in the context of the model produced in the Develop an Overall Model process (of course). This process achieves many things, but one of them is to bring together the domain and the implementation, the users and the I.T. people, and the business and the technology, through a common language and a common set of concepts and relationships (i.e. from the model).

Thus, features are named against the language of this model and of the concepts and relationships it comprises.

EXAMPLE 1

For example, a single feature extracted from 500+ features in the FBS for the PD layer only of a project for an automated assign and design system for provisioning networks at a telecommunications company is

determine the diversity requirement for a Pathing Step Context

This is a great Feature. It is written using the feature naming template, it is granular and fits well within the no more than 10 days rule, and it is client-valued: to the client from this domain. I doubt very much that this Feature means anything to you or most others that read it though.

Here's all the Features from the Business Activity that feature came from - Comply with Diversity Constraints.

determine the diversity requirement for a Pathing Step Context

determine the diversity category of an IPPC for Diversity Constraints

determine the other end of an IPPC

determine the diversity category of a pathing point for Diversity Constraints

remove the must-avoid IPPCs from the list of candidate IPPCs

sort by diversity category, weighting, site type hubbing priority, node type hubbing priority, and distance the list of candidate IPPCs

generate the notes for use of a like-to-avoid Diversity Constraint

list the diversity items of an IPPC for Diversity Constraints

list the diversity items of a Pathing Point for Diversity Constraints

determineif all must-haves have been found for Diversity Constraints

add must-have diversity items to a Pathing Step Context

specify the Diversity Constraints for a Pathing Step Context

determine the Diversity Constraints for a Pathing Step Context


At this level of detail you need very specific domain knowledge. This is correct and what you should expect of an FDD FBS. The features are very fine-grained and each PD feature is a method on a class in the model. That's the level of detail and the binding of implementation and the domain.

The parking lot chart communicates at a different level of detail. Only the subject areas and business activities are shown. These are the next higher levels of categorisation in the FBS of features. Clearly, this categorisation increases value and extra-project communicability.

Here's the parking lot chart for the PD layer of EXAMPLE 1.

Parking Lot Chart Example 1

The larger boxes are the Subject Areas. They contain boxes (parking lots) which are the Business Activities. The Business Activities contain features which are not shown indivually on this chart. The number in parentheses in each parking lot - Business Activity - is the number of features within that Business Activity. For example, Establish Product comprises 12 features. Also, missing from the legend is that a white parking lot means Not Started.

Ignore the dates and progress information - that's not the focus at all of this discussion. I am using the parking lot chart to show the FBS at a higher level of value and communicability. Even still, you can see how very domain and project specific this is (again which is how it should be).

This is the Subject Area and Business Activities part of the FBS for the PD layer only of this auto design and assign provisioning application in the telco space.

EXAMPLE 2

This is a Lending system for a Bank. It spans consumer, commercial and corporate lending and it spans from front-office to back-office and MIS functions.

Here are the features for the PD Business Activity: Approve an AFL.

Partial glossary: AFL - application for lines, CAS - credit approval summary, GRM - global relationship manager.

Determine if for same applicant there is a pending approval AFL

Compare current Obligor exposure with those of a CAS

Determine if it is valid for the logged in User to approve an AFL

Create a Ratification request for an AFL

Update Approval Request for an AFL

Create AA Approval Notification for a GRM

Create AA Approval Notification for a Marketing Officer

Approve all the lines of an AFL

Approve all the security commitments of an AFL

Update Approval request for an AFL

Create AA Rejection Notification for an GRM

Create AA Rejection Notification for an Marketing Officer

Reject all the lines of an AFL

Reject all the security commitments of an AFL

Create AA Return Notification for an Marketing Officer

Update Approving Authority for an AFL

List Comments made by GRM, Approving Authorities for an AFL

Create a GRM/Approving Authority comment for an AFL

Create ratification comments for an AFL

Create an AFL Ratification Notification for a GRM

Create an AFL Ratification Notification for a Marketing Officer

Determine if ratification by the logged in User is allowed for an AFL


Here are the features for the PD Business Activity: Comply with Credit Policy.

Partial glossary: MAS Sxx - statutory and regulatory body rules.


Determine if T and C values comply with bank credit policy for a Term Loan Line

Determine if T and C values comply with bank credit policy for a Leasing Line

Calculate the age of youngest borrower in a Joint Account Group

Calculate age of an Individual

Determine bank approved stock/share status of a Stock/Share security

Determine if length of lease less than minimum length set by the Bank for a Leased property security

Compare a bank and branch with the issuing bank of a SBLC or BG security

List Parties affected by MAS S27 for an AFL

List Parties affected by MAS S29 an AFL

List Parties affected by MAS 757 for an AFL

List Parties affected by MAS S34 for an AFL

List Parties affected by MAS HLD for an AFL

List Lines that do not comply with bank T and C credit policy for an AFL

List Parties that do not comply with bank age credit policy for an AFL

List Lines that do not comply with bank age credit policy for an AFL

List Stock/share securities not in the bank's approved list for an AFL

List property securities with shorter leases than bank's minimum length for an AFL

List SBLC and BG securities issued by the facility granting bank for an AFL

Create result of compliance checks for the AFL

Here's the parking lot chart view of the PD FBS for EXAMPLE 2.

Parking Lot Chart Example 2

EXAMPLE 3

This is a system for the data entry of clinical study information at investigator sites in support of the clinical research trials of drugs (pharmaceuticals) before they can gain FDA approval and go to market.

Here's the Features from the PD Business Activity: Establish Study.

find by id a StudyDescription

create a StudyDescription

list all StudySites for a StudyDescription

create a PatientCaseBookDescription for a StudyDescription

list all VisitDescriptions for a StudyDescription

create a VisitDescription for a StudyDescription

list all PatientVisitDescription's for a PatientCaseBookDescription

create a PatientVisitDescription for a VisitDescription in a PatientCaseBookDescription

calc next visit min date given an actual visit date for a PatientVisitDescription

calc next visit max date given an actual visit date for a PatientVisitDescription

list all expected FormDescriptions for a PatientVisitDescription

list all FormDescriptions for a PatientVisitDescription

list optional FormDescriptions for a PatientCaseBookDescription

Here's the parking lot chart view of the PD FBS for EXAMPLE 3.

Parking Lot Chart Example 3a

Again, it's important to ignore dates and progress information in this set of example. The parking lot charts are from different points in time for this project. The focus of this example is to show the FBS from real projects.

In this project, the PD layer was thin. Most of the work was in the SI and the UI.

Here's the parking lot chart view of the SI FBS.

Parking Lot Chart Example 3b

Here's the parking lot chart view of the UI FBS.

Parking Lot Chart Example 3c

And then, there was much work in the actual external systems themselves that this project interfaced with (through its SI layer). I can't show the parking lot chart view of the FBS for the external systems for this example.

I also could not show this information plus the FBS for the other layers for examples 1 and 2. However, there is a rich set of real data shown in the examples here.

Jeff

mangrish's picture

UI / SI / DM Features and FBS's

I am starting to become comfortable with PD FBSs, and I find the feature template quite intuitive. The template for business areas and business activities in the Colour book and steve palmers book is also quite good, but i noticed some inconsistances between those and what I have read here and in other presentations.

Anyway, I digress. What I really wanted to find out is how does one construct a UI feature list. Likewise with DM and SI. I haven't seen any examples on either list, and I'm wondering how you have gone about it in the past. I have read some literature on UIDesign.com and have talked to Gavin Baker on some of the techniques he has used, but I'm yet to see some concrete stuff.

In summary of what I have investigated:
- All three lists are some sort of derivative of the PD list, mainly being a subset of the PD list.
- UI is more of a special list, with a similar 'build an overall model' activity being undertaken.

I would REALLLLLLY like to see more literature in this area, and I encourage anyone who has done some work in this area to write about it!

"concrete"?

What is it about the white paper on uidesign.net that you do not consider "concrete"?

I also covered this same material, but in short form, in my book, "Agile Management for Software Engineering". It's been an on-going piece of work over the last 4 years.

For the most recent rendition of this material see my paper presented at Larry Constantine's ForUse2003 conference, "Lean Interaction Design and Implementation: Using Statecharts with Feature Driven Development". The paper is available in PDF from agilemanagement.net.

As the "UI guy" on the original "Singapore Project" I very much consider what I publish on UI Features to be "concrete". These techniques are in use at Sprint (a large telecom company in the USA) and Motorola (a large cellphone manufacturer). The examples in the ForUse2003 paper are real examples from a real product sold by Motorola and installed at 7 mobile phone operators around the world.

I understand that approaches to UI Features used in Australia may differ. It's a big question whether we view FDD as a museum piece - a documentation of the process used on a large banking project in Singapore - or as a living breathing thing which is actively evolving in some of the biggest commpanies in the world. If it were the former then the original UI processes from Singapore have never been documented. There is a reason for this - Jeff and I agreed that the UI processes were not mature enough when we parted company in 1999. The "High Level Design" (the UI design) and "Low Level Design" (the UI code design) processes were not sufficiently mature - just look at the names. I later matured these processes to my satisfaction working with Brian O'Byrne in Ireland on a project for what is now Vodafone Ireland during the summer of 1999. That led to the uidesign.net white paper and directly to the JStateMachine framework now sold by Statesoft. JStateMachine is to UI Features what Together is to PD Features.

FWIW, I feel that my ForUse2003 paper represents state-of-the-art material on how the principles of FDD are being used for UI design, UI development and implementation - whether or not this community considers it "part of FDD" or not.

Regards,

David
--
David J. Anderson
author of "Agile Management for Software Engineering"
http://www.agilemanagement.net/

mangrish's picture

UI/PD/SI feature lists

David,

I was actually talking about the first article I read on UI design a fair while ago, which was Extending Feature Driven Development for User Interface. To date, it is the only article I have seen on UI lists and how to go about constructing a UI alligned with FDD. I have not read your more recent articles, but from skimming over them they look well worth the read and I'm sure I'll enjoy them over the holiday break :).

I guess what I would really like to see in the community as a whole is some more discussion not just on UI but also the SI, and DM layers and their feature list construction and also how they tie in with project development (this is what I mean by concrete). As it has been mentioned elsewhere, the PD should always be the primary focus, and thats great I agree, and most literature covers this, but most projects I deal with cover all the seperation of concerns. In my mind, for a feature to be considered finished, all corresponding features across involved layers also need to be finished. Given that there doesn't seem to be a one to one match between architectural layer's feature lists, how do we ensure that our end to end 'feature' is cohesive and inclusive of all achitectutural layer features?

On a slightly seperate note, I think every project should be considered a museum piece. Humans have this great ability to identify with moments in history and be able to map consequences from past actions today. As a consequence of this, case studies inspire creativity and allows for more diverse solutions to similar problem spaces. Case studies are examples of tangible areas of interest, and I know for myself, I learn best from example. In fact, I am quite passionate on this issue and I owe a large deal of my software engineering knowlege to case studies. I think the software industry as a whole rarely looks at history to steer it away from previously encountered failure and relies way too much on experience only (don't get me wrong experience is important too!). It's like most organisations treat experience as being mutually exclusive of all other mechanisms of learning... but thats just my $0.02. So yes, immersing myself in examples, no matter right, wrong, mature, immature, black, white helps me (and I bet others!) see other thought processes and how to constructively add to, and keep, FDD as an actively evolving.

cheers,

:mark:

Jeff De Luca's picture

Other application layers

The feature naming template, first suggested by Peter Coad, is gold and we've taken it and found several ways to get great benefit from it (communicability and value, method placement and method naming). The feature naming template is important. The templates for subject areas and business activities (major feature sets and feature sets in the books) are not that important. They were last minute suggestions when JMCU was written since we felt it was better to offer something since we had a template for feature naming. So, I wouldn't be concerned that you see some naming differences for these - it is not important.

Regarding FBSes for other application layers, these four layers represent the way applications are architected and separated. Prior to hiring Pete Coad I called these presentation, logic, data and comms. Pete used HI, PD, DM and SI. When I hired Pete I chose to use his notation and naming etc. for everything. It didn't matter what it was just that there was only one across the project. I've used those names ever since except for changing HI (Human Interface) to be UI (so I don't have to explain what HI is all the time).

Now, the DM layer we never build anymore - we buy a solution. Toplink is a good commercial one (now owned by Oracle) and there are some open source ones also such as Hibernate.

So, the operational reality is that we only have three FBSes for three layers. UI, PD and SI.

Let's look at PD and SI first. The approach for these two is the same. The FBSes are constructed in the same way using the same feature naming templates. There is nothing you need to do differently regarding an FBS for PD or SI. Note that this flows directly from our approach to the nature of the interface between PD and SI which is described here.

Now, there's a lot of things going on here in FDD. The processes are very simple, clear and concise. They have what Phil Bradley calls "transmissability." What that means is that people are able to "get" them easily. This is more important than something that might be technically more accurate or complete but is not as easily "gotten" by readers.

The FDD processes have very high transmissability because they came from a real project. Then, they were (slightly) genericised to remove specifics from that project (such as tool names and platform names, etc.).

Basically what I'm saying here is that if you try and describe every detail, every corner case, every everything, you most certainly lose transmissability (processes like these are tedious to read) and you also become prescriptive rather than well-bounded, which is a value that is core to all the Agile methods.

So, in FDD there is quite a bit more to things both in the way the processes interrelate and to their abstractions.

Once you get what the processes are about, it becomes easier for people to abstract and adapt.

A common project management pain point is an accurate and meaningful baseline. That is, being able to answer how far along you are and how far there is left to go. The Develop an Overall Model process for example can be abstracted to some form of informational/analytical activity that must take place in order to get the knowledge necessary to develop the baseline (the baseline coming from the Features List and Planning processes).

I've consulted to projects where they were already in progress. In one case, the PM was tired of always being 20% done no matter how much "good faith" analysis they did, every time the answer was the same. He saw the reports and tracking in FDD and asked for help. I was only there 2 days (that's all it took). They were already coding and the project had been running about a year. They didn't have a model and they were using use cases. Not all the use cases were finished.

The last thing in the world I would do is drag them back to do an object model as the Develop an Overall Model process calls for. Instead what I looked at was an informational/analytical activity that would give them the knowledge to create an FBS. Once they had that, then they could track and report using the FDD approach.

This informational/analytical activity was the use cases. I asked them to see if they could produces features from their use cases. They went away and worked on this and the results were very good. So, we did two things. First, we got the use cases consistent in terms of granularity and then we made it a priority to complete all the use cases and thus create the FBS - their features list. Then, they used the FDD milestones and reports and etc. as-is.

Ok, that's a long example but that's what I mean about abstraction, adaptation and also transmissability. That is, if all such considerations are written into the FDD processes they would be voluminous and prescriptive. And, they would be useless.

There's a similar abstraction with the Develop Features List process. Producing an FBS is gold. Breakdown structures that are oriented around client terms and not tasks is a powerfully different approach to projects. Much more so than would seem intuitively so.

Now, whether each feature is absolutely written using the FDD feature naming template, and in fact even whether each feature is absolutely client-valued is not what this process is really about. It's really about the fundamental difference in mindset and approach that describing and tracking projects with FBSes intead of WBSes delivers. Hence naming templates, client-valued versus client-comprehensible, and where in the FBS hierarchy such communicability and value is "scored" are subject to adaptation.

When it comes to UI, I don't have a reliable system. There's the Cooper camp, the Constantine camp, Raskin and others. There's task oriented, goal oriented, and so on and so forth. I don't have a reliable system here nor do I see any of the above as the one way to always do UI. What I do as a project manager on any project, in the absence of a process or tool solution is look to people. That is, I hire a UI person that "gets it." Sure, I shape things, but I primarily solve this with a person.

However, having described a bit about the processes and their abstractions I hope you can see what should be obvious now. For the contents of the UI FBS all that matters is that it is an FBS and not a WBS.

What tends to happen most of the time on my projects is that the subject areas of the UI FBS represent the major application areas. e.g. customer management, account management, search, etc. This is usually pretty easy to partition. Underneath that, most of the time these days the list is broken down by the forms and underlying structures. I'm not advocating this - just describing what teams have done over the last several years (presuming web apps).

In FDD the PD is prioritised and emhpasised as it is the greatest risk and is the best way to communicate and show value to the client (after all that layer is describing the client's domain).

Generally, the PD is the only layer that detail is communicated to the client (directly) and even then that is usually only at the start so they see where the summary report numbers and parking lot numbers come from.

When I present status to steering committees or top management I'll use a slide like this one FBS Reporting Summary Example which is a real status slide from the Singapore Lending project and then I'll show the parking lot chart for each layer - PD, SI and UI.

Notice how for top management I call PD - Business Logic. You will also notice the User Interface is called Items and not Features as that is what the contents of that FBS really represented (screens, panels, widgets).

I hope it is clear now that it really does not matter that the features in a UI FBS may not be written using the feature naming template. But... I am open on how things are done here, as long as the goal of the UI FBS and its relationshiop with the rest of the FDD processes is maintained.

Thanks for the question.

Jeff

maybe in the next release...

You wrote: "Now, the DM layer we never build anymore - we buy a solution. Toplink is a good commercial one (now owned by Oracle) and there are some open source ones also such as Hibernate."

We do buy the data access solution. However sometimes we must extend it in order to implement some addin features that are required by the PD but are not yet covered by the tool:

Though the DM layer is a very solid one, there are some features which can be applied to it but not covered by standards, thus tipically not implemented by OR tools. The most tipical sample is 'internalization'. Since most of the web applications supports multiple languages, 'internalization' must be applied to the DM layer. The feature effects directly the schema. It can be implemented in different ways (associated table for locale specific data, locale specific column naming, etc) however I do not know about any standard that would cover this feature. This is just a sample but there are others (not so typical ones...)

I admit that the set of non-standard features at the DM layer is not a fat one. However it's not empty.

BTW: is there such a thing like that "Feature Driven Reengineering, -Refactoring, -Extending"? Or does FDD only cover the original build process - forward engineering? Sorry for the question, I'm a greenhorn in FDD...

Jeff De Luca's picture

It's not empty but not always needed

Correct, there often is some work that can be classified as DM work. The question is whether you need a separate project aspect (FBS and all associated reports and tracking) for this work.

We rarely create a DM aspect. See this thread for q&a on this subject.

FDD works the same for n+1 as for n. Read this and this for q&a on that subject.

who leads the application design?

You asks:
> The question is whether you need a separate project aspect (FBS and all associated reports and tracking) for this work.

Being a designer I have to translate your question to my 'level'. The associated question for me is the following: who leads the application design? should OO adapt itself to data? should data adapt itself to OO? should they meet in the middle? This is almost equal with the one you asks. If the design is lead by the DM then I definitely need some DM-level support from FDD. If the DM is automatically created from the object model then there's no such need. So who leads the design?

To my understanding the FDD practise tends to prefer the second approach where OO wins the 'battle'. So here's another question: Can FDD forget about data? Can it simply encapsulate DM just as OOP suggests to do? I do not know final the answer. However here are some thoughts about it (with limited warranty:)):

When/why to hide? In the context of problem domains the primary focus is on functionality. In this context hiding the information details, and exposing only the functional aspect of the system seems to be a good design. Why? To put it simply: it's a good design since functionality is the one that is 'published'; it's a good design since maintanance will tipically deal with functional changes.

Hiding means leading? Hiding the information details doesn't automatically mean that OO leads the design. It just means that there's an OO layer above DM, and clients cannot directly interface with the DM internals. However how this OO layer built, whether OO dictates the design or not remains an open issue.

Owning the focus means leading? One could say that the one who owns the focus should dictate the design. However this again doesn't mean that OO should lead the design. Not since in many cases it's the information who owns the focus. This is the case in context of data repurposing (eg. datawarehouses) and enterprise wide information integration (EII). These domains put the focus back onto information. Here information is the one that is exposed to the client (ETTL tool, or data mediator).

So who leads the design? After all I do not know the final answer except for the special cases (like for instance legacy applications). What's more I think there's no such thing that 'final answer'. For instance EII (in parallel with other intergation technologies) seems to fundamentally change the architectural shape of applications. However EII is not yet a technology (Gartner) so the EII and EwhateverI effect on application architecture seems to be a question of the future...

BTW: I'm a bit confused about the term 'PD'. Does PD mean the object modell, the programmatic representation of the model or both? Or something else? Somewhere in this site I've read that this two (the object model and the programmatic representation) are the same. This is certainly untrue since the same object model can be implemented in different OO languages and noone can convince me that a Java object is the same as a VB.Net object:)

Jeff De Luca's picture

FDD does not mandate this

FDD does not mandate or prescribe any of this. It explains how to setup a features list, plan and then track that work. The sum of all that is called a Project Aspect. You can have as many or as few of these as you like. You can also track any trackable items you like. FDD tracks features. If you want a DM aspect, you create one. If you want that level of specificity - if you want visbility and communicability into the DM work then you create a DM aspect.

I (as in me personally) don't often see the need, but if I did I would create a DM aspect. FDD gives you the framework to create and track an aspect. What you use an aspect for is up to you.

Jeff

OK

I've got the point.

I see one more question/issue here related to the overall concept and technical layers. I'm interested how this is resolved (more from the practical then from the theoretical point of view):

The point is that business features are implemented through technical features (code). We can use different architectures - the details can varify and change in time. The thing which is not changing is that we use architectures. At least until MDA becomes a reality we must build these technical features (some part of it). Meanwhile there's a point where you cannot decompose business requirements, functions more (these are the things called business features aren't they?). However these atomic business features still have internal structures at the technical level. There's both a build cost (at any given layer) and an integration cost (cross- and within layers). So how is the following issue handled:

- FDD constraint: features (or planning) must be client valued
- FDD constraint: features should have minimal implementation time
- My experience: there's a point where features cannot be decomposed more at the functional level
- My experience: technical features have no direct client values (unless the customer has an IT staff)

This is the same question I'm facing with many times. No matter whether we used a traditional waterfall approach or Extreme Programming or whatever we found that there's always a gap between the business and technical level in all kind (modelling, scheduling, etc.). This maybe because we are bad technicians, using bad tools maybe not. Anyhow I do not see how the above two constraints could be achieved. What's your opinion/experience? Any hint? Is this a real issue over there?

szego's picture

Implementing features

...business features are implemented through technical features (code).

There are just "features" - and they're all about the business. Remember they're expressed as "client valued", and there's nothing technical in them.

We don't have "technical features". There's just the code that gets written to implement a feature (or set of features) in a work package. That's it.

Features should have minimal implementation time

No - the only constraint is that they're no more than 2 weeks to fully design and build. It's an upper limit, but there's no other constraint about trying to break things down to the smalles pieces possible. I think this resolves your first observation from experience - we simply don't try to decompose this way.

The gap you mention is not one I've encountered. You need experience in how to turn an object model into code, but that's just plain old "how do I do OO" stuff and nothing particular to FDD (althought FDD does make it easier in a number of ways).

Can you give some example of the kinds of gap you have experienced in the past?

Regards, Paul.

Samples

Briefly:

  • Non-standard technical requirements. This is the most common in my experience - many times it leads to paralel framework and application development. Last sample: implement pinned/scheduled/reliable services in a clustered J2EE environment.
  • Non-standard application architectures. Last sample: build above a mixed J2EE/CMS environment where the CMS engine itself is built upon J2EE.
  • J2EE: many Java applications are designed/coded against J2EE. Meanwhile J2EE is not OO. Then what design technology should be used? OOD against a non-OO platform? If not OOD then what methodology? If not OOD then what tool support do you get?
  • Separation of business and technical logic. Framework-based approach is already down but AOP is not yet up. Last sample: wire cross-layer (web, ejb) logging into the application and do this before the logging framework is finalized.
  • Model/implement/maintain process logic. OOP doesn't cover/hides the control/flow logic. Meanwhile many applications are 'dealing' with business processes - that is to say maintanance hits as much the control flow as the functionality. Last sample: wire event-based (eg. JMS) integration into wizard generated code (JBuilder generated Entity Beans and Session Facades).

These are just briefings. Should I go into details? About which sample?

szego's picture

PD and Models

"BTW: I'm a bit confused about the term 'PD'. Does PD mean the object modell, the programmatic representation of the model or both?"

PD stands for Problem Domain, which is another way of saying the business logic. We believe in layered architectures, and the busines logic is kept separate from other concerns such as the user interface or external system interfaces.

If we're talking an OO implementation of the PD, then we represent it with a domain model - a UML class diagram that models the business itself.

"Somewhere in this site I've read that this two (the object model and the programmatic representation) are the same. This is certainly untrue since the same object model can be implemented in different OO languages and noone can convince me that a Java object is the same as a VB.Net object:)"

I disagree - they certainly can be the same. What is different about the class in the object model and the code that implements it? Aren't they just two different views of the same thing?

That's how I build object models, and have for quite some time. And a counterexample: using a tool such as Together the code and the object model *are* the same thing! You just get a graphical (class diagram) view and a textual (source code) view. But there's still only one of them.

There's a similar view expressed over here also.

Paul.

class vs. views

"I disagree - they certainly can be the same. What is different about the class in the object model and the code that implements it? Aren't they just two different views of the same thing?"

If the model and the code are different views (as you say) then they are different. This is tautology:) Meanwhile the thing (the class) that they represent is the same.

"And a counterexample: using a tool such as Together the code and the object model *are* the same thing! You just get a graphical (class diagram) view and a textual (source code) view. But there's still only one of them."

I'm a strong beleiver of the convergence between CASE tools and IDEs. This is the way to go:) However I think this is not yet a standard/mature thing. But again I could be wrong.

Regarding Together... The automatic synchronization between Together and JBuilder can give someone the feeling that the UML model and the Java code are the same. Yes they are synchronized. No they are not the same - they are different views of the same thing (classes). Again this is tautology.

One more thing... Someone can even disagree with your (or Dr Booch's) 'view' concept. If the guy is called Martin Fowler then it may be worth listening. See for instance: UnwantedModelingLanguage

szego's picture

UML complexity

Martin Fowler is talking about something completely different. That discussion has nothing to do with whether you view the model and code to be the same thing.

I agree with him - the UML is way too complex. I only use a very small subset of it, and it works fine. When I teach modelling there's a 2 page summary of *all* the UML that's required (and a lot of those 2 pages is comments). It's the same subset I use when modelling on real projects, which I do all the time.

Paul.

plans vs. views

"Martin Fowler is talking about something completely different. That discussion has nothing to do with whether you view the model and code to be the same thing."
Yes, you are right about the article I quoted. What I tried to mean is that there are different usages of UML: scketches, blueprints or formal modeling (as Martin Fowler classifies these usages). In my viewpoint 'formal modeling' is the thing that the view concept covers, meanwhile 'scketches', 'blueprints' are closer to the traditional concept (when UML acts as high level plans for coding). Otherwise I can accept both ideas/practises: if someone uses/thinks of UML/code as views of the same 'logic' - meanwhile I can also accept if someone uses UML diagrams as high level plans, scketches for and before coding.

szego's picture

Abstraction

I really don't see the point of your first statement :? Looks like you're now in violent agreement with me.

I was trying to make a point, and that is that with some small degree of abstraction you can treat the code and model as being the same thing. Myself and plenty of others have found this to be an extremely benefficial approach to building OO software. I didn't come up with this idea - I learnt it from others with a lot more experience than myself.

If you want to argue that they are in fact different things because they look different or because the code lives in a different file to the model diagram (because of your toolset) or whatever, then go ahead. I'm not going to stop you. Not everyone can abstract, so I guess for some it's not a useful idea.

Paul.

Practise vs. Theory

OK. Finally I've got the point. It seems that we are arguing/looking at things at different levels.

"I really don't see the point of your first statement Looks like you're now in violent agreement with me."

I'm arguing at the 'practical' or 'physichal' level. At this level you need a tool to synchronize the model and the code. At this level you can compile the code however cannot (yet) compile a model. At this level you cannot (yet) import a C# source into a Java source however import is not an issue between models. Etc. These all makes differences between the model and the code at the 'practical' level.

Meanwhile -as I understand- you are looking at things at a 'higher' or 'abstract' level. I admit that this is beyond my abilities - I'm just a simple programmer/designer:)

"Myself and plenty of others have found this to be an extremely benefficial approach to building OO software."

  • An Open Source UML+IDE bundle solution may open the idea to a wider audience. Together is not (yet) the cheapest thing...

  • Also it's not clear for me, I have no experience on how this approach affects the development roles/process (designer-programmer / design-implementation)...