| «« Bray to Americans: Fire Bush, Please | Podcast This »» |
|
About
I'm Ryan Lowe, a Software Engineering graduate living in Ottawa, Canada. I like agile software development and Ruby on Rails.
I write this blog in Canadian English and don't use a spell checker. Typos happen.
Projects
» Full-time Ruby on Rails freelancer
» Full-time with Rails since May 2005 » Former committer for RadRails (now Aptana) » I also have a few Rails side-projects in development: 1. wheretogoinTO.com Toronto nightlife 2. Hey Heads Up! TODO list and sharing 3. Layered Genealogy family history research 4. foos for foosball scoring 5. fanconcert for music fans (on hold) Hiring Rails developers? I can telecommute by the hour from Ottawa, Canada »» Email: rails AT ryanlowe DOT ca
BulletBlog
Now hosted on Hey! Heads Up -- check it out!
Syndication
Pings
Recent
Derek Lowe's (Ryan's older brother) words at Ryan's funeral
blog@ryanlowe.ca no more Forging Email Headers: Good, Bad or Ugly? Sarcastic Dictionary (Part 1 of Many) Tags Hierarchies Twisting Rails is Risky Business Risky Business? My Take on Early Alphas Whoa, it's August 2007 Closing Comments A Postscript to "Growth at the grassroots" »» All Blog Posts
Linkage
del.icio.us/ryanlowe
technorati/ryanlowe.ca/blog Aurora Roy Jim Andrew Trasker Travis Kibbee Karen Dr. Unk Ayana Van Bloggers Joel Spolsky Robert Scoble Tim Bray Dave Winer Raymond Chen James Robertson Ruby/Rails Bloggers rubyonrails.org weblog David Heinemeier Hansson Dave Thomas James Duncan Davidson Mike Clark Jamis Buck Signal vs. Noise Tobias Luetke Amy Hoy: (24)slash7 Jeremy Voorhis Eclipse Bloggers Planet Eclipse EclipseZone Luis de la Rosa Eclipse Foundation Kim Horne Billy Biggs Ian Skerrett Mike Milinkovich Bjorn Freeman-Benson Denis Roy
Archives
|
Project Quality as a Development Bottleneck
What's the bottleneck for software development? More directly, what's the area that is important but takes the a lot of time and if it was sped up would decrease total development time? I'd have to say it's project quality. If project quality is in check, the project is in a better position to release at any given time. Shipping the software is a primary goal of software development. Even if you aren't following XP's iterative ship early, ship often approach, ask yourself "is this task getting me closer to shipping the product?" If it's not, question why you're even doing it. Another reason project quality is important is that it's much easier to refactor and add features to well tested code because you'll know if you break anything. This puts you in a position to augment with confidence. Without unit testing, you are adding code entropy without a safety net every time you touch the code: you are stirring up the codebase and adding defects. I don't care how good of a programmer you are, you will add defects when you add features. It may seem like it's much faster to add features this way, but it's a trap. In the long-haul the develop now, test later approach takes much longer to add features and make sure they are good enough quality to ship. You're going to have to do the quality work anyway, why not do it now? So let's see ... how can we improve software quality? Unit testing is a good way, and if you go even further you can do test driven development. Developers sometimes resist this approach because they see testing as grunt work. This is old school thinking, and developers like this won't help your project -- they will hurt it. They are not thinking of the project, they are thinking of themselves. Another way to improve quality is to throw people at the problem. This may seem like a stupid idea, but this is why open source projects succeed: the project managers leverage everyone that uses the software. You have to channel this feedback properly, organize it and get the feedback to the people that can make the changes but it seems to work really well. Using feedback is absolutely critical for success. In fact it works so well in the open source world that it's seen as a viable replacement for unit testing on small projects. I don't completely agree with that sentiment, but having an army of free testers is better than nothing. The interesting side effect is that if you're not unit testing an open source project you can get new (but initially lower quality) features into the codebase faster, attracting more users on the bleeding edge and then the project sometimes just snowballs. Quality is improved by listening to feedback. You walk a fine quality line, but you have to in order to respond to feedback quickly and attract more users, which improves quality. It's very cyclical. Taking in and using the feedback isn't the hard part. The hard part is finding the people. On open source projects it seems to be a combination of the project's usefulness and the project manager's charisma and communication skills. On closed source projects users are much harder to find. Number one, they usually cost money. Number two, you can't just use anybody to test your product because it might be a secret, so you need to test in house. Number three, your developers are biased and are poor testers by nature -- they can only do so much. All of those factors narrow your options. Closed source projects can't compete with open source projects' army of free testers, so they need to improve quality in other ways. Planning a project up front (ie. waterfall) is a defensive style that can improve project quality at the expense of agility. If your company can live with this, then it's a good way to go. Iterative/agile approaches also seem to produce good results. They use customer feedback with iterations and unit testing to allow for high quality but agile code that can respond to change ... at least that's the theory. So back to the bottleneck issue now: how can we speed up project quality? I think there's lots of opportunity to improve testing tools, even just improving how we look at the tests themselves so that their effectiveness may be analysed easily. Continuous integration also helps to keep the project on track, and gives the project manager good feedback. Code coverage tools like EMMA also help the testing effort, pointing out weak areas and making sure important/sensitive areas are well covered. Couple that with more effective feedback management and defect triage and I think you'd speed up the whole development process a lot. Someone is going to make a lot of money improving the testing experience. There's a big gap here and lots of opportunity. Posted at October 19, 2004 at 08:13 AM ESTLast updated October 19, 2004 at 08:13 AM EST Comments
I think that the only time that waterfall *might* work is if you totally understand the domain (and don't need to change it -> your agility comment). Even then, I don't t think that's a good way to go at any time. If you think that your understanding of a domain is 100%, YOU (project manager, developer, customer, ...) can change your mind about what the "best" way to solve the problem would be. I'd still say to go for an iterative process. I can't think of any cases where it would really hurt you. If you are wrong about your domain knowledge, you're in for a world of hurt (if you do waterfall). On a different note, have you started to use EMMA for code coverage instead of jcoverage? Why did you switch? Can you compare / contrast them in another post sometime? » Posted by: Jim at October 19, 2004 09:08 AMWaterfall is good for places where iterative isn't possible. Cell phones are a good example, but I would expect that to change. A better example would be low-level software where you have to get it right the first time, like a BIOS or devices that cannot be updated easily. Then you need the checks and balances. Without that requirement, I agree iterative is a much better approach. It's cheaper, and it gives the customer the ability to improve the product through a short feedback cycle. So far EMMA seems to be a better tool than jcoverage. I am going to use it a bit more and write a comparison. The problem with jcoverage is that the GPL'd version plays second fiddle to the commercial counterpart. There's always something in the commercial version that I need that may or may not show up in the GPL version, God knows when. EMMA is completely free and includes a neat concept called "block coverage" where blocks are somewhat related to code branching and could be used for complexity analysis like function points. It's a much better metric IMO than just lines. EMMA also supports partial line coverage: it indicates when one part of a line is covered but others are not. This is because in Java you could put a whole method or class on a line if you want. When you compile Java to bytecode, the compiler "unrolls" this one line out to several bytecode instructions all mapping to the same line of Java code. jcoverage doesn't do this. » Posted by: Ryan at October 19, 2004 09:50 AMI would have assumed that code coverage tools would roll out your code so that you didn't interpret the entire program as one line. What about single lines that are put on multiple lines? Anyway, you probably shouldn't be putting an entire class on a line anyway, but that's just my opinion. » Posted by: Kibbee at October 21, 2004 08:48 AMPersonally I *hate* code that it not all on one line... I have to scroll down all the time. It's much better if you can put an entire app on one line. That's when you know you have great style. It's all about making your code unmaintainable so that you can ensure job security. Obfuscation is our friend. ;-P » Posted by: Jim at October 21, 2004 09:31 AMKibbie: I agree that you shouldn't put things on one line but it's possible in Java so EMMA handles it. Even something as simple as: if (condition) doAction(); can have "partial" line coverage. If the condition is false, the condition part of the line is executed but the action is not. jcoverage would just say the line was covered, which can be misleading. Of course, branch coverage would be better. Then you could make sure that you test all of the possible branches available. ... and the best is path coverage: all of the combinations of branches possible. It's usually not practical to test a method at this level though. Unless it was a super-critical method, it wouldn't be worth your time. » Posted by: Ryan at October 21, 2004 09:41 AM |