Slides from “An Agile Retrospective” at codepaLOUsa 2013

One of the major take-home stories not me toned in the slides is to not define your identity by your process. Don’t trap yourself in a less than optimal process by proclaiming it’s the right way, or the one true way. From the start, accept the idea (and let others know) that your overall process is a slowly changing dimension in your enterprise. Leave yourself room to adapt and grow as you and your team becomes more practiced and new tools/techniques emerge.

If you attended my talk, I deeply apologize for the technical issues. Karma’s a bitch, for sure. Run-through in my room before the talk went great, with the most up-to-date slides. Being too smart to leave Powerpoint open while I came downstairs, I closed everything down. Joking with Steve from Geeks and Gurus about his projector and my new laptop was all in fun (Steve and I have known each other for several years now, poking fun at one another is nothing new). Perhaps also making sarcastic remarks about demo gremlins, Windows 8 and the conference wifi was tempting fate a little too much. I’m still perplexed as to whether “Your changes cannot be discarded” would have been a good thing or a bad thing. In addition to the out of date slide deck I had to use, this website was down, and my laptop blue screened right as I walked out of the room. So it was exciting. From what I can gather, between the time I logged onto the conference wifi and opening my slides I must have been knocked off the network, so a local cache of an older version was found, and why I could never get the latest slides loaded. My laptop wasn’t displaying that I was disconnected, the cause of which may have been part of the BSOD.

Anyhow, my site seems to be working again, I got the laptop happy and was able to recover the correct slides from SkyDrive. Without further ado, here are the annotated slides for An Agile Retrospective. Note: file is hosted on SkyDrive, but it should be a public link.

Where are all the pretty apps? I think they’re coming.

Mobile has been on my mind a lot lately.  A good friend hooked me up with an HTC 8x recently for some side projects, and recently dangled a Win 8 Pro tablet in front of me.  I use an iPad nearly constantly, and the third birthday of the iPad was just a few days ago.  I just replaced my trusty Droid 4 with an iPhone 5, and I’ve just replaced my 6 year old “built for Windows XP” laptop with a new Windows 8 ultrabook.  I’ve also recently started on Pinterest.  So much change at once!  More on all of these below—there is a point.

I adore my iPad.  No understatement that I would anoint it “greatest invention ever (recently)”.  I am very productive, and I can be entertained in one compact yet powerful device.  The iPad itself is a larger extension of the iPhone, which is about ready to celebrate its sixth birthday.  Apple’s strategy with the first iPad release was great—make sure it can run nearly all iPhone apps, as well as provide great new capabilities for better enjoyment and productivity.  I think the results speak for themselves.  When you look in the App Store, you find so many beautiful applications for both iPhone and iPad you are amazed and thrilled.  It’s exciting.  iPhone and iPad have been so successful that they’re driving sales of Macs at a record pace.  All of this has built a vibrant culture of third party add-ons and apps.  It’s the envy of the industry.

On the other hand, Microsoft and Beauty have never gone hand-in-hand, and Microsoft’s “protect Windows at all costs” culture has led to a high cost of talent shrink an lost opportunities.  My first smartphone was the Palm Treo 700w (at that time, Palm ruled the industry).  Based on Windows CE, it had some nice functionality at the time, but left a lot to be desired (so did the rest of the Palm offerings).  It was cool back then, barely “meh” by today’s standards.  Windows Phone (CE) 6 is barely a footnote, Windows 7 felt rushed and incomplete, while Windows Phone 8 is just great.  Except for one thing—where are the apps?  Don’t get me wrong, the quantity is there, but not necessarily the quality.  Apple’s App Store is filled with thousands and thousands of high quality apps built by people actually making a fine living doing so.  The Windows Phone Store is filled with thousands and thousands of apps built by first-time phone devs mainly to participate in one of the numerous contests or hackathons being held. 

On a supposed-to-be-related-but-aren’t-yet note, Windows 8 shipped last year also, and Microsoft unleashed a strategy only a committee could dream up.  One flavor of Windows 8 runs on traditional PC/laptops and some tablets, and is both backwards-compatible with Windows 7 applications and with the new Windows Store apps.  Another flavor of Windows 8 (RT) looks exactly the same, runs primarily on tablets, but can’t run any legacy applications—just the Windows Store apps.  Neither flavor of Windows 8 will run Windows Phone 8 apps, nor will WP 8 run Windows Store apps.  It’s a very confusing strategy to say the least, and I think in the short term has hurt quick adoption of any of the three platforms.


That’s not so say there aren’t already great apps for WP8 or Win 8.  Some WP 8 apps are quite good—there is no official Pinterest app, but the Pinsation app is actually so much better I wish it were on the iPhone.  But they are rare.  Most apps, while providing some useful functionality, are just unattractive.  Beauty generates excitement, and that’s why Microsoft’s seeming aversion to beauty has failed to build a base as excited as Apple’s.  However, I think this is about to change.  And here’s why: (as found at  This is an artist’s concept of a whit start screen for Windows 8.  Then there’s (found via  Flat UI is a PSD swatch of Metro-inspired icons and colors.  And there are more of the same on the Technology and Design boards.


In just a few short months, Win 8 and WP 8 iconsets (like, found via and conceptual designs have started to show up more and more.  Designers are taking note of the new platforms.  It’s important that talented designers are creating designs, it’s even more important these designs are being noticed and consumed.  I think this bodes well for the “Ocho” ecosystems.  Going into this summer’s Build, I think we’ll begin to see a few of the unexpectedly beautiful, didn’t-know-you-needed-it apps from third party developers.  They’ll be exciting in a way, and I think will be at the leading edge of big change in the Ocho app stores in terms of app design and quality.  And that will be very exciting.


Yahoo’s Opportunities

I’m writing this as both a consumer of online services as well as the hypothetical “what I’d do if I were the CEO” scenario.  It’s nothing more than armchair quarterbacking.  Also, I started this post before news of Yahoo’s acquisition of Summly broke, and rumors of Zynga and DailyMotion began.

There was little doubt in my mind that Marissa Mayer was a great choice to lead Yahoo.  I can only imagine the morale and culture after the least few years.  And, even though I’m a remote worker myself (not for Yahoo), I agree with her decision to pull in all the remotes.  Yahoo needs to come together if it wants to survive.

It’s a sad fall for a site which was the first real start page for the Internet, the first free email on a grand scale, the first real customizable portal.  The gold standard with the six second load time, and the your-site-is-invisible-until-it’s-in-the-Yahoo-directory site.  And YUI and Douglas Crockford and JSON.  Delicious and Flickr made sense, and there is still so much to like.

We’ll know if Yahoo has it’s shit together in the next few months.  Google reader closing is a prime opportunity, even some industry pundits are saying that despite declining usage closing Reader is a bad ideaFeedly picked up 500K new users in 48 hours and Digg is adding its own RSS reader.  No migrant user is truly committed yet—people are shopping around for a replacement they like.  There is plenty of opportunity, but services have only until May 31.  A My Yahoo user could always add RSS to your My Yahoo page, but I stopped using online portals several years ago like everyone else as I began to use a tablet and touch apps more and more.

Yahoo needs a good mobile strategy.  I wouldn’t be looking to build a legion of delusional fanbois, but anyone who isn’t productive on a tablet is on shaky ground these days.  Yahoo has the content and services, it just needs to get them back in people’s hands.  There are a few Yahoo mobile apps, but so much room for more.

Yahoo has done its share of spring cleaning in the past, but there’s one service Yahoo dispensed with which they might regret.  I’m sure Ms. Mayer is just a little sick that Delicious was unloaded.  Delicious is just the kind of analytics-generating service data-centric people love.  Despite its offerings, there is a lot of room for acquisition to expand Yahoo.  Sites like Yelp, TripAdvisor or Kayak could go a long way if integrated well and could be used to enhance Bing’s results, giving users a reason to choose Yahoo over Bing itself.  Remember, while Ms. Mayer was still at Google, Google acquired Zagat, ostensibly for similar reasons.

So, tl;dr version, Yahoo needs a solid mobile strategy.  Not a bunch of apps, one good app with access to everything Yahoo.  Yahoo also needs to give people a reason to go there for search, and adding content from review sites it may acquire is a good way to start.  And take the opportunity to grab some of the users Google has turned into nomads by being a really good site again.

A handy list of online scripting resources

On one of my mailing lists, a tangential discussion began about online scripting resources, where you can live edit HTML, CSS and JavaScript in the browser. Here’s the ones discussed:

Of these, JSFiddle seems to be used the most.

An additional site mentioned is cdnjs (, which hosts many, many more script libraries than Google or Microsoft’s CDN, from which you can reference a library in one of the above tools.

Should you check NuGet packages into source control?

A short time ago I posted a question on Twitter about whether people who use NuGet check the actual packages into source control.  There weren’t many answers one way or the other, but a lot of people were curious about an answer.  After some trial and error and experience, I can say this conclusively:

Do not check your NuGet packages into source control.

There are several reasons for this:

  1. Doing so violates one of the concepts of NuGet, which is to easily manage the latest versions of dependencies.
  2. Checking in packages greatly increases the size of the repository.
  3. By default, TFS ignores DLLs, but will check in manifest files.  This causes problems on build servers, since NuGet looks for the manifest, and if it finds one, won’t try and pull the package.  The dependencies you need don’t get deployed.

Here’s the right way to handle this:

  1. Right-click on your solution and select Enable NuGet Package Restore.
  2. Add your NuGet packages to your solution, if you haven’t done so already.
  3. Make sure packages.config is included in your solution, and is committed to source control.
  4. Make sure your packages folder and repositories.config are included in source control, but ignore the individual package folders.
  5. Re-read Step 4.  The key thing here is you want to ignore the folders for the individual NuGet packages.  This can be tedious with a lot of packages, so sometimes a GUI is nice.image

Now, when you go to build your solution, the packages you reference will be pulled fresh by the build server.

SSL Certificate Error in Hosted TFS with Git

Today we were poking around the new Git offering in Team Foundation Service (hosted TFS), and when I tried to clone our test repo I got the following error:

error: SSL certificate problem, verify that the CA cert is OK.  Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while accessing https://<account><repo>
fatal: HTTP request failed

Since we didn’t get this error at home, suspicion is that our corporate proxy was interfering with the SSL check somehow.  The solution was simple, just open Git bash and issue the following command:

git config –global http.sslVerify false

After doing this, I could interact with the repo normally.

Git in Hosted TFS with Bash

A few months ago, in conjunction with the release of Visual Studio 2012, Microsoft also released a hosted TFS (Note: this hosted service is called Team Foundation Service; Team Foundation Server is the thing you install onsite.  I’m going to call Team Foundation Service “hosted TFS” for brevity and clarity).  This is kind of the third version of hosted TFS, which in Microsoft-land means it’s pretty good.  True to form, VS 2012 is pretty good, and in contrast to previous versions has a good focus on agile teams.  I’ve had the opportunity to use this for well over a year now, and I’ve seen hosted TFS grow into something you need to look at before you deride it.  A wise move on Microsoft’s part is that hosted TFS is free for teams up to five, so you can explore and use at no cost.

Perhaps the greatest downside to TFS is that you were completely locked in to the TFS version control methods.  The displeasures with this were great in number.  Git, especially Github’s implementation, gained popularity in enterprises because of its distributed nature and ease of collaboration.  Microsoft’s first foray to combining the features of Git and TFS was git-tf, which presented a git-like overlay onto TFS repositories.

Just this past week Microsoft dropped the bombshell that Git was a first class choice for version control in hosted TFS (read Team Foundation Service updates – Jan 30 or watch Git Support Added to Visual Studio and TFS).  Woah.  All the planning and tracking features of TFS (including the scrumboards) and the DVCS workflow of Git, in one offering.  Right now, Git is a feature in hosted TFS only; it’s planned for TFS but no timetable has been announced.

Also released was the CTP of Visual Studio 2012 Update 2 (VS2012.2) (see also Git init VS), which adds git support directly into Visual Studio 2012.  Warning—do not install this update if you have existing TFS repos.  There are several reports of it corrupting existing TFS repos.  You might want to sit this one out, and keep your eyes peeled for a future version that won’t kill your existing repos.  Stay tuned for updates and more information.  This will be fixed soon, I’m sure.  In the case of my team at the day job, we are connecting to TFS 2008 with VS 2012, which is not a supported scenario (even though it seems to work fine for us).  This is a known issue, see the compatibility matrix at Compatibility between Team Foundation Clients and Team Foundation Server.  If you’re using TFS 2008 or earlier, skip this update.  Otherwise, you’re apparently fine.

This image was totally stolen from

Using Git in Hosted TFS

For more information on using Git in TFS with VS 2012, see Getting Started with Git in Visual Studio and Team Foundation Service, or the hosted TFS docs at Visual Studio with Git.  I have not installed the update, so I’m going to use Bash for this walkthrough.

Your Windows Live Id can’t be used by VS or any of the other tools, so you have to create an alternate credential first.  Once you’ve logged in, click on your user name in the upper-right corner and choose “My Profile”:


Then select the Credentials tab, and click on “Enable alternate credentials”


Enter a secondary user name and a password—only one is allowed per account.


You’ll enter these credentials a little later when you clone the repo.

Next, create a new Team Project with Git:


Give a name, a description, a Process template (project tracking style), and choose Git as your version control.  (Note: As I later found out, don’t put spaces in repo names. Not only is %20 a pain to remember and type, but VS appears to get confused with where it put the Nuget packages. I kept getting all kinds of errors when trying to build the project. Fortunately, it was a demo only.)


TFS will then create your project (they are certainly optimistic!):


If this is a new project, create a folder where you want the project files to be.  If you have an existing project, you can work with that, no problem.  Either way, open Git bash and navigate to your working folder.  To clone a new project, issue the following command:

git clone https://<accountname><repo>

A couple things to note—since this is a URL, remember to HTML encode the repo name if you have spaces (e.g., repo%20name).  Also, TFS projects are arranged into collections.  If you haven’t created a collection, use defaultcollection in the path.  If you’ve created a collection, use that.  If you have an existing repo, use git init rather than git clone.  You’ll be prompted for a username and password, and this is where you enter the secondary credentials you created earlier.


Now let’s see how this all works.  Open up Visual Studio and create a new project in the folder you cloned into.  Once the project is created, switch back to Bash and list the files.  You can see you’re working in the master branch.  A status check shows your new files.


If you try to add your files, and get an error like below, there is a simple fix:


You probably need to change the handling of LF and CRLF; check this with git config core.autocrlf.  True means that line endings will be changed on commit/checkout.  What you do depends on the systems your team members are using; there is a good discussion at  If everyone is using Windows, you can set this to false and line endings will remain unchanged.


Add your new files and commit them.  If you’re new to Git, this commit will save the new files in the local copy of the repository.  Now, you can push the files to your repo:


Looking back in TFS, this is how we see the repo:


Let’s take a look at something basic—branching.  Create a branch (I called mine sprint1), then make a small change to a file.  Commit the changes, and push to TFS (remember to use git push origin sprint1).

Looking back in TFS, we switch branches with a dropdown list on the far right:


After switching branches, you can select the history tab and see the history of the branch.


Clicking on the message for one of the commits brings up the commit changes:


Drilling down in the Source Explorer to the file where you made the change, you can choose the compare tab and see the diff between commits.


This view can also be changed into an inline view:


Conflicts are resolved locally, before pushing to the repo.  You do this in whatever client or tool you’re using.

TFS vs. Github – a comparison

In the table below, I’ve attempted to compare the major features between Github and Git in TFS.  It’s far from complete, and I’ll happily make corrections or add more comparisons if you leave a comment.  I’m a light user of Github, I actually use Bitbucket for my side projects.

Feature Github Hosted TFS w/ Git
Forking Yes No
Pull requests Yes No, changes are published directly to the repo
Communication SSH, HTTPS HTTPS only
Gists Yes No, nothing similar
Agile planning No Yes
Work item/bug tracking Basic Advanced
Planning tools None Advanced
Wiki Yes No
Clients Git Bash (and clients based on CLI, such as TortoiseGit), github:windows, Eclipse plugin, VS 2012 (with Git updates) VS 2012 (with Git updates),  Team Explorer Everywhere (Eclipse plugin and cross-platform CLI), Git Bash (and clients based on the CLI, such as TortoiseGit)
Private Repos Pay only Unlimited, free for teams up to 5
Public Repos Unlimited None, not meant for public repos
Permissions Repo Granular

If you’d like more information about Git, check out Syncfusion’s free Git Succinctly, or O’Reilly’s Version Control with Git.


The addition of Git to TFS as a source control option is very exciting.  If you’re used to the way Github or Bitbucket implements Git, you might find this implementation lacking a couple of your favorite features, even though the TFS implementation has all of Git’s features.  This may or may not be a deal breaker for you.  That you can use either VS or Eclipse or Bash or other Git tools is great, and that users on any OS can use TFS.

Creating a simple dynamic menu in ASP.NET MVC

Menus are one of the most basic elements on any website, but there’s not a simple dynamic menu out of the box in ASP.NET MVC.  There are several third party solutions you can add as an HTML helper or in a controller, but in several projects I’ve needed a simple and quick way to generate a menu.  Here’s an updated version of something I wrote a while ago in just such an occasion.

We’ll use VS 2010 and the new jQuery Menu widget for the UI (the standard menu CSS won’t work).  You can use any CSS or JavaScript menu UI you want to–I’m using jQuery because it’s free and easy.  You can find the Git repo for this project at

1. Start by creating a new ASP.NET MVC 4 Internet Application.

2. The default template installs jQuery 1.7.1 and jQuery 1.8.2, but the menu widget was released in jQuery 1.9 and jQuery UI 1.10.  The easiest way to update jQuery and jQuery UI is via NuGet.  Install both the latest jQuery and jQuery UI.

One glitch in this sample is the jQuery menu widget–this is a vertical menu.  A horizontal menu will be in the menubar widget, which has not yet been released.  It was supposed to be in 1.9 but didn’t make the cut.  Not a big deal, since this isn’t a post about the UI, but fair warning.

3. Let’s make the jQuery menu work first.  Open Content/Site.css, and find around line 180 where the menu styles are.  Comment out all of the menu styles, it should be about 25 lines of code total.  These styles will conflict with the jQuery menu.

4. To help prevent page flash oafter loading and to make sure all CSS elements are in place before a script is executed, we load CSS files at the top of the page.  Just below the Styles.Render directive, add links for jquery.ui.core.css, then  The code should look like this:

<link href="../../Content/themes/base/jquery.ui.core.css" rel="stylesheet" type="text/css" />
<link href="../../Content/themes/base/" rel="stylesheet" type="text/css" />

5. Next, open up layout.cshtml and scroll down to the bottom of the file. Add a Scripts.Render directive for jQuery UI underneath the one for jQuery, then a small script block to call the jQuery menu function.  The code should look like this:


$(document).ready(function () {

@RenderSection("scripts", required: false)


(If you want to see how these bundles are defined, open up App_Start/BundleConfig.cs.  Later on you may want to configure all of these scripts and CSS into a bundle)

6.  If we load and run the page now, we should now have a fully functional vertical menu.  Good enough for this demo.

7. We need a model for a MenuItem, so create MenuItem.cs with the following code:

using System;
using System.Collections.Generic;

namespace SimpleMenuSample.Models
public class MenuItem
public MenuItem()
this.ChildMenuItems = new List<MenuItem>();

public int MenuItemId { get; set; }
public string MenuItemName { get; set; }
public string MenuItemPath { get; set; }
public Nullable<int> ParentItemId { get; set; }
public virtual ICollection<MenuItem> ChildMenuItems { get; set; }




8. Now we need a model for the Menu, so create menu.cs with the following code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace SimpleMenuSample.Models
public class Menu
public Menu()
Items = new List<MenuItem>();

public List<MenuItem> Items;



9. Now that we have our models defined, it’s time to add a controller method to generate the menu.  Normally you’d do some data access, but we’re going to hard code the menu items here for the sake of simplicity.  Open HomeController.cs and add the following code:

public ActionResult Menu()
var _menu = new Menu();

// Normally you'd do some data or cache access to build/retrieve the user's menu
// then you're loop through the results and build the menu object
// we're hard coding for the sake of simplicity

var _google = new MenuItem()
MenuItemName = "Google",
MenuItemPath = "",

_google.ChildMenuItems.Add(new MenuItem()
MenuItemName = "Google Images",
MenuItemPath = ""

var _bing = new MenuItem()
MenuItemName = "Bing",
MenuItemPath = ""

_bing.ChildMenuItems.Add(new MenuItem()
MenuItemName = "Bing Images",
MenuItemPath = ""


return PartialView("_Menu", _menu);



10. Now that we have a model and a controller, we need a view to display our menu.  Create a shared view named _Menu.cs with the following code:

@model SimpleMenuSample.Models.Menu
<ul id="menu">
@foreach (var item in Model.Items)
<li><a href="@item.MenuItemPath">@item.MenuItemName</a>
@if (item.ChildMenuItems.Any())
@foreach (var subitem in item.ChildMenuItems)
<li><a href="@subitem.MenuItemPath">@subitem.MenuItemName</a></li>


11. One final change is to call the menu from _Layout.cshtml.  Change the nav element to look like the code below:



And that should be a bingo!  When you run the project, you should see a (rather ugly) vertical menu (seen below).  Hovering over one of the options should cause the child entry to appear.


Hope this helps!

An Unofficial Guide to CodeMash

Preface: Be excellent to each other.  Please, just be excellent to each other, and have a good time.

In the last few years, I’ve been a sponsor/exhibitor/speaker/attendee at CodeMash, and it truly lives up to the hype of being one of the greatest conferences you can attend. The organizers do an incredible job running the event and choosing the speakers, ad the Kalahari provides a great atmosphere. It’s a large conference, with around 1300 attendees, plus speakers, volunteers and exhibitors. I’m always trying to recall all the good information I mean to tell people when I try to explain CodeMash to first time attendees, so I’m putting it here for future reference.

There are changes from year to year, and I’ll try to keep this post updated from year to year as I attend. Please leave comments if I miss something.

CodeMash is special because it’s unique. They don’t franchise or have regional events (and the organizers request you please stop asking). Enjoy the uniqueness of CodeMash, it’s not your usual conference.

Join the Google Group!

If you’re interested in CodeMash but haven’t joined the CodeMash Google Group, you need to do so. There is a little activity through the year, but starting a couple weeks before speaker submissions, traffic picks up.

In addition to all the information around the conference, this is also the best place to find rides to share, tickets for sale and so on. Activity is high in the two weeks prior to CodeMash with offers to tranfser tickets and rooms.

If you got a ticket/room, but can’t go

First of all, bummer. You can cancel your ticket via EventBrite for a refund, or you can post a ticket in the Google group for someone to buy your ticket (how they pay you is up to you). You can directly transfer your ticket to someone else via EventBrite.

If you had a room at the Kalahari, don’t cancel it. Instead post it in the Google group. The Kalahari will transfer rooms between attendees. There may be a $25 charge for this, I’m not sure, I’ve never done this. If there is, you’ll have to work out how the person pays you. Usually, PayPal is used.

If you don’t get a ticket

CodeMash sells out fast–within minutes of tickets going on sale. Lots of people don’t get tickets. It’s OK, your life isn’t over. Don’t panic, put yourself on the waiting list and monitor the Google group. Tickets are handled via EventBrite, and there is easy functionality to transfer a ticket from one person to another.

If you can’t get a room

Not only does the conference sell out quickly, so does the Kalahari. The organizers have additional arrangements with nearby hotels for pricing and shuttle service (by now you can guess where the details will be posted). Parking is free and plentiful at the Kalahari, so if you’re driving in and staying offsite, consider driving over and offering a ride to others.

There is a cheerleading competition the weekend following CodeMash. When you make your reservation, if you want your family to come that weekend, factor that in. It might be easier to have the family come before the conference, rather than stay after.

The Kalahari provides regular shuttle service to some of the other nearby hotels for CodeMash, information is posted in the Google group ahead of time and is available at registration once you’re there.

Getting there

The Kalahari is in Sandusky, OH, near Cedar Point. It’s not in Cleveland. In fact, it’s a nearly 45 minute trip from the Cleveland airport to the Kalahari. No better from Akron/Canton or Toledo. I live about 2.5 hours from Sandusky, so I just drive over, and I’m not familiar with the transportation from the airport. You’re looking at a pricey cab ride though (roughly $130, plus tip). The Kalahari has shuttle service to/from the airport for about $85 (and $25/person after the first), or you can arrange with one of the local airport shuttles or town car services. Many attendees have used Toms Cruz. Not to sound like a broken record, but the Google group is a good place to find people arriving about the same time and wanting to share a ride.

Weather/News Alerts

CodeMash wouldn’t be CodeMash without some sort of blizzard.  Depending on when and how you’re arriving, you may be significantly affected.  CodeMash saw a Level 3 snow emergency on Monday prior, which means you could be arrested if you’re on the roads.  Here are some resources to watch for local travel conditions (remember the Kalahari is actually in Erie County, OH): the Sheriff’s office page)

While you’re there

The Kalahari in January is basically a bio-dome (if you like stupid movies, that’s a great one). The place is massive and self-contained. If you’re staying there, expect to walk a lot and get lost frequently. Elevators are usually jammed, so knowing where the stairs are is helpful. People with Fitbits or pedometers report walking a couple miles each day! The last couple years have featured a blizzard, which adds to the excitement of being self contained.

The conference supplies WiFi, which can get crushed. Don’t be a hog, only connect the devices you need connected. Once the conference starts, most of the chatter happens on Twitter. It’s where you’ll find rides, dinner offers, parties and so on. Make a column for a search on #codemash. If you’re not on Twitter, you will miss out on the unofficial side activities.

CodeMash has started to use EventBrite as its app.  Additionally, session data are provided via an API and attendees can go to town.  There are apps for iOS, Android, WP8 and Win 8, plus the dead tree version at registration.  There are multiple simultaneous events, so the schedule is something to keep an eye on. Last minute changes are communicated on signs near the registration desk.

Bring business cards or personal cards. Take Moo or VistaPrint up on an offer of free or cheap cards. Few people care about your physical address anymore, but be sure to put all your social contact on there (LinkedIn, Twitter, Facebook if you’re so inclined). You’ll use these to enter sponsor raffles as well as an easy way to exchange contact information with new friends. These are especially nice if you have a name or social ID which is difficult to spell or remember. If you can, put a vcard as a QR code or Microsoft tag on there.

Your cell phone will die during the day, so pack and plan to carry your charger with you.

What to wear

It’s January on the shores of Lake Erie. Although you’re basically having a grown-up lock-in, a warm jacket and clothes are necessary. There will be probably be times where you’re heading to a nearby restaurant or something, and you’ll get to experience Lake Erie weather (think Edmund Fitzgerald). Otherwise, during sessions, flip flops, shorts and a Hawaiian shirt are perfectly acceptable (not kidding). If you get cold easily, you may want to wear jeans and keep a sweater handy–the air conditioning in the rooms is either too cold or too hot, and everyone’s opinion differs.

According to Keith Elder (2013’s emcee):

Wear whatever is comfortable or that is *you*. If you dress up too much you’ll probably feel over dressed and out of place.

You’ve heard the saying “He/She was dressed to the 9’s” ?

For Codemash you want to dress to the 4’s – 6’s. Hit that sweet spot of comfort-ability, individuality, and geekiness.

Jason Follas (one of the organizers) recommends:

You would be in good company wearing jeans and a t-shirt… Though, it sometimes gets chilly, so having a sweatshirt/sweater can be useful.

You’ll see some people in shorts and Hawaiian shirts. Others will be business casual. I’m betting there will be one guy wearing a bow tie (seriously).

The most important thing is to be respectful of others (i.e., no profane slogans on T-Shirts, or swimwear in the conference area, etc.) and to be comfortable with whatever you wear.

In addition to the bow tie, you’re also likely to see a kilt or two.

Remember those two miles or more of walking each day? Wear good walking shoes, too.

T-shirts from sponsors will be plentiful on the first day. Of course, you’ll want a bathing suit, too, for the party in the waterpark. And, obviously, always pack your towel.


CodeMash provides breakfast and lunch on Tuesday, Wednesday and Friday, and breakfast, lunch and dinner on Thursday only. Highlights of the food include the bacon bar and bring-your-own-hot-sauce table. If you have a favorite hot sauce, bring a bottle and share it. If you enjoy hot sauce, this is a treat.

The Kalahari has several restaurants on-site, but they get full and are resort pricing. If you have the means to travel (either your own wheels or new friends), there are a number of restaurants a mile or two north (take a right from the Kalahari entrance) on the main road. These include a Buffalo Wild Wings, Olive Garden, Ryan’s Steakhouse, Outback, Chili’s, Applebee’s and Panera. One we found that’s about 15-20 minutes away is the Angry Bull Steakhouse. Spectacular bacon wrapped filet mignon. ’nuff said.

You’re not actually going on safari, although the Kalahari decorators might appreciate you thinking so.  There is a Wal-Mart and other grocery stores a little north of the Kalahari, right around the Routes 2/250 interchange, and you can stock up on supplies once you arrive.

Most rooms have a small coffee maker, and there is a coffee shop on site. However, the coffee shop does not scale well. Regular coffee and tea is available at times during the day, but you’re own your own for other refreshments. There is a Starbucks a couple miles up the road near the other restaurants if you’re dying for your Mochacocoafroppaccinno.

Most rooms also have a small fridge (the suites have a real kitchen), and there is a Wal-Mart and a grocery store a couple miles up the road also. You can stock up on some essentials there.

Remember to hydrate! Bring a favorite water bottle, or maybe you can find a swag one. You will get thirsty with the dry air and moving around.

Social Activities

Outside of normal conference activities, there is an official game room, with dozens of games brought by attendees (bring your favorite), and both an acoustic and electric jam session. Bring your favorite instruments, or the conference supplies some.

In 2013, the Kalahari opened a new bar named Longnecks in the conference center, which will be open for CodeMash each night. Room parties are plentiful, and some sponsors also host activities.

The conference itself

The almost exact session schedule will be available via the apps or (usually) printed in your swag bag. Last minutes changes will be posted by registration and announced at meals. The 30,000′ view for 2013 is posted at!topic/codemash/m_zHu0TePpY.

You will not be able to attend all the sessions you want to–there are too many good ones. The law of two feet applies. If you find a session isn’t what you thought it was, move to a different one. Speakers know this too, no big deal. Just don’t make a ruckus as you depart.

In addition to the sessions, there is KidzMash, the unbelievably entertaining Pecha Kucha talks, the game room, Magic the Gathering tournament and the jam session. Plus parties.

Don’t forget to visit the sponsors and thank them! CodeMash wouldn’t happen without them. In addition to cool prizes, they have products which may help you in your daily life, and many sponsors are recruiting talent. You may find an awesome new job there.

Save the WiFi!

One of the complaints about every conference is the WiFi is slow.  CodeMash and the Kalahari have made great improvements but we the attendees need to do our part.  CodeMash has stats on what the largest bandwidth hogs are (and reserves the right to block these).

Please be sure to turn off the following things while you’re here (you’ll be back to civilization in a couple days, and you can resume your normal bandwidth consumption then):

  1. Automatic updates
  2. Carbonite/Mozy backups
  3. Torrents (both downloading content and service as a torrent host)
  4. Streaming radio or video
  5. Tor relays
  6. et cetera.  Be respectful of your fellow attendees.

Additionally, if you know you’ll be in a session with prerequisites, please make sure you download and install these before you leave for the conference.  CodeMash does have an onsite server for prereqs also, so if you find something you missed you can access that.  Information is in the conference book you get at registration.

How to behave

Be comfortable in your own skin. Too often at conferences I see people afraid to interact because they may not be as knowledgeable as the other attendees and they’re afraid they’ll be judged. That’s never the case, especially at CodeMash. What you know has value, what you don’t know is a topic for conversation. Being at a conference is as much about sharing as it is absorbing what is being shared.

CodeMash is not a stuffy, tightly wound conference. The organizers have a sense of humor. Don’t be afraid to relax and be yourself (even if being yourself means you’re tightly wound). You’ll see all kinds of silly things around the conference, enjoy the atmosphere.

One great advantage of being at the Kalahari is the social interaction, so if you’re staying offsite, plan to hang around the Kalahari and socialize. Talk to speakers and other attendees. Everyone is available, and you’ll have plenty of chances between sessions, during meals and at the social activities. The sessions are great, but the hallway sessions are often the best. We’ve come up with all kinds of crazy ideas and brilliant solutions around a packed dinner table covered with wings.

To foster an environment of sharing, the organizers have a strict policy against making people feel bad. Briefly, “Be excellent to each other, and party on, dudes!”

Officially, to quote the CodeMash Anti-harassment Policy:

CodeMash is dedicated to providing an outstanding conference experience for all our attendees, regardless of gender, sexual orientation, disability, physical appearance, body size, race, religion, financial status, hair color (or hair amount), platform preference, or text editor of choice.

We do not tolerate harassment of conference participants in any form, and we would like to take this opportunity to remind all attendees of the basic premise CodeMash was founded on: passionate, but respectful dialog between our attendees. Please treat your fellow attendees with respect, regardless of the context you’re interacting with each other.

Harassment is not appropriate for any conference venue. Conference participants violating these rules may be sanctioned or expelled from the conference, without a refund, at the discretion of the conference organizers.

When you arrive, check you ego and judgment at the door. Enter with a wide eyed sense of wonder, you’re going to learn some awesome things. CodeMash is a great opportunity to learn from others, so take the opportunity to learn something new and different. IMHO, if you don’t leave planning to try something totally new, and knowing where to start, you did it wrong.

Thank the organizers, volunteers and Kalahari!

CodeMash is entirely run by a team of volunteers, and make sure to thank them for a job well done. From trying to narrow down thousands of submitted talks into around 200 sessions, to arranging hotels, food and transportation, sponsors, A/V and more, the organizers put in a tremendous amount of time and effort. In 2013, expenses for CodeMash were around $610,000 and income from sponsorships and registration was around $640,000, leaving a very tight margin for anything last minute. All the little things add up, so you can see the job in enormous. If you’re so inclined, a hugboard has been set up at

Also, be cool to the Kalahari staff. They work overtime to ensure a great conference, and it’s a very stressful week for them.

In conclusion

The hallmark of a great conference is one you’re sad to leave, and anxious to come back to. CodeMash provides a great environment, but it’s up to you to make it awesome for you. Participating and interacting are key to making your CodeMash experience awesome. The secret sauce of CodeMash is partly organization, partly Kalahari, but mostly attendees.


1. Do I get waterpark party passes if I have a CodeMash ticket but am staying offsite?

Yes!  The waterpark party is a conference event, not a hotel event.  Kalahari guests do have access to the waterpark at all times, which offsite attendees do not, but that mostly benefits guests with families along for the ride.

Billy Hollis and the .NET Rocks Road Trip in Pittsburgh

The .NET Rocks Road Trip is coming to Pittsburgh, with special guest Billy Hollis! The crew will be here on October 11, 2012 from 6-10pm at the Sheraton Station Square.

For anyone not in the know, .NET Rocks is perhaps the longest running podcast for developers, with over 800 weekly episodes. Billy Hollis is a well known speaker, author, consultant and trainer. I’ve seen Billy speak on a number of occasions, and he is a very engaging and informative speaker. This is a great opportunity to see all three of these guys in one place.

Fajita dinner will be served starting at 6, and the festivities will begin promptly.

Here’s how the evening shakes out:
Intro by Carl and Richard (10 mins)
Carl builds a Windows 8 application (60 minutes)
Richard demonstrates DevOps toolchain with VS2012 and SCOM (60 minutes)
Billy’s talk, whatever is on his mind (15-20 minutes)
Billy, Richard and Carl record a DNR based on Billy’s talk (45-60 minutes)

For more details on the evening, and registration, go to