Bill Blogs in C# -- me

Bill Blogs in C# -- me

Created: 2/22/2013 5:04:02 PM

Let me start by saying that much of the content at the Microsoft MVP Summit is covered by the NDA MVPs sign with Microsoft in order to participate in events like the summit. This recap necessarily leaves out any information that was covered under the NDA. Specifically, as a C# MVP, much of my time was spent with the C# and Visual Studio teams. There is a tremendous amount of work going on in those areas. I'm not blogging about any of those sessions, because all of those were NDA sessions. My silence on the future of C# is for that reason and that reason only.

There were a number of sessions and discussions around the async features added to C# 5. It was really valuable spending that much time with Stephen Toub  and Lucian Wischik discussing common mistakees people make when writing async code. In addition, Lucian and Stephen gave solid, actionable recommendations on good practices for async programming. I say 'good practices' not 'best practices' because these features are new enough that it's a bit arrogant to think we've figured out what's 'best'. We have good ideas, but they will still evolve. One of the async presentations was not covered under NDA, and Stephen has posted it on the pfxteam blog. I really like Lucian's explanation here on the state machine and event-based async programming (slides 23-25). This is a great explanation and example on how async, await, and the Task Based Async APIs can enable you to write async code that much more clearly represents your designs.

Test your own knowledge and take the async quiz at the end of the slide deck.

You probably saw the announcement on Git support in Visual Studio. There were a lot more discussions on Open Source development at Microsoft. Publicly, you can see the Azure support for Node.js is Open Source. ASP.NET MVC development is open source and accepting contributions from the community. For the past several years, there are more and more Open Source announcements at the MVP Summit, and those are always welcome news. I do hope it’s a trend that will continue, and next year's Summit brings even more announcements.

Like every conference, the Hallway Track is always valuable. Other MVPs have other focus areas. Even in SRT Solutions, Patrick Steele and I are C# MVPs, and Dennis Burton is an Azure MVP. It's incredibly valuable to discuss different areas of development with so many smart people from all around the world. The hallway track is where I can ask questions about ASP.NET development, Azure, Windows 8 development, XAML, and all the other areas I understand, but not as well as I do the C# language. I also get to catch up with the future of Visual Studio's ALM tools. (See Git Support above, I'm happy with what I learned).

Finally, a world wide conference with a bunch of developers can make you feel very hopeful about the future. Different regions show their pride in their home with what they wear. All the Canadian MVPs have Team Canada hockey jerseys. (I have one. It's a gift from Peter Ritchie, so I'm an honorary Canadian). The Brazilian MVPs wear Team Brasil football (soccer) jackets. Russian MVPs have Russian Olympic warm up jackets. It's all in fun, and great conversation starters. There are social events every evening, where we can chat with old friends and new acquaintances from all over the world. The final night was another attendee party at Century Link field. The organizers had setup one end for soccer and the other for American football. I learned a bit more about "real football" from some European friends, and taught a few of them how to throw a tight spiral with an American football. And, of course, there were bands and rockeoki (kareoke but with a live band) on the concourse. The quality of the singers varied greatly, but we all had fun. I’m sure some embarrassing YouTube videos will appear shortly.

I can't wait for next year.

Created: 1/2/2013 8:58:19 PM

Welcome to 2013. This promises to be a year of many new adventures, and continuing many of my current activities.

Let's start with the existing activities, and the changes in those programs.

I've been renewed in the RD program, which is starting 2013 with a new logo.


The new logo is cleaner, more modern, and represents the direction of the Microsoft Regional Director program moving forward to stay at the forefront of technology. The RD program represents a strong community of independent technology experts that have key positions in companies around the globe. It's an amazing community.

There will be more news about the program, and the RDs over the course of the year. You'll hear more from this group of amazing people as time goes on.


Also, yesterday I received notification that I was renewed as a C# MVP. This marks my 8th year in the program. This is another highly technical community. The difference is that this community is focused on the C# language and related technologies. The unifying traits of the C# MVPs are that they are very knowledgeable in C# development, and they have a strong desire to share this knowledge with the software community. Sometimes that's the local community; sometimes it's the regional community; and sometimes it's the global community. That brings me to the next item.

This year, we're launching classes to teach professional software developers the techniques we use to create software for our customers. We've already launched the .NET Developer Infusion Series. We're doing our part to help address the skills gap for software talent in our area.

Watch for classes in other technology stacks to launch by March.

For myself, I need to focus more time on my own learning. There's been an amazing set of tools, libraries, and technology stacks that have become popular in the last year or so. I need to learn more about a variety of up and coming skills for building software. Like so many times before, this is a great time to be a software developer, and to learn new ways to create great value for our customers.

That means exciting times for SRT Solutions. Over the course of the coming year, we are planning continued growth, and continued commitment to creating great software that helps our customers achieve success in their chosen markets. Throughout the course of the year, watch for announcements of new applications, new customers, and new people joining SRT Solutions.

Which gets to my renewed commitment to communicate more. As I went through the last year, I can see that my blogging activity dropped off last year. There were a variety of reasons. One was that there were so many new things to learn that I wasn't sure I had the right answers. I looked through the blog archives and I see that it's more important to start the conversations here than to be perfectly correct every time. This year, I will be blogging more. My goal is twice a week. As in the past, many of the posts will be on topics that I am currently learning more about (like Windows 8 development). I need to have those conversations, and hear what you, dear reader, think about the same topics. I'm hoping that by putting my (sometimes half baked) ideas out there, we'll learn more together.

And, there are a few new surprises coming. Keep your eyes and RSS readers open.

Created: 12/14/2012 6:36:23 PM
We are excited to announce public classes for developers launching in January of 2013. Twice a month, we'll host .NET developer training classes for professional developers that want to grow their skills. Our curriculum is based on the wealth of material we've created to help .NET developers learn more about the C# language and environment. As readers of my blog, you're probably familiar with my books, videos and articles. But it's not just me. Patrick Steele has a regular column in Visual Studio Magazine. Many of our .NET developers have spoken at conferences and created content that we'll use in our classes. The format, the delivery, and the content are tailored for busy professional developers.  Each month, we'll conduct two afternoon sessions. One will be focused on a recent release to help developers learn the latest tools and techniques.  The second will be focused on mainstream releases to help developers become more proficient with the tools they are already using. Each session includes discussion and demonstrations. Most importantly, half the time will be spent on labs that provide guided experience on the topics being covered. We'll repeat sessions if there is enough interest. All the classes will be hosted by the experienced conference speakers that have been providing developers with great content for years. We're excited about this launch. It augments but does not replace our core focus: creating great software for our customers. Our area, like many locations, is experiencing a shortage of developers in certain areas, such as C# and .NET. That talent gap is slowing economic growth here. As Dianne and I have gotten more involved in the regional business community, we began looking for what we could do to help. The obvious choice is to help new developers in the community grow their skills. In fact, we’ve already hosted private classes for many of our customers. This launch enables us to reach a wider audience. Longtime readers of any of the blogs on our site know that SRT Solutions has a commitment to continued learning. We know that this industry moves fast, and we have to continue learning to stay relevant and move ahead. All our developers spend time learning new techniques and creating content. It helps us created create great applications for our customers. It also positions us to help other developers in our region.  Our goal for this new program is to train the developers that our growing regional companies need to grow. It's our way of closing the talent gap. You can learn more here. You can signup for the first two sessions here, and here. Finally, this effort doesn't stop with .NET.  We're also hard at work finalizing the curriculum for alternative languages on the JVM, HTML5/JS, mobile Development, and cloud based development. Those will be going live in the next couple months.
Created: 10/2/2012 7:11:14 PM

Thanks again to Carl and Richard for inviting me to come along to Omaha to join the awesome community in Omaha. I continue to believe that the strongest development communities are in the middle of the country. There are always strong crowds, engaged people, and good old mid-western friendliness. I’d love to see more of the big name conferences try locations in the Midwest.  There’s a huge untapped community of developers that would attend these conferences if not for the extra large travel expenses.  And, these developers are so energized that they are starting their own conferences in many of these locations.

Carl, Richard and I had a great discussion that is available here on .NET Rocks. We discussed how the software we create continues to change the world around us. My talk before the recording was around the concept that as developers our career is about changing the world and creating new possibilities. Software changes the way we do everything:

  • Delivering Health care has been radically changed by software.
  • Listening to music is completely different now that we buy music as files, not discs.
  • Watching TV and Video has been transformed by software.
  • Travel, retail, education.
  • Everything we is changed by software.

Our jobs are helping our customers create and adopt new workflows and new ways of leveraging software to make things better.

I talked about looking for different ideas, and being aware that often the best ideas are dismissed. As an example, I mentioned Steve Jobs fight to get the iPod released. His board fought him on that, saying that it had no market. The interview with Steve Jobs and Bill Gates that I reference is here. It’s long (2 hours or more), but it’s worth your time to listen to these giants of our industry discuss how they navigated long careers starting with home built computers on to the modern devices we now use.

The final point was why WinRT needs iTunes (or something like it). So many people use iTunes and and iPod (of some flavor) for their music source. Personally, I find much better value from ZunePass (now XBox live music). However, with the demise of the zune player device, those files aren’t portable. Music you download using your subscription is DRMed and can only be played on a linked device. I can’t plug my Windows 8 slate into my car. I can’t use it while I work out, or while I’m walking the dog. I need to get my music on an extremely portable device.

Today, that means iTunes and and iPod.

If I can’t do that on a WinRT device, I need another computer to manage my music library. That means I’m more likely to buy an Intel Windows 8 device, even if it’s only to manage my music. If I had a way to get my Zune music on a portable device (besides my phone), I’m set.

Created: 9/24/2012 8:29:34 PM
This will be a new adventure.  As you’ve probably heard, Carl and Richard are hitting the road again. They’ve asked a number of us to join them in different locations around the country as they do their thing. This time, I am joining them in Omaha, NE. I’m looking forward to this, because I’ve never  been there, so this will be a new experience for me. I’ve heard from Carl and Richard that they’ve had a very large number of people registered. I can’t wait to meet everyone, lift a jar or two, and discuss software development with a new community. Omaha, here I come!  See you Wednesday.
Created: 5/16/2012 1:10:14 PM

I really enjoy creating software. I’m thrilled to be part of this industry, and able to create useful apps for people our customers. But yet, if we want to remain productive and engaged throughout our careers, we need to actively exercise other parts of our brain from time to time.

It’s too easy for many of us to fall into that trap of doing the familiar, working the same way, choosing the comfortable path. That kind be stifling. You do the same things the same way, and it becomes habit.

If you want to stretch, you need to open yourself to new ideas, make your brain do different things, and grow.

That’s why we did a workshop this past winter with The Improv Effect. It was an exhausting afternoon of fun. Our entire team ran a number of different exercises. Throughout the afternoon, everyone was laughing, thinking, and trying to produce the best improv sessions we could. it was fun because the exercises are designed to apply humor to your daily activities. you look at challenges from a different perspective when you’re trying to make them humorous. It was exhausting because you use very different parts of your brain than you do when creating code. You’re reacting to your partners in Improv. You’re listening very carefully. You’re doing the first thing that comes to mind. You’re going to make mistakes and fail. A lot. And then, you need to recover.

Because of all that, maybe software development should be more like Improv. We should handle change. We should handle updates. We  should handle mistakes. If you’re tasked with making innovative applications, stretching the boundaries, and implementing new ideas, maybe you need to treat your brain the same way: Stretch it. Try new things. Innovate in different areas.

I encourage you to try totally new disciplines. We found Improv a great way to expand our minds. I encourage you to do the same. And, if Improv isn’t your thing, look for other opportunities to grow your brain in other areas.

Created: 1/19/2012 1:53:15 PM

My video series “C# Puzzlers” is live on both Safari and Inform IT.

C# Puzzlers are a series of small puzzles that make you think about some specific facet of the C# language. I put together a series of exercises are several different facets of the language. I think it’s an engaging way to get your mind around some of the areas of the language that commonly cause confusion for developers.

You can get the puzzlers at InformIT, or Safari.

Created: 1/3/2012 1:34:07 PM

For most people, the holiday season is over, but here, where Michigan and Ohio meet, there is one more major event:  CodeMash.

I have not yet figured out my entire schedule, but there’s a few things I plan to concentrate on.  I need to learn more about WinRT. I’ve had too little time to build samples and learn about it yet. I want to learn more about Scala, an exciting functional style language that runs on the JVM. Beyond those specific goals, I want to learn about techniques I can apply across any platform. I don’t believe I’ve learned as much as I can about modern software engineering techniques: testing, continuous improvement, advances in languages, frameworks, and libraries. I want to spend as much time as possible in sessions that are not platform specific, or language specific.

I am giving two different talks this year.  Early Friday afternoon, I have “C# Stunt Coding: I Dare You to Try This at Home” This is a really fun talk to give. I get to start by saying that all the techniques I’m explaining are for edge cases, and specific problems, so chances are you will rarely want to use them in your everyday coding activities. Of course, that means everyone will pay careful attention, and immediately try everything I show the very next day. There’s no avoiding it. Developers just think that way. That makes it more fun.

Spoiler Alert

Ok, not really.

The other talk I have is “Async From the Outside”, where I discuss how the new async programming model in C# 5 introduces new ways to to make async programming easier.  You may have noticed that the abstract for Async From the Outside references the talk “Async From the Inside”, given by Jon Skeet, author of the very popular and respected “C# In Depth”. If you look at the abstract for Async from the Inside, you’ll see it references Async From the Outside.

There’s a few more items you should notice about these two talks:

  • They are in the same room
  • The second (inside) immediately follows the first (outside)

You may be thinking that it would be better to mash these two talks together, giving attendees two hours of async inside and out.

Well, Jon and I thought the same thing. We’re working together on a single stream of content, with both of us working together for the duration of the two talks. We’ll discuss how to use a feature, how it’s implemented, and how to use it in your regular development activities.

Well CodeMash fans, this will be the first time Jon and I have met in person. We’ve emailed, chatted, skyped, google talked, and been on .NET Rocks together, but we’ve never yet met in person. I’m looking forward to it. Jon and I are working quite diligently to make sure we deliver quality content. 

Jon also has his own individual talk to give: C#’s Greatest Mistakes. I’m really looking forward to that one as well.  Jon has shared some of the content with me. He’s one of a very small set of people that can give a talk like this, and make it a great talk for people to learn, not a screed. It’s one of Jon’s best qualities: the skill to be critical, yet positive.

Jon has written a similar post on CodeMash.

Created: 8/24/2011 1:10:59 AM

SRT Solutions is thrilled to be named to the 2011 Inc 500/5000 Fastest Growing companies in America. We’re #1901, to be exact. In particular, we’re the fastest growing software company in Michigan.

Before I write anything more on this subject, I need to share an anecdote about my attitude toward awards like this. Harvey Penick tells about one time when he was preparing a talk for a national convention of golf pros.  He asked his wife, “Of all the great teachers, they have chosen me to give this talk. How many great teachers do you suppose will be there?”  She replied, “I don’t know how many great teachers will be there. But it’s probably one less than you think.” Instant Humility.

It’s important to keep perspective, understanding that this is the result of a long series of events.

There are a large number of people involved to make this happen. Dianne Marsh and I started this company in 1999, as a two person consultancy. It’s now quite a different company, with a great team of developers that keep us thinking about new technology every day. We set out to create the company we wanted to work at.

We likely benefitted from never having run a company before. First and foremost, unlike many other companies, Dianne Marsh and I work very collaboratively, rather than splitting duties as co-owners. We both have strong technical backgrounds, with some shared technologies, and some technologies that have interested one or the other of us more.  We’ve both had to grow into the roles of running a company, and managing a group of really talented developers. We’ve also had to learn the skills of running all facets of a company, from marketing and sales, to budgets to people and all those other tasks that aren’t creating software. All the way along, we’ve focused on keeping the company culture a place where we have fun building great software. Most importantly, we’ve tried to help each other grow and get better for our company.

To build this company, we’ve worked hard to recruit and retain a team of incredibly talented and motivated software developers. We’ve had 4 developers recognized as MVPs since they joined our company. We’ve had developers grow as writers and be published in magazines like MSDN, Visual Studio Magazine, or CODE magazine. Several developers has spoken at different user groups, and community and major conferences. They’ve built open source applications, libraries, samples, and great software demos. Look around the SRT website and blogs, and you’ll see examples of some of the great things these people have created. Our success, including making the Inc 500 list, is due in large part to all of them. Their contributions, attitude, professionalism, and patience with everything the last several years have brought continues to amaze Dianne and me.

As we’ve been on this journey, both Dianne and I have groups of people that we work with that have been great friends and colleagues along this journey. In my case, the group of Microsoft Regional Directors have been invaluable as friends and colleagues. They are super smart technical people that also have high level business responsibilities.  Having a group of peers like them to discuss ideas and learn from has been instrumental in navigating how my role in the company has changed, the changing technology landscape, and the evolving position SRT Solutions has in this environment.

The Inc 5000 is a big list, and I want to mention some other facts about the list to highlight some of the positives about Michigan’s business climate. I’m sure you’ve heard many of the economic challenges our state has faced in the last few years. You may be surprised to learn that more than 100 Michigan companies made the list. Many of them (like us) had more than 100% growth over the past three years. I’m also going to pay special attention to the Software companies in Michigan. I’ve blogged before about how much the software industry can help transform Michigan’s economy. These companies are growing very quickly, and adding jobs. Finally, I’m going to single out TechSmith, because they make Camtasia, and I’m sure they are familiar to most of my readers. (And, they are just up the road a ways).  Of course, they rock, and their community contributions are an inspiration to the rest of us.

I’m going to close with a quote from a friend when I mentioned this announcement in email:

You are normally so quiet and modest about your company, I really had no idea.  But I suppose that's part of your success...focusing on the business quietly and earnestly.

Despite this post, I hope to continue doing just that. Hopefully that continues the success we’ve been lucky enough to enjoy so far.

Created: 8/22/2011 9:37:28 PM

Recently we had a conversation in the office about how to get children (the 10-15 year old set) interested in software development. There were a lot of good ideas, so I thought it would be worth sharing with everyone.

The most useful part of the discussion, and the parts everyone agreed on, did not involve a particular technology. It’s also applicable to endeavors other than software, and to other age groups.

First and foremost, there must be motivation. In this instance, an 11 year old “had heard he could write Xbox games in C#”, and that provide the spark. That won’t be everyone’s spark, but it was here. For others, the spark will be different. A few of us wrote our first programs because it was the easiest way to do our math homework. Others wrote their own website. Every one of us got into this at first because we wanted the machine to do something it didn’t do. In order to get the machine to do something new, we needed to learn to create software for it.

Once a person has that motivation, finding the right tool becomes easier. That’s going to be a combination of the goal, and the age of the person involved. The most important point is to find some way to get a success early on. The longer someone goes without seeing progress, the more discouraged they will get. (ed note:  Sounds a lot like customers).

Once motivation, and some tools are found, build something. Build something small so that the person gets that satisfaction early in the process.  Once they start building small things, they’re on their way. Then, start going after larger projects.

There are a lot of options for tools, which to pick will depend on the student’s age and their goal.  Any of these would be a good choice (for the right person):

Scratch. This would be for the youngest set. One person in the office mentioned that their 6 year old had used Scratch successfully.

Alice. Alice is meant to be a very approachable environment for children to create stories and games.

Kodu.  Kodu is a visual programming language designed for creating worlds, with stories or games.

Phrogram. Phrogram is the successor to the successful Kids Programming Language (KPL). This is a little closer to a general purpose language, but still very approachable.

Lego Mindstorms. This is a mix of robotics and programming. And it’s Lego.  It’s really cool if your goal is to build a robot, and program it.

The same tools you use. Hey, why not? If they are interested in building software, and they are in their early teens, go ahead and teach them the tools you use. If they are early teens, or older, they are ready, if they are motivated.

We keep hearing that there is an upcoming shortage of talent in software. That next generation can have the same success we’ve had, if we show them how much fun it can be to make these devices do what we want. Spend some time with a motivated youngster and recapture why you started this career. Motivate and teach that next generation.

Created: 7/15/2011 6:22:35 PM

I read this post from the career site at my alma mater regarding ways for computer science majors to make themselves stand out. Here’s what I would tell a recent grad who may have read this post:

There’s some good advice here, but it’s too easy to take it too far, and lose sight of your core skills and and the reason you went into computer science in the first place. Let’s face it:  Building software is fun. I really hope you went into this field because you like building software.

Maximize the importance of your degree first.

Your CompSci degree is one of the things that can set you apart from many programmers. You have a strong basis in the theory used in this field. I would expect that you can understand algorithm design, make some intelligent (if inexperienced) design decisions, an analyze the kinds of problems we encounter everyday.

Further, I’d expect you to have a basis in many of the concepts we work with everyday.  You were exposed to a few different programming languages, right? Those belong to different families, right? You learned some Object Oriented techniques, some Functional techniques, even some Procedural techniques.

I’ll also bet you learned something about threading, context switching, processor design and computer hardware architecture.

That basis means that you’ll be able learn the new programming skills that will inevitably be required more quickly than someone without that basis. I no longer use a single language, platform, or library that I learned as an undergrad. Nor would I want to. But, I continue to use the Computer Science concepts I learned back then.

Show that you want to keep learning and keep growing

You’re not done learning. I’m not either.  As you reach out to prospective employers highlight the fact that you don’t think your Comp Sci degree was the end of your learning. Here Jessica makes some good points, but doesn’t explain why they are useful. If you’re working on an open source project, highlight it, and tell employers why you care about that project. Also, tell them what you learned from the experience.

The same goes for any other non-computer experience: Have you had any opportunities to lead a team? Speak in public? Write effectively? Highlight those. Show that you are, and intend to be, more than someone that types code.  Are you going to want greater responsibilities and broader roles as you grow?

Of course, don’t be too pushy. That gets back to the point that you want employers to know you will keep learning.

A few comments on the elusive “business skills”

If and only if you are targeting a particular vertical sector (for example, if you want to write software for the financial industry, or the health industry) should you concern yourself with those kinds of business skills.

However, you should recognize that for the vast majority of professional developers, our customers are not developers or computer science majors.  Part of our job is to listen to users, or prospective users, describe their needs. Only by listening carefully to users describe what they want software to do can we build what they need. Can you show that you will listen carefully to someone describe a problem in their own jargon and turn that into software? If you can demonstrate that skill, you'll be in high demand. That requires knowledge of computer science, and many of the skills Jessica discusses in her post.

Created: 5/31/2011 6:20:58 PM

Earlier this Spring, SRT Solutions was awarded one of the Michigan 50 Companies to Watch award. This award goes to 2nd stage companies that have been experiencing significant growth. We invited the entire SRT team to join us.  Not everyone could make, but those that did helped make the night more memorable.

We learned a lot that night.


Dianne Marsh is pretty bad at Jazz Hands. She prefers the more traditional, business like pose:



But, that doesn’t work for Chris. He felt a Stanley Cup style pic was needed:


In all seriousness, these people are the reason we could earn such an award. We have super smart people working here, and we also really like working together. The collaborative nature has been, and will continue to be critical to our success. Everyone wants to work together.

One simple way to see that is in our large training room (where we host several user groups). If you walk into the office on a regular business day, this room isn’t setup for a user group.  It’s the company lunchroom:


Depending on the day, some folks bring lunch, and some get food from one of the many excellent lunch restaurants in downtown Ann Arbor. But, almost always, people bring the food back to the office to join their coworkers and friends.

Like many of the traditions and activities around our office, this one just sort of happened.  I don’t even remember how it started. I just remember folks starting to eat together. Whenever someone new joins, they get invited to join in. Early on though, we used one of the other spaces (because there were fewer people).

We might have had a few folks at the conference table in the office Dianne and I shared:


Or maybe the original conference room:


I think this started because for many years before opening our space, Dianne and I worked out of our homes. Opening an office became as much about the social aspects of a workplace as it did about the work. It still is.

We build software collaboratively. Our company works on many different projects all the time. It’s not uncommon to have one project team get stuck and get help from someone on a totally different project. Something clicks about a problem, and a new perspective helps.  That can’t happen without the social aspects of our workplace being strong.

We believe in this part of our culture so much that many of our interviews are scheduled to include lunch with the team. Prospective hires will get the chance to interact with everyone, see if they want to belong, and see how easy it is to fit in here.

That culture, and the camaraderie that we share is a key reason awards like the Michigan 50 to Watch are important to us. We get to share it with the best, most talented, and coolest software development team around. And there’s still room for a few more lunch tables in the big room. We’re not done. And now, Michigan is supposed to watch us.

Created: 3/30/2011 12:18:49 PM

Standard business advice is “network, network, network”. I disagree, and in this article I’ll tell you why you should concentrate on building communities instead. Let’s begin with the definitions (both from Webster’s). 

network (n) as, “a usually informally interconnected group or association of persons (as friends or professional colleagues).”

community (n) as “a unified body of individuals as: a body of persons of common and especially professional interests scattered through a larger society.”

Community is stronger. Networks are informally interconnected. Communities are unified, of common and especially professional interests. Communities take longer to build, but are much more valuable. There are three communities that I’m especially proud to be a part of.

The Heartland Developer Community

Yes, our regional community of software developers has a name. We are the heartland. This is an amazing group of people that builds the software that builds new companies in our region. We create CodeMash, we run GiveCamps, we host, run, speak at, and attendmanyoftheusergroupsinourarea. We spend time together learning more about software development, and teaching others what we have learned. I’ve spoken everywhere in our region from Traverse City to Dayton, OH. I also have asked for topics and received offers from speakers to come to Ann Arbor and help our developers learn new topics. The answers come from all over the region.

Many of the developers in our region are self-employed or independent consultants. Being a member of this community means I’m never more than a couple emails away from the right person to help us on a project, or help our local developers learn something new.

Passion for software development, and our region are the bonds that hold this community together.

The C# MVP Community

I’m also a C# MVP. The C# MVPs are a community within the larger MVP community. The MVP community is a world-wide group of people with very deep knowledge of the C# programming language. These are other authors, speakers, and developers that help others learn more about the C# language. As a community, we help each other by reviewing book manuscripts, draft talks, articles, and new product ideas. As a world wide community, we grow friendships around the globe. The team Canada hockey jersey I sometimes wear is a gift from a C# MVP from Ottawa. Some days in Ottawa, he’s wearing a Michigan football jersey I gave him in return. The technicalreviewers for my books, members of the C# MVP community, span three continents. All had comments and feedback that made the books better. I’ve made similar comments on friends manuscripts from around the globe.

We meet together in person at conferences, like the recent MVP Summit. Between these major events, we chat through social networks or email.

A common desire to create great software using C#, combined with the knowledge to do so bonds this community together.

The Microsoft Regional Director Community

The Regional Directors are a smaller, and more close knit community. They are a group of 115 of the most influential software developers in and around the Microsoft Developer Community. These are business owners, C – Levelexecutives, investors, entrepreneurs, and softwarearchitects that span 6 continents. We regularly communicate via an email list that generates between 20 and 50 emails per day. We get together regularly at conferences around the globe. The wealth of knowledge, insight, and friendship among us is truly amazing. I’ve asked questions about topics ranging from finance, to angel investing, to business plans to software market trends. I’ve answered my share about growing a business, being an author, what the business climate is really like in our region, and some of the markets we’ve been involved with.

A common desire to make our individual regions better places to live, work, and succeed binds this community. It’s the most energetic, successful, and fun group of people I have ever associated with. It’s got world-wide reach, and an incredible wealth of knowledge.

What makes a community?

I discuss those three communities above with some pride. That’s not to brag, but to point out how much stronger a community is than a network. If you’re involved in strong communities, you surely have similar experiences in your own community. If you don’t feel these strong bonds, you haven’t formed a strong community.

A community is bound together by a common purpose or mission. The best communities will outlive any or all of its members. It grows into something that can sustain itself beyond its original charter. I know that if I ask anyone in my communities a question, I’ll get help, knowledge, and guidance. I also know it’s my responsibility to do the same for others in those communities.  That’s much more powerful than any network.

Other area business people have questioned SRT Solutions put so much emphasis on community. The communities we belong to help us make positive contributions to our region. There’s no better way to find the people that will help us succeed in our mission to build great software for our growing companies. People that network are very common. People that can build great communities are incredibly valuable. That’s who we want on our team.

Created: 3/8/2011 7:09:05 PM

No, not the Beatles song.

This is my single most important recommendations for speakers.  If I devote an hour of my life to attend your talk, answer the ‘why?’ question.

We’ve all heard that there are only a few important questions to answer in a presentation, article, blog post, or anything else:


I’m going to make the bold assumption that most of you are developers, and therefore most of your presentations are technical talks.  If you are going to present something, tell me why I should be interested in your talk:

Why should I spend more time learning this topic?
Why will this topic help me do my job better?
Why will this topic change my life?

Concentrate on Why because it’s all you have time for. In most talks, you have an hour.  You can’t make the audience experts in a new topic in an hour. Your goal should be to pique their interest enough to motivate them to learn more. If you concentrate on Why? you’ll touch many of the other questions as well.  You’ll probably show me how the technology works. You’ll demonstrate what it is. If it’s a beta, you’ll tell me something about when it will be available. And, you’ll almost certainly tell me what it is.

Answering why will also make it easier for you to tell a story. You won’t just be spouting disjointed facts, you’ll be creating the situations around when your topic will help me.

Answer that important Why question. You’ll be a better speaker, and you’ll get your attendees to take action.

Created: 1/6/2011 7:06:18 PM

CodeMash is next week. My favorite feature of CodeMash is that there is great content from start to finish. Because there is so much great content, it’s not possible to give others recommendations that are universally correct. Instead, I’ll say where I’m going to be. I’ve annotated some of my choices with alternative sessions and I’ve said why.

Wednesday Precompiler

  • Morning: User Story Workshop with Barry Hawkins. I’m attending this because I don’t feel as comfortable writing user stories as I should. I can do them competently when I’m writing an application. However, much of my daily work is creating libraries that are used by others. When my end user is another developer, I struggle writing great user stories.
  • Afternoon: You won’t see me. I’ll be practicing my talk for Thursday.  However, I strongly recommend the Scala Koans precompiler. As you’ll see throughout this post, the folks at SRT have been prepping and practicing for a while now. I’ve already been through early drafts of these, and it’s a great way to learn a new language.
  • Evening podcast recording The Java Posse and .NET Rocks on the same stage at the same time. It’s going to be fantastic. 


  • Chad Fowler keynote . Hey, it’s Chad Freakin’ Fowler. (I’ve heard he even legally changed his name to Chad Freakin’ Fowler after CodeMash announced that he’s keynoting. I could be wrong about that though.)
  • 9:45: Future Directions for C# and VB.NET with Kevin Pilch-Bisson. Yes, this is an introductory talk. However, it’s an introductory futures talk. It’s always useful to get some context around the future vision.
  • 11:00. What the Math Geeks Don’t Want You to Know About F# with Kevin Hazzard. I’m going here because I want to be better at F#. I expect to stretch different parts of my brain.
  • 12:15Enter the WebMatrix.Yes, even if you did not get into CodeMash, you can see this part.  Microsoft is live-streaming this event from CodeMash. (Who would have thought that CodeMash would gain enough prominence to be chosen for a major launch event from one of the most important software companies on the planet? Kudos again to everyone that helped build CodeMash!)
  • 1:45. C# Puzzlers with Bill Wagner. That’s kind of a given, because if I don’t go, there’s no talk. CodeMash organizers would get mad and feed me to the rhino in the lobby. (I know rhinos are herbivores. Doesn’t matter. When angry CodeMash organizers want someone eaten, rhinos obey.) I have had good feedback on this talk when I’ve given practice sessions, or when I’ve given a similar talk (with different puzzles) last summer. I do hope you’ll join me, if you are at CodeMash. If not, I recommend LINQ Scalability with Jim Wooley. Jim is a very smart guy, and you’ll learn quite a few techniques about how to make LINQ work in different environments.
  • 3:00 / 3:35: After my talk, I’ll be hanging in the SRT booth. (SRT Solutions is a proud CodeMash sponsor, as we have been every year.) That’s the best way for me to continue to answer any questions about my talk, while making sure that the next speaker can setup and give his talk. However, if you’re not interested in questions about my talk, go to Jeremy Miller’s Functional Programming for Everyday .NET Development talk. You’ll learn techniques that will make your code more clearly express your design intent.
  • 4:50: Parallel Without Pain: Parallel Programming in .NET 4.0 with Jennifer Marsman. Once again, I know less about this than I’d like. It’s an important part of every .NET Developer’s toolkit, and it will be the foundation for the future (See the async CTP for what I mean.)
  • 6:00: TJ Giuli keynote. TJ is a research engineer at Ford, and one of the main brains behind the Ford Sync system.  Cool!
  • Evening:  Yes, I’ll be at the water park.  I’ll be the pasty developer relaxing with a full brain.


You’ll note that most of Thursday was spent on the .NET platform.  Friday, I’m exploring other areas. (but see annotations)

  • 9:30Scala 2.8 with Dick Wall. Scala is a functional language on the JVM. I want to learn how much it is different from the LINQ implementation (or F#) on the .NET platform.
  • 10:45: Rules for Good UX design with Joe Nuxoll. I admit it, I’ve got the design skills of a library developer. I need to work on that.
  • 12:20:  Scott Chacon keynote. He works on GitHub.  He says it’s awesome.  I believe him.
  • 1:45Mobile Smackdown with Chris Judd, Jeff Blankenburg, and Daniel Steinberg. We’ve built some mobile applications, and I’m certain that we will build more. I’m more certain that most of the mobile applications we will build in the future will have to support all three of these platforms (and possible blackberry as well).  However, I can say this because I’ve already seen Everything You Always Wanted to Know About Flex But Were Afraid to Ask with Brian Genisio when he gave his practice session at the SRT office.
  • 3:00: The SRT Vendor session happens.  We’re hosting Lightning Talks, so if you have a lightning talk, or want to gain some experience giving a short talk, come by room D.
  • 3:35:  I admit that I’ll end with a .NET talk:  Become an rX Pusher with the Reactive Framework, with Jim Wooley. I have done very little with the rX framework, and I want to know more.  My goal is to come out of that talk with a motivation to do more with the rX framework. Of course, I do strongly recommend Getting Your func(tional) on with F#, by Chris Marinos and Prototyping with Sketchflow by Mike Woelmer. Chris’s talk take you beyond the F# syntax to show you design techniques that are facilitated with F#. Mike’s talk will show you skills to take a customer from concept to UI with sketchflow.  If you’re involved in User Interface design, this is a great talk.

Current Projects

I create content for .NET Core. My work appears in the .NET Core documentation site. I'm primarily responsible for the section that will help you learn C#.

All of these projects are Open Source (using the Creative Commons license for content, and the MIT license for code). If you would like to contribute, visit our GitHub Repository. Or, if you have questions, comments, or ideas for improvement, please create an issue for us.

I'm also the president of Humanitarian Toolbox. We build Open Source software that supports Humanitarian Disaster Relief efforts. We'd appreciate any help you can give to our projects. Look at our GitHub home page to see a list of our current projects. See what interests you, and dive in.

Or, if you have a group of volunteers, talk to us about hosting a codeathon event.