Here’s the abstract to my talk. I’ll elaborate on the content more below:

Come learn about the idea of deliberate practice as applied to the craft of software development. Alan Stevens will perform (less than) amazing feats of coding and he will do it for your enjoyment in real time.

OK, I admit, that’s a pretty lame abstract. The explanation of the lameness is that I didn’t really know what my talk was about until a few days ago. I’ve had a lot of ideas in my head that I’ve been trying to put together into a consistent theme. It was only after explaining to my wife recently what I wanted to talk about, that I saw the unifying theme.

And so, dear readers, I present you with the unifying theme of my talk this week:

In order to get better, you must be willing get worse.

This means that if you want to constantly get better, you have to be willing to suck, at least for a while.

So, come to my talk if you want to learn how to suck with gusto, and as a result become a better developer. If enough of us take this approach, we might just improve the industry, at least a little.

On a recent trip I had my eyes opened to the phenomenon of sexual harassment in the IT industry. I don’t know why I was so surprised, but I was. It broke my heart to discover that friends of mine had to put up with treatment that I thought only occurred in bad HR training videos.

Before I unpack my thoughts on this issue I feel I must issue a disclaimer. I’m a man. I’ve been guilty of sexual harassment to some degree in my life. I do not want to give the impression that I am above this issue. I enjoy making comments laced with double entendre that are probably more than a little offensive at times. Only now, I am more aware of and sensitive to these situations than before.

Here is what I observed. I was sitting next to a female developer in a hotel lobby in the evening during a multi-day conference. We had just met that evening, and I was enjoying our conversation. We were both sober, while many of those around us were not.

Seemingly out of nowhere, a loud and drunken man, whom I had met briefly the night before, appeared. He made a few comments to the assembled group, then reached in his back pocket to pull out the envelope that the hotel gives you with your room key cards. Apropos of nothing, he hands the envelope, containing a key, to the lady next to me and says “my room number is written on there. I expect to see you in my room later.”

He then walked away while she tried unsuccessfully to give the room key back. After she sat back down, another male developer on her other side, in apparent sarcasm, said “you took somebody’s room key. You’re such a whore!” This pushed me past my tolerance and I yelled at him “Dude, over the line!”

While this brief scenario doesn’t indicate a trend, it did spark a series of conversations with several women in my circle of contacts. I discovered through these conversations that it is a nearly universal experience that similar inappropriate scenarios happen on a regular basis. What was especially disturbing to me was that the women couldn’t believe that I was surprised by this.

I consider the people I interact with professionally to be my community. I believe fundamentally that we have to take care of one another so that we can all succeed. To discover that members of my community were regularly tolerating treatment that I would not put up with for an instant was mind blowing to me.

I learned that rather than viewing men as neutral peers on first meeting, the women often view us with suspicion and caution. It is as though we are all potential assholes in their eyes, guilty until proven innocent. This led me to second guess many interactions I have had with women developers, wondering if they suspected my motives.

It seems to me that the women in our industry are swallowing emotional poison every time an harassing interaction takes place. They appear to have too high a threshold of tolerance for bad behavior. The lady involved in the situation that prompted this post told me that she couldn’t speak up because she would then be seen as a bitch and would lose business because people wouldn’t want to work with her. Here are some quotes:

I just shrug off certain comments/advancements, because being in IT I feel like I need to be “one of the guys”, so I take it and move on.

That’s what i hate – having to keep my guard up in order to respond professionally, because there’s this expectation that i have to respond in some way, either by being offended or going along with the joke and showing that i’m cool, etc.

I’ve been plenty naive, falling for “yeah sure we’re just friends” or “no I didn’t mean anything by that” lines. After enough lost trust in people, I’ve probably become more aware and/or suspicious.

Protesting too much gets you nowhere except labled in one of various negative ways. In which case, you HAVE to pick your battles, and figure out what is truly offensive and worth speaking up about, and ignore the rest. Otherwise you’re just the “boy who cried wolf.”

This condition frankly saddens me. In discussing these discoveries with my friend Dustin Campbell, he reminded me that as men, we have a tendency to fix and rescue. The issue at hand defies my attempts at immediate refactoring. I asked the women what I could do when I witness an incident of harassment. They suggested that I take the offender aside and talk to him rather than publicly reacting and potentially escalating an uncomfortable situation. One friend made it clear that I should say that I find the behavior offensive rather than come across like I’m sticking up for a “little lady.”

Henceforth, if I see anyone pulling any of this shit, I will take the person aside and have a discrete but direct conversation. If it continues, I will call the person out publicly. If it continues beyond that, I’ll take whatever steps necessary to inform vendors and clients of the individual’s character.

The day after my “awakening”, I went to a Women In Technology meeting to learn more. There I heard that retention of women in the industry is at least as big a problem as recruiting them in the first place. The three biggest causes of women leaving IT are sexual harassment, lack of role models and lack of mentors.

When it comes to role models and mentors, there may be fewer women than men, but they definitely exist. I know quite a few amazing women developers. Now, I am even more impressed with these women because of what they have had to put up with as they progress in their careers. I invite all of my peers to join me in making the profession of software development more welcoming to everyone by looking out for your neighbor.

Twitter never ceases to amaze me. I’ve seen lots of memes pop up and fade away in my Twitter stream, but, by far, the strangest is the #AlanStevensAvatarWeekend hashtag that sprang up this weekend. Forty people adopted a picture of me as a child in my Captain Kirk shirt as their avatar.

The background for this strange occurrence is another Twitter meme. I noticed people putting old pictures of themselves, often with outdated hair styles, as their Twitter avatar. While I have plenty of embarrassing hair styles in my past, I decided to join this meme by showing my geek cred. On Thursday evening, I changed my avatar to the afore mentioned picture.

On Friday morning, Andrew Duthie noticed my picture and claimed that he had been outclassed. Next, Y. Alan Griver adopted the picture as his own avatar because, he said, it’s a level of awesome he could never reach. By Friday afternoon, Andrew and Alan had both adopted the picture as their avatar and invited everyone else on twitter to do the same.

Friday night, I looked at my Twitter stream and saw around half of the tweets had my photo as the avatar. I announced that I felt like John Malkovich inside his own head. If you’ve seen Being John Malkovich, then you know what I mean. I wasn’t active on Twitter this weekend, I had children and home repairs to deal with, but I watched on with amusement.

Saturday night, I looked at my followers list and saw that many of my most recent followers had the Alan as Kirk avatar. I find it amazing that people who didn’t even follow me on Friday, had my picture as their avatar on Saturday.

I want to give special recognition to two variations on the #AlanStevensAvatarWeekend theme. Rick Hodder changed the shirt color to red, giving it a look of almost certain doom. Scott Koon (aka lazycoder) took a different picture of me from 20 years ago instead of 30 years ago as his avatar.

Thanks to everyone involved in this silliness. You all gave me countless belly laughs this weekend. I can’t wait to see what surprises my Twitter Tribe comes up with next!

I’ve facilitated Open Spaces in parallel with a traditional conference successfully in the past, but Open Spaces struggled at PDC. Doc and I examined what was working and what wasn’t and set about discarding what wasn’t working. When we were through with our examination, we were left with an approach that was inspired by Open Space Technology, but was not a full representation of that approach.

We were approached by Bob Familiar about putting together an Open Space track for the MDC events. We shared our thoughts with Bob and he was totally open to our suggestions. Doc and I tried to name it something trippy like “Parallel Process”, but Bob wisely suggested the more approachable, and descriptive, name of Community Courtyard.

So what is a Community Courtyard? It’s whatever you want it to be. Seriously, when you look at the conference agenda and notice a topic is missing that you are interested in, you can put it on the agenda for the courtyard. Whoever shows up is going to be interested in the topic, so even if you only talk to one other person, the conversation is almost guaranteed to be productive.

Personally, I think of the courtyard as a public speakers lounge. For years, I’ve had fantastic conversations with smart interesting people in the speakers lounge at events. Unfortunately, the attendees couldn’t participate in these great conversations. I want to change that.

I’ll be asking speakers to hang out in the courtyard when they are not presenting, or preparing their presentation. Also, instead of gathering at the front of the room after a session to talk to the speakers and ask questions, speakers can now invite attendees to join them in the courtyard to continue the discussion.

It is my hope that the Community Courtyard become a fixture at developer events big and small. I believe strongly that even the most tightly run event needs to make space for serendipity. We need a place at Code Camps and corporate conferences where attendees can seize the moment and talk with each other about what matters most to them at that moment.

I’ve already facilitated the Community Courtyard at the Atlanta MDC, and I had a blast. I know Doc is facilitating many of the other events. If you haven’t yet attended a MDC in your area, there are still a few remaining:

Come join me in Detroit. If you can’t make it to Detroit, then attend one of the other events. I recommend you do so. The content for these events is top notch, but the people you will meet are even better.

On January 1, I was pleased to receive an email with the subject “Congratulations 2009 Microsoft MVP!” It is nice to be recognized for my contributions to the Microsoft developer community. I’ve made a lot of friends and learned plenty by traveling around and giving talks, as well as helping organize developer events.

If you are unfamiliar with the Microsoft Most Valuable Professional program, you can read up on it here. Personally, I was overwhelmed by the show of support that I received from my peers when I announced my receipt of the award on twitter.

If you go here you can see what I’m talking about. It goes on for a few pages. I feel a bit like George Bailey in that my wealth and my reward is the amazing group of friends I’ve made.

The MVP award is for the contributions I made in the previous twelve months. I am not obligated to make any further contributions, but who am I kidding, now that I’ve found my Tribe, I can’t seem to stay at home.

Last week, I facilitated the Open Spaces at the awesome CodeMash conference. The theme of the Open Spaces was “Techniques Not Tools.” While I certainly agree with the sentiment, I still believe tools matter.

In my professional development, I work in .NET 1.1 using Visual Studio 2003 and I assure you there are limitations imposed by the tools. I am still able to build software that I am proud of, but it could be easier.

I’m currently setting up a new development VM and I thought I would share the configuration settings I use. I start by installing Visual Studio Team System 2008 Development Edition. I probably don’t need anything more than the Professional Edition, but there are some tools in the Development Edition that have been useful in the past.

I immediately install SP1 before I even launch Visual Studio. Once I launch VS, I choose C# developer settings. After the incredibly long wait, the UI appears and I make my way straight to Tools –> Options.

Under Environment/General, I uncheck animate environment tools.

Next, under Environment/Startup I select “Show empty environment.”

Under Projects and Solutions/General, I set the “Visual Studio Projects Location” to C:\Development.

Next I go to Text Editor/All Languages/General and turn on Auto List Members, turn off Hide Advanced Members and turn on Parameter Information. I also turn on Line Numbers and turn off Navigation Bar.

In Text Editor/All Languages/Tabs I set indenting to Smart, Tab Size and Indent Size to 2 and select Insert Spaces.

After closing out of the options dialog, I go to Tools-> Import and Export Settings where I import Brad Wilson’s Dark Consolas theme for VS2008. I will frequently tweak the font size depending on whether I am doing a presentation, but in general, I use the defaults from Brad’s settings file.

Now it is time to close Visual Studio and install Tortoise SVN and reboot. After the reboot, I install Visual SVN and Resharper. Both of these tools cost extra and both are more than worth the money. Because I don’t do any commercial development on this VM, I could install the personal edition of TestDriven.NET, but I have found that I get value from the emotional reinforcement of watching the green line grow in the Resharper Test Runner.

The last step in setting up a clean Visual Studio Install is to launch the IDE, go to View –> Toolbars and turn off all the toolbars. You will have to do this multiple times because different toolbars are active at different times. You do not need toolbars, and they are probably slowing you down. Learn the keystrokes. You will be a more productive developer as a result.

I managed to continue my quest for over-exposure at two events in the month of October. If you have any interest in my take on software development, conferences and developer community, then check these out.

First, I sat down with Andrew McNeil of the FoxShow over breakfast in Mesa, AZ. Andrew and I were both speaking at the Southwest Fox Conference for Visual FoxPro developers. I thought the conversation came out well: FoxShow58SWFox.mp3

Next, I sat down with Chris Williams for his Nine Questions series. Chris sent me a list of questions to answer back in June, and I never responded. While he had the video camera in hand at PDC, we sat down to do the video interview. Again, I’m happy with the outcome:

In agile development, it is common to hear people say “do the simplest thing that could possible work.” This is a corollary to YAGNI or “you ain’t gonna’ need it.” I don’t hear many of my fellow developers outside of the agile movement arguing with those sentiments. It seems we can all agree that we should not exert effort beyond solving the specific problem at hand.

There is, however, contention about what the implementation of such pragmatic simplicity looks like. As a .NET practitioner of agile development, it is common for me to write tests before implementation code. I often write interfaces which have only one implementation. I may use an inversion of control container, an object-relational mapper and other infrastructure utilities which appear to add unnecessary complexity to developers with a different outlook.

One of the most glaring anti-patterns for simplicity in my view is the SQL data source. It seems very simple and pragmatic to some because it allows the developer to quickly create a forms over data application which will deliver value to the client. While I agree that there is tremendous immediate benefit in using the SQL data source for the initial delivery of value, there is also a tremendous cost down stream.

In my view, the SQL data source represents all that is flawed in RAD (rapid application development) tooling. It allows the developer to quickly get data into and out of a database into and from the user interface. It also tightly couples the data access implementation to the user interface making future changes very difficult to implement. Fundamentally, tools such as the SQL data source represent the software equivalent of a Rube Goldberg machine where each bit of functionality relies intimately on the implementation details of it’s neighboring components.

The core problem in software from my experience is not the delivery of the initial version of any functionality. The core problem is that that I and the customer never know when or where the code will need to change, but we know for certain that it will change. Enabling change therefore becomes a top priority along with delivering value.

If I deliver value up front while discouraging later changes to the code, then I have not actually delivered value. I have in essence paid with a credit card. The cost of changing the code must be paid later with interest. This phenomena is commonly referred to as “technical debt.”

In my agilist mindset, I view the avoidance of technical debt as an essential element of simplicity. High coupling and low cohesion are too high a price to pay for immediate gratification. Furthermore, I have found that once I become experienced with the tools and practices of agile development, there is little cost, if any, to building changeability into my implementation from the start.