views:

1518

answers:

12

We follow Scrum for software development in our organization. Although we have fair experience with Scrum, we stop short of producing good source code at the end of the day. People are talking about combining Extreme Programming (XP) with Scrum to produce predictable results.

I have gone through the Extreme Programming materials but couldn't get a good picture.

How are Scrum and Extreme Programming are used in software development?

+7  A: 

Inspect and Adapt.
No Silver Bullet

There is no magic serum to make teams successful just because they're using Scrum/XP/Agile et.all ; Find your bottlenecks and eliminate them one at a time

Update: Some feel my answer isn't helpful enough. I claim 'agile scars' have left me this way - (Put on my helpful hat) Maybe you should read Scrum and XP from the trenches

Gishu
+1. There's too much trust in development methods. They should add value to reasonably healthy organizations, and not be used as a cure when things start to look really bad.
sharkin
It is true that one shouldn't expect agile, scrum or XP to be "magic serum" or anything like that. Still, this answer provides little tangible advice regarding the question of how to make best use of them in software development.
Jonik
Best practice is nothing but when you cut away the flab from your activities - something similar to Lean methods. e.g. Refactoring is a best practice - should be second nature to you. However spotting a potential target for refactoring and then executing it.. comes with practice and keep yourself updated. Scrums are another B.P. that is being embraced - however I've seen teams just going through the motions without realizing any benefit. Just saying we're going to do X from tomm doesn't add any value unless you learn why and how to do X right.
Gishu
When I was at Jewelry Television one thing they implemented was a board where everyone could put down postits about what is causing problems with getting good code, and then management looked at each one and gave feedback as to which will be worked on, and which would need more work, but, in the end, the system improved. Management have to be very involved for agile to work, IMO.
James Black
+2  A: 

Scrum is the Agile process for project management, and so it doesn't have an impact on code quality other than its tight focus on always having a potential deliverable system at the end of each 2-4 week "sprint". By keeping sprints short and getting daily feedback, the project manager gets a much better sense of how much effort new features take to implement, and the team gets a good feel for the relative importance of each new feature.

You still have to do the hard work of programming. There are many great books on this (such as McConnell's Code Complete, and Hunt and Thomas's The Pragmatic Programmer) and you should study them carefully and apply them to your work.

Jim Ferrans
+1  A: 

Both The Pragmatic Programmer (as mentioned by Jim Ferrans) and Clean Code are excellent resources for the agile programmer. You may also want to take a look at the books in the extreme programming series.

Brian Rasmussen
+1 no need for the downvote
Bedwyr Humphreys
+7  A: 

Scrum has nothing to say about programming.

In my opinion you can not be 'agile' without the software engineering practices that allow you, at a technical level, to respond quickly to change: incremental design, unit and acceptance testing, refactoring, continuous integration, collective code ownership.

This is on top of all the other things that are needed, such as a high level of involvement from your customers and effective communication within the team and out.

Along with the other books mentioned here, The Art of Agile Development by James Shore and Shane Warden is the best book on agile software development out there.

[edit] Some links to sources other people have mentioned here:

Continuous integration

Refactoring

Scrum and XP from the Trenches by Henrik Kniberg (great presentation on infoq.com)

Bedwyr Humphreys
I'd like to add some pointers to recommended, definitive reading. On continuous integration, this article by Martin Fowler: http://martinfowler.com/articles/continuousIntegration.html. On refactoring, the "Refactoring" book (also by Fowler): http://martinfowler.com/books.html#refactoring
Jonik
+1  A: 

Each individual developer, his/her style, skills, and desire to always soak in new information have as much to do with the quality of the code and success of the final product as the development process.

If you don't have the right people, no PM technique will help you. Find the right people first, people that can produce good code separately, and only then worry about combining them in a team effort. One individual can undermine the whole team's effort.

On a side note, one thing I hate about SCRUM is the daily standup meeting. Yarrr.

Artem Russakovskii
A: 

In addition to agile/scrum, I recommend the following (some ideas must be implemented by management... so good luck):

  • analysis and discussion with others before a line of code is written; this includes bringing in the pertinent devs and non-devs
  • code reviews before check-in (this can be mandatory in TFS & other source control systems)
  • encourage free flow of ideas organizationally (lead by example); never punish someone for sharing their thoughts (well, w/in reason), as doing so contradicts the free flow of ideas that companies more agile (and more profitable)
  • establish a "senior" or "architect" position for a dev, possibly hired from outside, who is extremely competent but who is also not bashful about pushing back on management for the sake of good s/w architecture, avoidance of "features" that compromise long-term extensibility, etc.
Garrett
+1  A: 

Krish, what is your position? a team manager? I found that the best thing to do as a Scrum team leader is to place a problem before the team and let the team come up with a solution. For example, we were always off target at the end of the sprint. So, in one post sprint review, I placed the question "give me the number of hours that represents the capacity of our team for the sprint". There were three results:

  • we had never been closer to meeting our mark
  • the number was higher than my estimation :-))
  • all team members put in an extra effort

We are using software tools (OnTime in our case) to keep track of all important measures and debate our statistics after each sprint. Also, we have a practice of changing at least one thing in each sprint.

Hope this helps, please feel free to ask for more

Matej

Harnod
Note that the question was originally posted by Krish, not R.A.; http://stackoverflow.com/revisions/851254/list
Jonik
Thanks for the note. Corrected. Matej
Harnod
+1  A: 

SCRUM practices are suitable for collobaration and prioritization with the product owner. However, by itself, SCRUM will not eanable sustainable pace by the development team.

The XP focus is on engineering practices Practices such as test driven development (TDD), shared code base, simple & evolutionay design, paired programming, automated testing, continuous integration, technical debt etc.

Of all the engineering practices, TDD is hardest to learn and in general, the engineering practices have a higher learning curve than the management (SCRUM) practices. However, without the engineering practices the code will come to a point where you will not be able to maintain velocity. The reasons being is the code will take to longer and longer to test and become to fragile to change.

If you are going to take on the engineering practices, it is best to embed into the team a technical or engineering coach. The coach would provide intro training for each practices and through pairing quickly propogate the practices through the team.

SCRUM and XP are a great match. Some research shows that combining SCRUM and XP results in the most effective agile teams. Given that each focus is distinct yet complementary, you will be wise to use both SCRUM and XP on any of your agile teams.

Cam Wolff
+5  A: 

Scrum is an agile project management methodology. It does not address the practices required to create "goods" of any kind, but instead gives us the process that will take us from the inception of a vision to the final product, regardless of the actual development process. The Scrum process doesn't tell you how to create quality. It shows you what the quality is, where your problems are, and challenges you to fix them.

Extreme programing is an agile software development methodology. It gives us a process with which to create software in an agile and productive way. It deals with, though doesn't specialize in the management of the development process, and focuses mostly on the engineering practices required to deliver software, with quality.

When adopting Scrum for the purpose of software development, the engineering practices are imported from an agile software development practices, most often from XP. These practices, are those that can be adopted in a manner that is decoupled from the rest of the development practices. Most often, these practices are: Test-Driven Development, Refactoring, & Pair Programming, and User Stories, though by no means are these required in Scrum, or the only way to do things (just highly recommended). Agile Modeling is another common source of agile engineering practices.

So in short, when mixing Scrum and XP, which is by far the most common mix, you use all of Scrum's management artifacts, e.g. Sprints, daily Scrums, retrospectives, burn down charts, and so on, and add XP's TDD, refactoring, pair-programming and JIT design via User Stories.

Of course, Scrum being Scrum, this is how you start, and you constantly adapt (refactor, if you will) the process to answer your organization's specific needs.

Assaf Stone
Very nice summary, +1. Although I wouldn't call scrum team's continuous improvement 'refactoring', because the team's external behaviour does (or should) change too (higher quality / software meets needs better / faster development / etc), not only its internal organisation. :-)
Jonik
Thanks for the +1. :-)I differentiate between refactoring the code (what I referred to), and team improvement. The reason I didn't mention the latter, is because it is handled, and managed with the retrospectives process that Scrum defined. I see XP's continuous improvement as more of an ideal, and less of a process and method (correct me if I'm wrong).
Assaf Stone
+1  A: 

You are writing bad code because:

  1. Your team doesn't know how.
  2. No one in authority checks, approves requires good code.
  3. You're not given enough time?
  4. Too much reliance on poor legacy code.
  5. Not give proper tools (Source control, development environment, communications, etc.)

I'm not sure any of these have to do with Agile/Scrum.

Jeff O
A: 

What do you mean 'good code'? Why is good code important? Are you talking about maintainability - does this need good code or good documentation? Are you talking about reliability - does this need good code or good tests and documented requirements? Etc

Use common sense, establish rational systems of criteria and assessments, try to ignore unsubstantiated claims of success attributed to some technique or tool.

+1  A: 

Have a look at this matrix of good practices comparing SCRUM and XP made by James Shore. By the way I found his book quite usefull if you want to understand XP. There are also some articles that may give you an idea of some of thouse practices.

borjab