By Chris R. Chapman at June 28, 2008 00:40
Filed Under: agile, alt.net, better practices, eXtreme Programming

I’ve been preoccupied with helping my client assess and visualize a SharePoint 2003 to MOSS migration for the past few weeks, and as a result my blogging suffers.  Always something!

Tools_for_agility_wpToday, a couple of agile resources I wanted to post for posterity and share.  First, a white paper by Kent Beck published by Microsoft on the use of tools in agile software development entitled Tools for Agility:

This is an excellent, quick essay by the creator of eXtreme Programming on the value of tooling for enabling agile software development.  A consistent theme for Beck is how the evolution of utilities like continuous integration and xUnit frameworks foster faster transitions between tasks that an agile/iterative/lean team encounters over the lifespan of the project.  Beck also offer his prognostications on future agile tools and practices.

Altnet_podcastNext up, the Alt.NET Podcast.  Yes, I’m a Johnny-come-lately to discovering this feed, but I’m a huge fan of developer podcasts like Hanselminutes and the Agile Toolkit as a means of obtaining insightful information during my down-time driving to the cottage or enduring a ride on the TTC subway (uggh!).

This morning, I listened to the Adopting Agile episode with Owen Rogers – really good stuff that made me think hard about the philosophies and positions I’ve held about non-agile teams and how to persuade them to make the transition gradually with just a single commitment to deliver a working increment of software once a month.  From here, in Rogers’ experience, it’s easier to begin rationlizing the adoption of agile/lean/iterative practices to enable the once-a-month rhythm.  Very much in the “stone soup” tradition.

That’s it for today – I’m off to the cottage this evening for the “holiday long weekend” here in Canada.  Time to catch up on some Inversion of Control podcasts…

By Chris R. Chapman at January 18, 2008 23:58
Filed Under: alt.net, javascript

Just noticed this podcast interview with David Laribee today - it's a concise description from the founder of the ALT.NET on what it's all about and where it's headed.  With the mail list careening this way and that, it's worth going back to first principles with Dave for the the gestalt:

ALT.NET is a community that is forming up from within the developer ranks around .NET technologies, but around more values and principles rather than products...

We are a self-organizing, ad-hoc community of developers bound by a desire to improve ourselves, challenge assumptions, and help each other pursue excellence in the practice of software development.

This message really resonates with me as it identifies the convictions I've always held as a developer - not the other way 'round.

For more info on ALT.NET, check out the AltNetPedia - there's a lot of resources there, even if you're not sure whether you're ALT.NET, a Mort or a 501.

By Chris R. Chapman at December 10, 2007 23:14
Filed Under: alt.net, software development

Yesterday I posted a fun list of possible Latin mottos for the fledgling ALT.NET “movement” over on the Yahoo! group mailing list – one of them, Aut disce aut discede (either learn or leave) was picked up by fellow ALT.NETter Scott Reynolds and served to inspire his post of the same name.  In it, he makes an eloquent if heavy-handed case for either being part of the solution or part of the problem when it comes to improving software development:

This is the most honest statement about software developers (and people in general) that I can make:  If you aren't willing to learn, you are obsolete and utterly useless.

New and unknown things trigger our fight or flight response just the same as if a bear came crashing through the woods at us.  What will differentiate you from the next guy is whether you choose to adapt, improve, and grow with new challenges or put your head in the sand.

I can’t say I really disagree with this – for too long, our industry has been getting by on its good looks, so to speak, and we’re now well-mired in our own technical debt because we’ve become complacent about continually improving our game.  Worse, we’re failing at preparing the next generation of developers for turning this situation around.

However, Scott and I begin to part company when it comes to the motivations for remedying this debt:

A lot of lashback for alt.net right now is coming from a position of fear.  A position of not wishing to come out of one's comfort zone.  This is the antithesis of what we should be about.  We should be out there pushing the envelope and making ourselves, our peers, our companies, our products, and our world better.  Chad touched on this in his post about professional responsibility.  I left a comment that I thought I would share to a greater audience.  It's a quote that Scott Bellware twittered one day a couple of weeks ago:

"Society runs on software.  Programming is a social responsibility".

While I’m in total agreement about pushing the envelope, I disagree entirely that “programming is a social responsibility”.  While a convenient metaphor, society does not run on software – it utilizes software.  Therefore (and with all due respect to Messrs. Bellware & Reynolds), programming carries a professional not social responsibility. 

Despite what Trinity is trying to tell you about following the white rabbit, society isn’t a computer construct or even a remote analog.  It’s about people and their interactions, shared belief systems, goals, aspirations, security, life, liberty, the pursuit of happiness, etc.  While software does play an important role in our daily lives, and can affect such things, it is a tool and not embedded firmware for people.  Modern society’s “software” is far older and has undergone much more rigorous refinement (and is still imperfect):  It encompasses fundamentals such as a constitution, the Rule of Law, right of habeas corpus, systems of governance, democratic elections, and so on.  Add a dash of free will and you have a party.

By way of contrast, software development is a skill and is thus practiced in either a professionally responsible or irresponsible manner.  This isn’t a thinly-veiled argument for small-tent elitism – all it takes to be professional is the desire to continually improve oneself through learning best practices and trying to implement them. 

For over three decades, our industry has practised irresponsible software development because of flawed practices that were co-opted without taking the time to understand their source.  Case in point:  Waterfall/BDUF – the “ground zero” from which all manner of recognized worst practices were spawned (and ironically, all best practices in response).  As a result, we’ve been left with, as Robert N. Charette notes in his 2005 IEEE Spectrum article, Why Software Fails, a legacy of epic, yet preventable software failures estimated in the tens of billions of dollars:

Worldwide, it's hard to say how many software projects fail or how much money is wasted as a result. If you define failure as the total abandonment of a project before or shortly after it is delivered, and if you accept a conservative failure rate of 5 percent, then billions of dollars are wasted each year on bad software.

For example, in 2004, the U.S. government spent $60 billion on software (not counting the embedded software in weapons systems); a 5 percent failure rate means $3 billion was probably wasted. However, after several decades as an IT consultant, I am convinced that the failure rate is 15 to 20 percent for projects that have budgets of $10 million or more. Looking at the total investment in new software projects—both government and corporate—over the last five years, I estimate that project failures have likely cost the U.S. economy at least $25 billion and maybe as much as $75 billion.

Charette attributes the industry’s high failure rate to a dozen key factors:

  1. Unrealistic or unarticulated project goals
  2. Inaccurate estimates of needed resources
  3. Badly defined system requirements
  4. Poor reporting of the project's status
  5. Unmanaged risks
  6. Poor communication among customers, developers, and users
  7. Use of immature technology
  8. Inability to handle the project's complexity
  9. Sloppy development practices
  10. Poor project management
  11. Stakeholder politics
  12. Commercial pressures

All of these should be familiar to anyone who identifies with the core ALT.NET values – they are our raison d’etre.  They are what we continually strive to improve.

So what does this have to do with me, John/Jane Q. Developer?

Everything.  As the saying goes, “the buck stops here”.  You are the “pointy end” of the stick – irrespective of whether you’re coding the control systems for the space shuttle, imaging analysis for medical diagnostic equipment or a simple ASP.NET web app that renders a report – regard your work as mission critical and develop accordingly

As a software developer, your professional responsibility (and thus imperative) is to challenge the conditions of IT project failure such as those that Charette identified by making incremental changes in your development habits and skills, and putting them into practice, and thereby influence change in your colleagues.  In sum, to do as Ken Schwaber suggested when he was speaking in Vienna about what it takes to move toward agile software delivery: "Don't procrastinate; do something - no matter how small."

By Chris R. Chapman at December 06, 2007 02:52
Filed Under: alt.net, amuse, tdd, unit testing

In the thread Breaking Unit Tests:

On Nov 27, 2007 8:02 PM, Scott Bellware <sbellware@...> wrote:

On Nov 27, 2007, at 8:27 PM, Steven Mitcham wrote:

> To me, it would seem that if the tests that are breaking have
> nothing to do with the change, that would be an indication of
> either over specified tests, or badly coupled code.
+1

We're trying to create test harnesses, not test shackles.


This should be the official motto for unit testing...

 

By Chris R. Chapman at November 21, 2007 04:39
Filed Under: agile, alt.net, better practices

Altnetpedia_articlesIf you haven’t checked out AltNETPedia recently, you really should.  This wiki-style collection of resources, links, articles and more has grown by leaps and bounds since it went live a little over a month ago (just after the conclusion of the ALT.NET conference) and is quickly becoming the definitive location for all things agile for the .NET community.

Highlights for me include the Tools of the Trade page with links to over 100+ utilities that your peers are using to deliver solid, tested code all the live long day, and the Articles page with links to some excellent posts that help to get you started with TDD, CI and cracking the “tough nuts” in agile/best practices implementation.

I used to have my browser’s default page point to my del.icio.us home page – I’ve changed it over to altnetpedia.com because I want to keep this stuff top-of-mind!

 

About Me

I am a Toronto-based software consultant specializing in SharePoint, .NET technologies and agile/iterative/lean software project management practices.

I am also a former Microsoft Consulting Services (MCS) Consultant with experience providing enterprise customers with subject matter expertise for planning and deploying SharePoint as well as .NET application development best practices.  I am MCAD certified (2006) and earned my Professional Scrum Master I certification in late September 2010, having previously earned my Certified Scrum Master certification in 2006. (What's the difference?)