The Next Home of Chris Chapman's Free Thoughts on Agile, .NET, SharePoint, what-have-you, whatnot. 
# Monday, September 17, 2007

Update:  I've revised the results table to highlight the best practices that are offered as an exclusive course and as a potential constituent unit, with the former in orange and the latter in blue.  Additionally, I've adjusted the totals for each best practice column to reflect the differences.

Update 2:  Dr. Gregory Wilson, Adjunct Professor of Computer Science at the University of Toronto recently contacted me to point out that they have a specific course offering in agile best practices (CSC301).  While I do observe this in my table of results and raw research notes, I didn't make it clear in the bulleted highlights.  CSC301 is exemplary in that it not only instructs on agile, but also design patterns AND refactoring in addition to other topics.

Update 3:  I've released my findings for CS schools across Canada here.

A sad fact of the software industry today is that almost every IT project initiated will fail in one way or another.  Delivery schedules will be blown, budgets exceeded, customers frustrated and developers burned out.  The combined costs of these failures are estimated in the billions of dollars, and in some cases lives risked and lost.
 
Indeed, it's been well-understood for decades what factors contribute to project failure, and many astute minds have made significant advances on the matter from Fred P. Brooks to Martin Fowler, Robert C. Martin, Ron Jeffries, Kent Beck, Ken Schwaber, Jeff Sutherland, Mary Poppendieck and more.  They have all contributed to a body of work that is collectively referred to as "best practices" that help steer projects away from the rocky shoals of failure as best as possible.
 
The obvious question arises:  "Why are failures so high, when there's been so much work done to help avoid them?"  While the answer is definitely a combination of factors, I decided to test a hypothesis that computer science departments are failing to teach "best practices", resulting in legions of graduates who are armed with antiquated or theoretical knowledge that help perpetuate the cycle of project failure.
 
The Methodology:
 
In order to test my hypothesis, I decided to do a comparative analysis of the computer science programs offered by the sixteen major universities in Ontario.  Specifically, I wanted to look at their course calendars to see how many offered instruction in best practices and if it was possible to earn a degree without exposure to any best practices.
 
In the interests of transparency, I compiled my raw research notes into a publicly-shared Google Notebook.
 
Best Practices Defined:
 
For the purposes of my investigation, I focused on six areas of discipline for best practices based on my own experience and generally agreed upon in the industry:
  1. Agile / Lean / Iterative software development - any form of incremental process that emphasizes repeated cycles of development and feedback loops;
  2. Refactoring of code to improve design (per Martin Fowler);
  3. Design Patterns as popularized by the Gang of Four (Gamma, Helm, Johnson, Vlissides) or others;
  4. Test Driven Development  (unit testing), Continuous Integration, Acceptance Testing;
  5. Performance testing through code profiling, metrics and load tests;
  6. Agile requirements specifications - ie. writing user stories, relative weight estimation, task breakdowns, etc.

In addition, I wanted to know about courses offered that did not fit the above criteria, which I defined as Big Design Up Front / Waterfall "bad practices".  Often these fall under the rubric of "software engineering".

The Results:

Below is a table that I constructed from the raw data I was able to glean from each university's online course calendar for the current 2007-08 academic year.  At a very high level, I wanted to answer the question of whether the topics were covered, and have indicated with "Y" and "N" if the outline specifically mentioned the best practice in question.  Those departments that offered instruction exclusively on a given practice (as opposed to a constituent unit) are highlighted in orange.

The last two columns in the table indicate how many "software engineering" vs. best practices courses are required to obtain a computer science degree.

Highlights:

  • Of the sixteen schools, less than one third offer any instruction in best practices with McMaster, Ryerson, University of Toronto and York alone offering exclusive instruction in agile software development practices;
  • While it is possible to earn a computer science degree at three institutions without exposure to any "software engineering" instruction (Laurentian, Ottawa and Western), less than one third require best practices instruction for their degree programs (McMaster, Queen's, Ryerson, Toronto and York)
  • Courses in "software engineering" at all schools overwhelmingly emphasize BDUF/waterfall/phased "worst practices";
  • No school offers a full compliment of best practices courses as either electives or degree requirements.

Perhaps most surprising in the findings was that the University of Waterloo offered no best practices courses.  This is surprising given Waterloo's vaunted status as the go-to school for IT/software and happy hunting ground for Microsoft.

Conclusions:

Based on this very rough assessment, it seems that post secondary schools in Ontario are failing to impart recognized industry best practices to their students.  I imagine that similar findings can be gleaned from other provinces and perhaps most U.S. schools - I hope to expand this research in the days ahead.

The net effect is that students are paying for knowledge that is a serious detriment to their profession and industry, and that a lot of post-graduate effort needs to be expended by employers (unlikely) and the students themselves (more likely) to become aware of and proficient with industry best practices - to go, as Andrew Hunt and David Thomas observe, from journeyman to master.

Unfortunately, as long as there is no demand from business to have better, more professional graduates who are skilled in these recognized best practices, software failures will continue to pile up, while those of us who are still in the game become increasingly cynical about an industry that seems indifferent to success.

It's time for a change, n'est-ce pas?

Monday, September 17, 2007 2:03:10 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] -
better practices | computer science | software development | university programs

Comments are closed.
About Me
I am a Toronto-based software consultant specializing in SharePoint, .NET technologies and agile/iterative/lean software project management practices. Currently, I am employed by Microsoft Consulting Services (MCS) Canada as an Application Development and Information Worker Consultant, focusing on delivering guidance and subject matter expertise to enterprise customers who have or are in the process of deploying Microsoft technologies.

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

© Copyright 2010
Chris R. Chapman
Sign In
Archive
<September 2007>
SunMonTueWedThuFriSat
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456
Statistics
Total Posts: 194
This Year: 2
This Month: 0
This Week: 0
Comments: 109
All Content © 2010, Chris R. Chapman
DasBlog theme 'Business' created by Christoph De Baene (delarou)