Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I've just read two statements that seem to be very different:

Des Weiteren ist mangelnde Kommunikation zwischen Programmierern und Nutzern eine nicht zu vernachlässigende Quelle von unzureichenden Produkten.

Translated:

A lack of communication between programmers and users is a source of poor [software] products.

Source: de.wikipedia.org

I think I have read something similar in CHAOS report of Standish Group.

And

Insbesondere bei der Rolle Development ist Kontakt zum Kunden oder zu den Benutzern nach Meinung des MSF geradezu zu unterbinden.

Translated:

According to MSF, especially the role "Development" should not have contact to the customer or to the user.

Source: msdn.microsoft.com

This also makes sense, because as a programmer I want to have happy end users. So the user likes to have a new feature, I'll try to implement it. This could lead to feature creep.

If I understand it correctly, MSF (Microsoft Solution Framework) tries to avoid this problem by a role that has contact to the customer (this is the product manager, the user experience role and maybe the testing role, isn't it?) and only one role that has contact to the development role (the program manager).

Question 1: How do agile methods deal with the problem of feature creep? I read that the developers should have very strong contact with customers in agile methods and that one of the main problems in using scrum is to persuade the customer to get involved in the process.

Does in SCRUM only the Product Owner have contact with the user / customer? Isn't this a problem, as the programmer might see different problems than the Product Owner?

Question 2: Who does the requirements engineering in agile methods and MSF?

Question 3: Do you validate in MSF / agile methods if your product does what the customer wants and the user needs before shipping it? How do you do it?

share|improve this question
    
Product development (for example, at Microsoft) and individual business software development follow different rules. For example, this article may give you some insights: joelonsoftware.com/articles/FiveWorlds.html –  Doc Brown Feb 14 '13 at 14:32
1  
interesting how this very question demonstrates scope-creep. It starts with a reasonably narrow title, like "should programmers talk..." which further somehow transforms into three topics: (topics broad enough to even have a dedicated tag at Programmers) 1) feature creep 2) requirements engineering 2) Do you validate / How do you do it... –  gnat Feb 14 '13 at 15:07
2  
Having developers learn from customers what customers want, and deciding what the next things that get done are, are different things. "So the user likes to have a new feature, I'll try to implement it." - that this happens is not directly related to you learning it direct from the user! –  AakashM Feb 14 '13 at 15:33
    
Why do you see feature creep as a problem? That may help in answering the question –  Robert Wagner Feb 22 '13 at 1:56
add comment

5 Answers 5

  1. The customer is part of the team that produces the product, so they can indeed pile wish upon wish. But they are also part of the planning process for which story is included in which sprint, so they get immediate feedback on which wish will take how long to implement, and what other wish will be postponed because of it. This creates a natural counterweight. (Whereas in old-fashioned, strictly segregated requirements engineering and development, such feedback virtually never happens, and the customer has no idea which features would take how much time; sometimes the customer reps even actively lie about it.)
  2. Differs from method to method, but in general, the focus is on getting requirements from people closer to the actual users of the finished product, rather than from their managers, their procurement department, or even their sales reps.
  3. Pretty much part of the same arrangement as in (1): the customer should be present when the feature is planned, implemented, tried out and tested. If during all those steps, they don't notice that they don't actually want it, well... some people truly can't be pleased, and even agile methods are helpless against that.
share|improve this answer
add comment

How do agile methods deal with the problem of feature creep

The main way is that Agile methods are typically based on the idea of a backlog and release planning. Anything that a user wants can go in the backlog. At regular intervals, the users are expected to prioritize the backlog, to set the features that the team works on.

Users are not, however, allowed to request new features for the current iteration. The definition of "feature" is somewhat blurry, though: at the start of the iteration, the programmer knows just enough about the requirements to give a rough estimate of time. During the iteration, the developer will work with the user to refine the requirements. As this happens, the agreed-upon feature may turn out to be more complex than originally expected. In a perfect world, user and developer settle on "good enough," and defer enhancements to the backlog.

In the real world, sprints occasionally fail (don't produce anything) because user and developer can't agree on reasonable scope. After a few failures, the team (which includes the users) have to face their disfunction, and figure out a way around it.

Who does the requirements engineering in agile methods

The team, which includes developers and users. The idea behind Agile methods is that users rarely know what they want in the level of detail needed to implement a production-quality piece of software. There are always corner cases, and those should come out as the developer analyzes the feature.

The big issue is how those requirements are captured. There's no reason that you couldn't produce a formal requirements document as part of an Agile methodology, but most teams see that as anti-Agile. Some teams use testcases as the requirements, and a well-written suite of integration tests is one of the best formal requirements documents you can get. A wiki page that captures the discussion between users and developers is also reasonable.

Unfortunately, many teams see Agile as "we don't need no stinkin' documentation," and end up in arguments six months down the road. Which occasionally spells the end of "Agile" at that particular company.

Do you validate in MSF / agile methods if your product does what the customer wants and the user needs before shipping it? How do you do it?

The user says "this meets my needs." This happens at the end of every iteration, and when enough needs are met the project releases. Then the enhancements start.

share|improve this answer
add comment

These two philosophies seem to contradict each other, but they can coexist. Just because the developers don't have direct contact to the users, doesn't mean that there is no communication between them.

The communication happens through the customer relations people who ask the customers for their requirements, translate them into the language of the development team, and give the developers clear instructions they can follow. Then they present the prototypes to the customers, aggregate their feedback and report it back to the development team. That way the developers can concentrate fully on the development.

The Microsoft philosophy is based on the assumption that programmers and customer relations are two entirely different specializations with entirely different training. The programmers are trained for talking to machines while the CR people are trained for talking to humans. Each one should do the job they are trained for.

The agile philosophy, on the other hand, assumes an eloquent software developers who can both write elegant code and have the social abilities to deal with the users. Excelling both at social and at technical skills is an ideal we should all strafe for, but let's be honest: most people are more enclined for either one or the other. Those who can do both are a rare (and extremely valuable!) elite.

share|improve this answer
    
The reason agile methods advocate direct contact with the domain experts (users) is that any intermediary introduces delay and increases the chance of miss-communication about a feature. –  Robert Wagner Feb 22 '13 at 1:51
add comment

This is from an agile point of view

1. Feature Creep Feature creep in an of itself is not a problem and is in-fact encouraged in agile. The customer should be able to request new features as they occur. The scope should be able to change, and dealing with that change is a main tenant of agile.

Where is does become a problem is if the team has committed to a set of work (ie a scrum sprint) and the requirements change. Hopefully by the time the planning meeting is over the feature is well defined and can be committed to and hopefully won't change in the next 2 weeks. Before the planning meeting the feature should be allowed to change as much as they want.

My view is that the team should be able to absorb a little change during the itteration. If it's just additional work on top of the feature, add it to the backlog. If it no longer makes sense to do the feature, either fit it in or remove the feature all together. If the feature is already done, add the change to the backlog. What ever you do, don't implement a feature that is no longer required. In any case, the Product Owner should be involved as they are the ones who have to "accept" a feature as it's done

A way of limiting scope change is to write good user stories. A good user story clearly states what a feature is about. It is also small (ie < ~2 days of work), so it needs to drastically change for it to have an impact.

2. Requirements Gathering Agile tends to be pretty quiet on who does the requirements gathering. It could be the Product Owner, developers, BAs or the end users. What is important is that there is a single backlog (program of work) and that it is prioritized by a single person (the product owner). The product owner can get input from others and organise it using any method they like, but the buck needs to stop with him/her.

3. Validation If you are using an iterative method (eg scrum), the validation is usually done at the end of iteration presentation. If you are using a continuous method (eg kanban), the validation is done continuously. The task is not done until it is validated. I usually get my team to regularly pull in the right people and go through the feature with them.

An alternative is to just ship the feature and adjust it based on feedback. You can only do this if you shipping software often (daily->fortnightly).

share|improve this answer
add comment

We work in a large corporation where our client is our Client Services department and our Product Owner is the head of that department. She has one "under-head" that assists her with everything.

To answer the question of developers talking to the client: In Scrum/Agile the 'client' would be the Product Owner (PO). It is VERY important for the client to come into contact with the developers working on their product. It helps in Sprint Planning and Backlog Grooming to get the understanding of the developers on par with that of the client. So that what we build is damned close to what the client expects. But sometimes the nature of the client or the environment of the relationship is such that the two parties should rather not talk to each other. In cases like this one would get a Proxy PO who can communicate with both sides. Someone who can still give the developers the personal connection to the 'client' while keeping the client up to date with what is happening with their product.

I will attempt to answer your sub question, of dealing with feature creep, by explaining how we deal with it: With backlog grooming we can learn what the client has added to the backlog and what their priorities are. Here they can add what because in the corporate environment the one product we work on is long term. But if they start adding stuff during a sprint (after we have committed to X-amount of stories/effort points) then we simply size the new work and label it as "unplanned". Unplanned work can be added to the Sprint but then we either remove an equal amount of point from the initial list or we add it as negative points to our Sprint graph. This allows the client to see the impact of their decision on what they wanted for the sprint. Should they not get all the original features or should the original commitment not be met at the end of the sprint it is made clear it was their fault.

This happens but once or twice and then they stop doing it. :) But is does require the developer team to stick to their guns and not let the unplanned work "fall through the crack" and be done anyway.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.