InfoQ

InfoQ

News

My Bookmarks

Login or Register to enable bookmarks for unlimited time.

The content has been bookmarked!

There was an error bookmarking this content! Please retry.

Agile at Microsoft: Developing XML Notepad

Posted by Jonathan Allen & Floyd Marinescu on Oct 16, 2006

Sections
Process & Practices,
Architecture & Design,
Development
Topics
Methodologies ,
Stories & Case Studies ,
Agile ,
Artifacts & Tools ,
.NET
Tags
Microsoft ,
XML ,
Visual Studio Team System
Following up on our coverage of XML Notepad's rebirth in Sept, InfoQ had the opportunity to interview Chris Lovett of Microsoft's XML team regarding XML Notepad and its development process.  XMLNotepad is a free XML editor written in C# with features like a search tool that supports RegEx and XPath, an XSLT transformation results view, and a schema validator.  The interview is about software development processes used to build the product (see also Microsoft countingon Scrum and XP), not about Notepad itself. 

InfoQ: What development process did you use to create XML Notepad?
We're using an " Agile Development Process" for these kinds of tools, which means it's a highly iterative process. We prototype the idea, show it around, get feedback, lots of hallway discussions, great feedback gets incorporated into the next iteration and so on, until we reach the point that we think we have the right set of features to call it done. So it's a light weight process with a small team that can move fast and respond quickly to feedback. Specifically we do one month iterations with a "feature team" consisting of developers, program managers and testers (3-10 people in all). Jointly the feature team has a high sense of ownership over the product. At the end of each month we do a "showcase" meeting where results of the work are presented to management, and then planning happens for the next month. Bigger changes in resourcing or direction for the product can happen at this point. This checkpoint stops a project from going off into the weeds too badly. This monthly cycle seems to work really well. The interesting thing is we're trying to move all product development to this sort of agile model. There's no reason why a single feature of a large product can't be thought of as one of these smaller application efforts. You just do a lot of them in parallel.
InfoQ: Compared to how you used to work, does this process seem to work significantly better or is it just different?
To be honest, it is what we've always been doing on this kind of project, we just have an official name for it now. It is the process that makes sense. Generally at Microsoft the process is there to serve the team, the team is empowered to make the process work for them not the other way around. Massively parallel development on large projects is just plain hard, so we generally have to put a lot more process in place to help manage that. But even there each feature team is free to add more process that is specific to their project. For example, if one team is doing a performance critical piece, they will do a lot more around monitoring the design, implementation and test progress on that performance axis – this actually is not a good example because every component has to perform or else the whole system sucks. So a better example might be GUI design which only applies to those components that have a GUI, these teams will put extra process in place to ensure they have the best possible GUI design.
InfoQ: Do you see this changing the way you test software as well?
Agile development does impact test a lot, with a highly iterative process things change a lot, and change is very hard for the test team to track and deal with. For example, when last month's tests are all broken because of the amount of churn in the code this month. The best way to manage this is to break down the barriers between development and test. Early on the test team will be doing test infrastructure development, talking with development on the kinds of things they'll need to be testing and making sure they are ready to do that. This is really a development role for the test team. Later on in the project we'll have the devs doing test work to help make a dent in the test debt that has built up due to churn in the product. Breaking down the barriers also makes for a much healthier team – so there's a lot of side benefits to Agile that I see. 
InfoQ: For this project, would you say you focused more on automated or manual testing?
Both. There is a suite of automated tests included in the XML Notepad project that uses the Visual Studio Team System Unit Test project, which I love by the way. This is a methodical unit testing approach which finds lots of bugs in edge cases and so on, and you look at the "code coverage" report to see what you haven't thoroughly tested yet and so on. But we also did a number of "bug bashes" to get people really using it like a customer would and this finds a different set of bugs, more in the usability area, and we got a lot of feature suggestions which also helps us figure out if the product is "complete" from a feature set point of view.
InfoQ: Why did you decide to release the source code and design document?
The purpose of the project was to show folks how to use System.Xml features. You can only do so much with code snippets and samples. There's nothing like a real app to really show folks how it all hangs together. Of course, it doesn't hurt if that app is also a handy tool. I already have folks asking if they can integrate the canvas with a bigger tool they are working on – one of them was in the content publishing area. So to help these folks grock the source code, it also helps to give an overview of how the app works which is what the design doc attempts to do.
  • This article is part of a featured topic series on Agile

No comments

Watch Thread Reply

Educational Content

New-age Transactional Systems - Not Your Grandpa's OLTP

John Hugg discusses high volume transaction processing applications with high and low frequency profiles, and how VoltDB can be used for that purpose.

Cool Code

Kevlin Henney examines code samples to see what can be learned from them starting from the premise that one won’t write great code unless he knows how to read it.

Collaboration: At the Extremities of Extreme

Jason Ayers share the observations he made watching a team of developers collaborating in real time on the same code base, pushing XP, pair programming and continuous integration to their extremes.

Yesod Web Framework

Michael Snoyman presents Yesod, a web framework written in Haskell and containing a web server, templating, ORM, libraries (templating, gravatar, etc.).

Transactions without Transactions

Richard Kreuter and Kyle Banker on how to avoid classical RDBMS transactional systems by using compensation mechanisms, transactional messaging or transactional procedures.

Attila Szegedi on JVM and GC Performance Tuning at Twitter

Attila Szegedi talks about performance tuning Java and Scala programs at Twitter: how to approach GC problems, the importance of asynchronous I/O, when to use MySQL/Cassandra/Redis, and much more.

10 tips on how to prevent business value risk

One category of risk that project teams need to ensure they address is business value failure – delivering a product that fails to provide value for the business investor.

Interview: Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives

InfoQ spoke to the authors of Software Systems Architecture on a couple of new topics, the System Context viewpoint and Agile, which have been added to the second edition.