Monday, January 29, 2007

Dealing With Difficult Customers

I think anyone who’s done any work, regardless of the domain, regardless of the role, has had to deal with difficult customers in one form or another.  I’m in the middle of a months-long such effort which is exhausting me and severely pushing my limits.

I happen to be a person who does not believe that “The Customer is always right.”  I believe that “The Customer is always right unless they’re pushing well beyond the border of what the agreed upon work was, attacking my team, or being duplicitous.” 

Unfortunately, that’s the spot I seem to find myself in right now.  I’ve worked hard to break through some extremely difficult barriers at the start of this particular project, but it seems that those barriers are some form of vampiric hydra.  Put a stake in the heart of one issue and it sprouts another two heads.  (OK, badly mixed metaphor.) 

We started off with basic expecations management and communications issues, such as the customer’s expectations being far out of line with what we’d agreed to for the project, but I thought we’d worked through that.  I thought we worked through the other numerous communications issues because the customer reps I’ve been working with seemed to give me positive feedback when I’ve been face to face with them.  Hand off partially completed code to them and walk them through what’s going on with the design.  Get some head nods as to our approach.  Smiling faces.

Then tonight I get one of those e-mails that instantly turns me into a red-faced, profanity-screaming lunatic.  Management at the client is disappointed with our progress and is saying the customer reps we’ve been working with aren’t satisfied with our progress and that we’ve not delivered anything. 

Ugh.  Get up.  Walk around outside.  Ignore that it’s 16F with the windchill.  Calm down a bit.  Compose a reasoned response to my boss who rightly feels sandbagged.  Explain the numerous steps we’ve taken while on this road.  Agree to meet tomorrow for more explanations.

I may not be the world’s best project manager, but I believe I do customer relations about as well as anyone can.  I’m not sure what lessons I’ll take away from this when we’re through this latest round of customer explosions, but I’m sure I’ll find something useful after my stomach acid level gets back to normal.

Book Review: Agile Project Management With Scrum

Agile Project Management with Scrum

Ken Schwaber (Microsoft Press)

ISBN:  073561993X

I bought this after hearing Scott Hansleman talk about it on his scrum podcast.  I figure Scott seems to have had great success with Scrum at his place, so any book he recommended on the topic ought to be solid.  Indeed it is!

The book’s laid out in a series of stories which illustrate responsibilities and typical problems to overcome for the Scrum roles of Product Owner, ScrumMaster, and Team.  The stories are short, concise, and followed up by Lessons Learned which cover salient highlights for the various points made in the section.  Throughout the book runs Schwaber’s theme of how one can use Scrum to solve any number of problems and increase the productivity of their development work.

What’s really nice about the book is that there are stories of failures as well as successes.  Software development is rarely all roses, so it’s nice to see a couple examples where things didn’t work — and a solid analysis of what went wrong in those cases.

On the flipside, I’d have liked a bit more detail on constructing the sprint and product backlogs.  I realize that traipses somewhat over into the realm of software estimation, but more fleshing out would have been helpful.  However, there’s a great example of scaling Scrum and rolling up numerous product backlogs from lower levels in to a larger backlog for a major system, so that’s quite beneficial.

The book’s terrifically well-written, is an easy read, and is formatted such that you’re able to quickly pick up the important bits of Scrum.  It’s a terrific read for anyone looking to bring some sensible, tailorable processes to their software development efforts.

WinDevPowerTools Rollout

WinDevPowerTools.com, the companion site to our book Windows Developer Power Tools is now up and running with some actual functionality behind it!

James has handled the envisioning and implementation for the site, and he’s done a wonderful job.  The site lists all the tools in the book plus a few we had to drop for various reasons.  We’ll be adding more tools as the site continues to grow.

What’s really cool about the site is that you can create your own “toolbox” listing the tools you currently use.  You can create a blog badge to link back to your toolbox and show off the neat gadgets you’re making use of.  You can also cast votes for tools you love, sort of a “tool love” thing.

James got some great features in this initial release, and we’ll continue to roll out new features over time.

Check out the site and let us know what you think!

(We’re still adding tools from the book to the list.  I just finished up RSS Toolkit, which is tool 25 out of 170… It will take a few more days to get the tool list completely loaded up.)

Sunday, January 28, 2007

Our First Interview!

James and I just finished up an interview with Michael Kimsal, host of the WebDevRadio podcast series.  I met Michael at CodeMash where he was bouncing around various sessions and interviewing folks like Joe Brinkman and other folks way smarter than me.

Michael, James, and I spent 50 minutes or so discussing various aspects of Windows Developer Power Tools and what it was like to write the book.  The podcast was a lot of fun to do, and pretty interesting since it was my first-ever interview like that.  We did the interview via a three-way conference call over Skype — another first for me since I’ve <gasp/> never used Skype before.

Michael says the ‘cast should be up near the end of next week or early the following week.  I’ll be sure to brag^H^H^H^Hpost about it when the ‘cast is live.

Friday, January 26, 2007

Silly Installation Programs

OK, I’m already narked that Microsoft waited several months after SharePoint Server 2007 RTM’d to release updated SDK documentation.  Now I’m really narked that the install program doesn’t ask you where you’d like it installed.  Instead it seems to arbitrarily pick a drive to toss the “Windows SharePoint Services Developer Resources” directory on.  This time it decided to throw it out on the external USB drive I use for backups.

Note that I don’t carry that drive with me, which means I wouldn’t have access to the SDK when I leave home for work.  Which is nearly every day.

Oh, by the way, the folks who built this install package also made another nice choice:  they don’t tell you where their materials landed! 

If you create install packages for software, please take note of a couple things which ought to be common sense, but are far too often not:  1) Most users at least want an option to specify where stuff lands.  2) Even more of those most users would like to know where that stuff lands if you won’t let them decide.

(I later found that the WSS SDK will let you specify a path on the command line.  Ooops.  Still, shouldn’t that be part of the UI to prompt for that?  Yeesh.)

My CodeMash Photos Now on Flickr

I’ve finally gotten my photos uploaded to Flickr.  A bunch of folks have uploaded and tagged with CodeMash, so you can see about ten billion shots of Brian and Josh getting their heads shaved…

Monday, January 22, 2007

Wireshark for Sniffing Traffic

David Douglas was nice enough to participate in Tools Day on Friday with this nice list of his favorite tools.  One of the gems on his list was Wireshark, the evolution of what was formerly known as Ethereal.  I used to make use of Ethereal some time ago, but had lost track of it.

Real geeks can’t get enough of packet sniffers, so I’m off to see how Wireshark looks.  Wooo!

Sunday, January 21, 2007

More CodeMash Success!

How successful was CodeMash? Check out the #1 search on Technorati this weekend.

CodeMash Wrapup

I’m home, I’m winding down, I’m exhausted.  CodeMash 2007 seems to have been a resounding success, at least if initial blog scans are any indication. 

(At least aside from one post by a guy who complained about not having hot food.  Guess he must have missed the dinner buffet…  Another guy complained about the event having a “very strong pro-Microsoft slant” although only nine of the 40 sessions were on MS technologies and two of those were on Open Source tools in the MS environment!  I realize we can’t make everyone happy, but yeesh!)

It took months of hard work to get CodeMash fired off, and I was very happy to see that we got through it without any major potholes.  Brian and his crew from Quick Solutions did an amazing amount of work getting the registration system in place and getting somewhere around 260 attendees, staff, and sponsors checked in and handled.  Darrell took the huge job of handling all attendee coordination with the Kalahari Lodge and did an outstanding job.  JasonG got all our speakers nailed down and shepherded during the event, plus handled rounding up room proctors at the last minute due to us having completely missed the boat on that during planning.  Oops.  Dianne bounced all over the place, helping out JasonG with speakers, helping Darrell with hotel issues, helping me with venue issues, and provided a much needed bit of common sense in many areas.  JasonF herded all the sponsors around in good order and kept them happy — and hopefully interested in coming back next year!  Drew and Josh got us great support from Microsoft and knocked many things off the task list as well.  All y’all folks are awesome to work with!  You folks made this event a terrific one.

Things are still a blur, but a few of my highlights would include:

  • Sitting at the dinner table with Tom and Mary Poppendieck and hearing their stories about their bike travels.  (Their insight and excitement on the right way to do good software is pretty good too, by the way…)
  • Getting Bill Wagner’s thoughts on how to try and develop a company culture that intensely values professional development.  (SRT Solutions sent something like five of their small crew to CodeMash — and told them to go sit in on sessions that were completely outside their normal domains.)
  • Sitting in on a small-group lunch with Scott Guthrie and hearing his passion and enthusiasm on a wide range of topics.  (Plus I also got an opportunity to thank him for the number of folks from his group who contributed to my book — plus he accepted a copy of the book and even mentioned it during one of his sessions!)
  • Watching all the Open Spaces sessions take off.  We didn’t push this aspect of CodeMash much this year simply because it was the event’s first year.  We’ll pimp these a heck of a lot harder next year!
  • Hearing all the buzz and excitement from attendees in general.
  • Not barfing, drooling, or otherwise stumbling too badly during my presentation on Open Source Test Tools.  (Of course, I haven’t seen the evals yet…)
  • Having a long conversation with Brian about what it takes to get a great development team formed.  Brian’s an amazing guy who is extrordinarily passionate and open about helping folks push off in the right direction.
  • Meeting a lot of great folks like Keith Elder, Michael Letterle, Michael Kimsal, Joe Brinkman, and a bunch of other great folks who I’m forgetting to mention here.

The organizers are already talking about putting together another CodeMash, but we’re not sure when that will happen.  We’re thinking of moving the event to November instead of January, but frankly we’re not going to figure that out until after we recover from this one!

Many, many thanks to the sponsors who made the event possible, and many, MANY thanks to all the great folks who showed up and made this an amazing event!

Thursday, January 18, 2007

CodeMash: The First Day

CodeMash has been great so far, at least from the perspective of we folks on the organizing committee.  Very few hiccups, all easily handled.

Last night started out with a panel discussion moderated by Bruce Eckel with luminaries like Neal Ford, Bill Wagner, Jay Pipes, James Wolf, and somebody else who I’ve forgotten (sorry!).  It was a pretty amazing bit of great mindmeld info getting tossed about — and some very good insights on a whole lot of topics.

Today I sat in on a bit of Neal Ford’s keynote on domain specific languages.  Neal’s a great speaker with a lot of great content.  (He also mixed examples of classic Greek art in among his technical discussion — and actually tied it in!)

I also sat in on Scott Ambler’s killer presentation on OpenUP, a great process framework which has a lot of Rational’s RUP, but is much lighter and more Agile-y.  Highly useful, and something I’m going to look at more closely.

(And on an interesting note, Josh Holmes said he’d shave his head if Technorati shows 500 posts about CodeMash by tomorrow evening — and Brian Prince said he’d do his if we hit 600.  It will be interesting to see if they’re still hirsute come Saturday morning…)

Monday, January 15, 2007

MbUnit Support for ReSharper's Test Runner!

Wooo!  Albert Weinert has written a plugin for ReSharper that will drive MbUnit tests.  Man, am I happy happy happy!

(Via the JetBrains blog)

Fixing Fitnesse FileNotFoundException for NAnt.Core

So I’m working on my Open Source Test Tools presentation for CodeMash and I’m just getting my Fitnesse bits up and running on my work laptop.  The same set of test pages which worked great on my other box are all of a sudden barfing all over the place and giving me “System.IO.FileNotFoundException: Could not load file or assembly 'NAnt.Core, Version=0.85.1932.0” with some other garbage.

Huh?  What’s up with that?

A bit of beating my head on the table and I realize that I’d munged up a table in the source.  I had this for a table:

|'''Only Edit Below This Line'''|JHSCR.FitFixtures.HourlyWagesFixture||rate|hours|wages?||33.22|80|3322|

instead of this:

'''Only Edit Below This Line'''!|JHSCR.FitFixtures.HourlyWagesFixture||rate|hours|wages?||33.22|80|3322|

Note the “|” character mistakenly added on the first line, and the missing “!” on the second.  Duh.  Thankfully I figured this out after only 20 minutes of lost time.  Bah!

I make these mistakes so you don’t have to!

Sunday, January 14, 2007

Book Review: Code Craft

Code Craft: The Practice of Writing Excellent Code, by Pete Goodliffe.

No Starch Press,  ISBN 978-1593271190

This book’s a terrific resource for developers wanting to learn or teach good coding practices.  This book is all about how to do software construction the right way.  The book will inevitibly suffer from comparisons to McConnell’s Code Complete, Second Edition — that’s a very, very tough shadow to try and get out from.

Code Craft seems to me to stand up to that tough comparison.  Goodliffe’s writing style is easy to read, and the points he makes are critical to folks who give a hoot about writing good software.  The book’s topics are well thought out, running from defensive coding practices, through the importance of coding standards, solid design, good processes, and a high-level view of methodologies and practices.

The level of detail is generally right on, although on occasion a passing reference is tossed out in a critical context without additional examples.  One of these cases would be his blurb to “consider the Cheshire cat/pimpl idiom” without the least discussion of exactly what the heck that is.  However, and this is important, in many such cases Goodliffe provides a bibliography citation on such topics, which means you can chase down that reference in some other work.  While sometimes annoying, such an approach helps keep the book from being a complete monster — it weighs in at around 580 pages.

I very much liked the on-topic sidebars scattered throughout the book.  They show great examples which tie in with the current topic, such as showing when the right time to use defensive programming is (all the time!), or some quick discussion on how to approach licensing your software.  I also like the 10,000 Monkeys comics dotting the work.  They’re amusing and keep the tone of the book light but still focused.

Code Complete is such a seminal work that Goodliffe’s book will probably have a bit of a tough time making the inroads it deserves simply because McConnell’s work has such a head start.  Still, Code Craft is a solid book and highly useful to all developers, and it deserves a place on the bookshelf.  (And you should read it, not just have it on your shelf.)

Windows Developer Power Tools: Tools Day

James and I are having an official launch day for Windows Developer Power Tools: Friday, 19 January.  I’ll be at CodeMash and will be carrying along a number of books to give away at the launch.  I’ll be running around the halls helping put the conference on, but will also be spending time at the NuSoft Solutions booth where I’ll be putting on a few Grok talks and otherwise hanging out.

To help promote the book the very smart folks at O’Reilly came up with a terrific idea: Windows Developer Tools Day.  The idea is to ask bloggers post about their favorite tools on Friday, 19 January.  The tools don’t have to be ones in the book, just tools that help you get things done during your development work.  It would be nice if folks mentioned the book as they’re writing their post, but they certainly don’t have to — but you should mention that the post is part of Windows Developer Tools Day.

Write your post and then send off an e-mail with your post’s URL to Kathryn Barrett at O’Reilly (kathrynb AT oreilly PERIOD com).  She’ll post your URL and a short blurb from your post at the O’Reilly Windows Developer Center.

The folks at O’Reilly may even be able to work out some sort of contest for bloggers who contribute to Tools Day, but that’s still unclear at this point.

Got a favorite tool you love?  Write about it on Tools Day (next Friday)!

Thursday, January 11, 2007

WinDev Power Tools: I Goofed!

I made a bad mistake in Windows Developer Power Tools: I missed getting Eric Lawrence’s bio in the Contributors section.  Eric makes a number of great tools and he wrote a nice article for us on perhaps my most-ever favorite tool: SlickRun.

I’m very sorry I missed getting him listed in the Contributor.  In the lines of “Better late then never” I offer up Eric’s nice bio here:

Eric lives and works in Redmond, Washington and is the author of a number of freeware tools available from http://www.bayden.com/other/.  He currently writes most of his code in C# and C++, but after 10 years of working on SlickRun, he maintains a certain fondness for Borland Delphi.

My most embarassed apologies to Eric!

Tuesday, January 09, 2007

Windows Developer Power Tools Book Launch!

Windows Developer Power Tools has shipped, in case you missed my other post.  You may also have read a post or two about CodeMash on this blog of late.

How about combining the two?  Go register for CodeMash, then stop by and see me at the booth my company NuSoft Solutions is sponsoring at CodeMash.  I’ll have a couple boxes of the book to give away as part of O’Reilly’s launch of the book — but frankly I’d just be tickled to gab with anyone who actually reads my blog!

On a related note, I got a copy of the book’s press release today, and I got a terrific hat with the logo “O’Reilly Author” on it yesterday.  For whatever reason, those two things made this whole book thing seem much more real than getting the actual books delivered on the doorstep.

Monday, January 08, 2007

SharePoint 2007 RTM Documentation & Examples

So Microsoft Office SharePoint Server (MOSS) has been out in RTM for a month or so.  It’s a sweet product and gives companies a helluva lot of value out of the box — and scads more value as you begin to customize and adapt it for use in a company’s business environment.

Unfortunately, that’s tough to do without documentation that matches the current release.  The SDK dox were just put up on MSDN a couple weeks ago, but they’re not available for download, and none of the various example packs or starter kits have been updated.  That sure makes it tough to try and stay on the bleeding edge of releases, but then I suppose that’s why they call it the “bleeding edge.”

Folks at Microsoft say the next wave of documentation and starter kits will be released at the end of the month — two months after RTM.  That’s frustrating and makes it a heck of a lot harder to get things rolled out in the latest version.  Bah.

Thursday, January 04, 2007

The Infamous Five Things

So I got tagged by Dustin Campbell, Jason Follas, and Dan Hounshell for the “Five Things You Didn’t Know About Me and Likely Didn’t Care About” meme.  Here goes:

  1. I used to have a five hour per day commute when my wife and I lived in Germany years ago. It sucked. I've got two hours on the road now. That still sucks, but much less than five hours.
  2. I used to write an online column about wine and food called “Jim’s Kitchen” when I was a member of CompuServe’s Wine Forum.  It’s not this Jim’s Kitchen, nor was it in this usurper of the true, old Wine Forum.
  3. My best moment ever, besides getting married or seeing my kids born, was leading a team which won the Elmendorf Air Force Base volleyball championship in 1991.  I was a player/coach with a great group of guys who weren’t the best athletes, but gelled as a team and worked their butts off.  We beat a group of great athletes who were a bunch of cocky, undisciplined, and completely ego-centric assholes.  Critical Lesson Learned: Hard work, passion, teamwork, and dedication will almost always triumph.  I still count that championship as my top non-family moment ever.  Unfortunately that same group of jerks beat us the next year, but I had a different mix of team members and I didn’t do a good a job of leading them.  Good lesson there, but that’s for another story sometime.
  4. I’m a fan of The Greatest Secret Agent in the World.
  5. I once was a part of the greatest drum and bugle corps around: The Keesler Blue Knights.  Don’t even think about asking me to pick up a horn these days — I wasn’t that good then, and it’s been, uh, a lot of years since then.

Folks to tag: Josh Holmes, James Avery, Dave Donaldson, Brian Prince, and John Hopkins.

Wednesday, January 03, 2007

We've Been Hanselized

Scott Hanselman is one very busy guy who is a serious geek in all things techogadgetry.  He was kind enough to put in some serious technical reviewing on Windows Developer Power Tools for us and work was some serious tough love but needed in order to help mould the book into the great shape it’s in.  He also wrote a nice foreword to the book where he reminisces about many of the same tools I used long ago: QEMM, Stacker, Norton Desktop, and a passle of those widgets that were so helpful and are now relegated to dusty corners of a 5” floppy disk cabinet.

Scott talks a bit about the exchanges we had during the review process, but seems to have taken my comments on his comments in good stride.

James and I got incredibly lucky with having great folks like Scott, Bill Wagner, Sam Gentile, Marc Holmes, and a number of other great folks on board as technical reviewers.  The book’s high quality is directly due to feedback from them and others!

Many thanks to the reviewers and of course the contributing authors who helped shape this book.

Tuesday, January 02, 2007

CodeMash: Room Rates Extended Further!

The folks at the Kalahari Lodge have extended their killer $88 room rate for the CodeMash conference again!

You just can’t miss out on this great opportunity!

Go register now!

Monday, January 01, 2007

Book Review: Interface-Oriented Design

Interface-Oriented Design, Ken Pugh, The Pragmatic Programmers.  208 pages.

This is a nice, concise work on approaching system design from the interface-based viewpoint.  It’s nice because it’s language-independent and deals with most of the concepts from a psuedo-code viewpoint.  Most, but not all, of the actual implementation is in Java, but .NET folks ought not have any trouble making the leap to their platform.

This book didn’t quite grab me the way the interface-specific bits of Löwy’s .NET Components, 2nd ed.or similar parts of Robert and Micah Martin’s Agile Patterns and Practices in C# did, but it’s still a great book on its own.  There are a number of very valuable sections in Pugh’s work that don’t get covered in the Löwy’s or the Martins’ books.

Examples of very useful topics include good discussion on stateless versus stateful interfaces or why and how one might go about transforming interfaces from one shape to another.  (Adapter and Facade patterns are covered later in the book.)  There’s also an entire chapter to help you decide on what sorts of things should go in interfaces — and the printer examples in that chapter are particularly clear and useful.

I also liked Pugh’s use of his own Interface Responsibility Interaction cards, Pugh’s take on the extremely useful Class Responsibility Collaboration cards covered in various works by Ward Cunningham, Kent Beck, and Rebecca Wirfs-Brock.  IRI cards are a great way to help you create clear contracts for your designs.

Pugh’s coverage of  a URL link checker and Web conglomerator are practical examples showing how interfaces help in real world applications, not just some contrived, overly simplified bits.  Additionally, his closing chapter on patterns is extremely useful and hits several vital patterns: Factory, Adapter, Facade, and Composite.  His discussion of each includes, gasp!, pros and cons of each pattern — something we all ought to understand since blithe use of patterns can cause more problems then they solve.

Overall it’s a very solid book and a good addition to a programmer’s bookshelf.

(Plus he dedicated the book to “Nameless II, the cat who sat on my lap while I typed this book” so that scores bonus points with me.)

Subscribe (RSS)

The Leadership Journey