As promised, here is part 2 of my CodeMash Recap. (CodeMash 2011 Recap Part 1 is here).

If you haven't seen it already, I'm maintaining a list of links to the CodeMash 2011 slide decks. If you have anything to add, please let me know.

Are You Satisfied With Your Tests?

Jim Weirich presented a really interesting session on unit testing. He's got a solid background of 10+ years doing TDD / BDD and shared his wisdom with us.

Slides are available at: http://bit.ly/codemash-testing/ .

What stuck with me:

  • Don't test private methods (it kill unicorns… see slides for details)
  • Local runs of unit tests should be less than 10 seconds. (Any more, and you won't run them during dev)
  • Check in tests should run in less than 10 minutes. (This is about the amount of time a dev will wait around before leaving at the end of the day)
  • Don't be afraid to refactor unit tests to make them ore accurate and clean.

Write Managed Applications For Android with MonoDroid

Bill Sempf (@sempf) and M Groves (@mgroves) gave a nice session on MonoDroid. After attending the Android pre-compiler, I was really looking forward to this talk on MonoDroid. I wanted to see how it compared to the experience of Eclipse + Droid SDK.

Bill gave a nice intro to the product, with background on its origins. Then Groves did a walkthrough of his Stock Portfolio app that he build with MonoDroid. This app is on GitHub at http://github.com/mgroves/monodroidstockPortfolio/

Both presenters did a nice job. It was helpful to see an app and how it was constructed. I'm looking forward to pulling it locally and looking into it more closely.

Lunch Keynote: Scott Chacon (of GitHub) - "Developer Driven Development"

I really enjoyed this keynote. I'm not a Git user (yet), nor had I heard of Scott. I won't forget though.

Scott shared his "Developer Driven Development" presentation on what the rest of the "Enterprise" or "Corporate" world can learn from the way that open source software gets built. He described the culture at GitHub, their policies (or lack thereof), their priorities, and the mode of operation. The things that stayed with me were:

  • Vacation time not tracked. If you need a day, take it.
  • Devs pick what they want to work on.
  • Every employee has the same salary (removes $ as the motivator).
  • Company takes a longer term perspective on productivity. A bad week or month happens to all of us.
  • Everyone has commit & deploy rights for production. (With power comes responsibility)
  • Teams don't focus on dates and deadlines. Rather, they focus on shipping when it's ready.
  • Free Beer! Seems they've seen what we all know…

Why? The 3 main motivators:

  1. Autonomy
  2. Mastery
  3. Purpose

He also shared some cases of companies who are applying similar principals:

  • Lockheed Martin (Advanced Development Program)
  • Best Buy (ROWE - Results Oriented Work Environment)
  • Atlassian (FedEx Day)
  • Google (20% time)

Resources are available at:

Infinitely Extensible

Alex Papadimoulis (of The Daily WTF) presented a thought provoking session on finding appropriate levels of extensibility in a solution design. Alex shared a couple different types of extensibility, with examples of good cases and bad cases for each.

Types of extensibility include:

  • Architectural - Well designed and factored code, using good design patterns, etc.
  • Pre-Release - Customize codebase prior to each deployment.
  • Data Driven - Pre-defined options that can be toggled via config settings or data in a database.
  • Runtime - Plugins, rules engines, macros, etc.

A couple points that stuck with me:

  • Extensibility is a slippery slope. If you slip down it, you end up with the "Inner Platform Effect", where you replace one platform (C#, VB, Java), with another "internal" one which is basically your own language and interpreter. Personally, I'd rather program in C#, than some silly XML programming language that I hack together.
  • Favor refactoring over pre-mature extensibility optimizations. We all (or most of us) know that "pre-mature code optimization" is unwise, and yet we often fall into this trap. It's also the reason we have the YAGNI acronym (You Ain't Gonna Need It). This applies to the extensibility questions too.
  • Change will happen where you least expect it, and with variations that you hadn't considered. Trying to guess these permutations ahead of time can be very challenging.
  • When you do have to change the system, you'll still have to change the deployed app. It might be config, or it might be code, or it could be introducing a plugin. Each has a cost, and in the end doing a code change might not be all that bad compared to the other options.

In the end, ask yourself "Honestly, am I building this extensibility tool, just so that I can build a tool?" All of us love the interesting challenges. Most of us feel that the plain old "business rule" code is just plain boring. But in the end, we are tasked with building software the works for the customer. Are we building working software, or just appeasing our own desire to feel like we're super smart.

Anatomy of an E-commerce Web Site

Joe Wirtley walked us through his experiences with a real-world e-commerce web site (Chef's Catalog). I picked this talk so that I could get some insight into the various third party products and services that a real world site uses. You don't get that kind of insight from Contoso samples.

Joe walked us through the history of the site and how it progressed over the years. There were quite a few changes over the years, with a number of new tools and services used for search, social, recommendations, ratings, etc. This also uncovered some considerations about on-premise versus hosted offerings and whether to use an API versus a UI / Javascript solution for certain sections of the site.

The other thing I liked about Joe's presentation was his slide deck. He used something that I hadn't seen before. It feels like one big image that spins and rotates around, leaving a portion of the image in view. Each view is a slide. You can see his Anatomy of an E-commerce Web Site Slides on Prezi.com.

That's a Wrap (and no, I didn't win anything)

At the end of the sessions, they wrapped up with a raffle, where they have away some cool stuff. There were some Kinect bundles, Star Wars stuff, GPS systems with Yoda's voice, bacon themed trinkets, a $2k license to Telerik's product suite, and a bunch of books. I was hopeful, but didn't win anything. Oh well. I guess I should have talked to some of the vendors.

That was my CodeMash experience for 2011. I really enjoyed it and hope to go back next year. If things go well this year, maybe I'll consider submitting a talk.

Cheers!