Spam 2009

I hate spam. You hate spam. We all hate spam.

A year or so ago, one of my ISPs began managing spam by not sending it to me. I balked and downplayed the use of that email address. The idea of missing an important email freaked me out.

But the spam has gotten worse, and my sensitivities have shifted. Spam sitting on servers and backups takes up space. Space on disk is energy. And has been a public email address for over ten years. You can imagine I get a lot of spam. Space on my disk doesn’t really matter. It doesn’t change the size of disk I buy. But the management of spam on servers does take energy.

This year when announced that they would begin refusing spam, I understand and support the move. Their gate blocks the spam. I think they waited on this until they felt they had decent technology. Decent technology is unlikely to be perfect.

This may impact you if you’re trying to contact me. If you get a “rejected as spam” message, try another approach, including IM, calling me, contacting me through this blog, or leaving a comment. I can easily whitelist you; I just need to know if you’re being rejected. So far I know of two messages that have been rejected. One is someone that contacts me regularly and I have no clue why he went into the spam bucket. But, the problem solved itself within the magic spam logic. The other was a friend who thought a particular piece of spam was funny so he forwarded it to me. Cool. Rejected on content. I liked that and I didn’t think it was all that funny when he told me about it.

Assuming your ISP is doing what it should, you’ll get a rejection message based on the rejection from the mvps server. But neither mvps nor I can do anything about whether your server actually informs you of the rejection. If I don’t answer, and you think I would have answered, you’ll have to try again. Don’t take it personally.

If we are exchanging email after sometime this month when they turned the filters on, everything is fine. But even if we exchanged email before that, we could see a problem.

In order to combat spam, more servers internal and external are going to take draconian measures. I can’t get a report, it’s not in my junk folder (not that I’d be that good at manually scanning the hundreds of spam messages I get a day). The world has changed, and each of us is going to have to take a little effort to ensure important email is delivered.

And thanks to the awesome folks at for taking such amazing care of me and my email for the last ten years. They manage many extremely public– as in highly spammed – accounts and do a great job. Community often appears just as the façade of people and faces you hear. But community is also a vast network of quieter engines driving the process – for me that includes,, and Thanks to the volunteers that keep these running.

This stinks. But I think it’s the best solution today and ask for your patience and perseverance if you need to contact me.

We Shall Overcome

Today in church we honored Martin Luther King by looking beyond him to others in the movement, including the Reverend James Reeb.

Someone wrote in the Joys and Concerns book (I paraphrase) “that my 7 year old may never fully understand the magnitude of what will happen on Tuesday is how we measure how much has changed.”

This is a moment in time worth savoring, especially for those of us that believed it would not come in our lifetime.

As you savor it, consider that there are many verses to “We Shall Overcome. “ They include “We shall walk as one”, “We shall all be free”, and “We shall live in peace.”

In the Bush years, I turned my TV off. The implications of giving up our rights for a false sense of safety, for seeing failure at every level of government oversight,  for seeing the government fail to guard the life of every serviceman and Iraqi,for seeing the reins of our government treated frivolously – these things twisted my stomach in a way that I could only turn away from.

Today, freedom, unity, and peace, especially worldwide seem impossible goals – but the I believed Tuesday would not come. If Barrack Obama will be president, what else is possible if we work together? If we are willing to risk working against the status quo, even when the risks are very real.

Remember the other verses, remember the other dreams. This must be only the beginning.We have the new battles with health care and the economy, but let us not lose sight of the old battles: peace, liberty and justice for all.

Core Values

In Code Complete Steve McConnell looked at core values for programming some fifteen years ago and came up with this list:

  • Intelligence
  • Humility
  • Curiosity
  • Intellectual honesty
  • Communication and cooperation
  • Creativity
  • Discipline
  • Laziness

And two that McConnell said don’t matter as much as you might think:

  • Persistence
  • Experience

I’m doing a talk for INETA (see note) called “Rethinking Object Orientation” which looks another book of the time – Grady Booch’s Object Oriented Design. Our world has changed so fundamentally that the ideals and focus presented in Object Oriented Design have changed, and that’s the core of my talk (the new things that matter). I think the same is true of core values – we need to rethink them.

Rethinking does not mean discarding. That chapter of McConnell’s book is still a good read every year or so. Rethinking means considering in today’s context. I’ll share my thinking but I need a huge caveat here: I rethink my core values and allow them to evolve as I learn and grow.

From, comes this:

Open Space Technology runs on two fundamentals: Passion and responsibility. Without passion, nobody is interested. Without responsibility, nothing will get done…If passion isn’t aroused, not much is going to happen, and responsibility will never have a chance.

Just Open Space? What about relationships? What about business? What about code? What about you?

Passion and responsibility must be part of our core values. What should we be passionate about and among the hundreds of possible responsibilities, where should we focus our energy?

Those are the good questions, and thinking about them led me to understanding a few more core values:

  • Individual knowledge and skills
  • Community knowledge

We must openly and directly stand on the shoulders of giants and acknowledge this to move ahead. One of the most difficult things in acquiring and maintaining individual knowledge and skills is that the body of community knowledge is so immense. If we do not constantly strive to better both, we will not succeed in writing meaningful software.

If we return to McConnell’s list, many features do not seem to be as important today.

For example; it’s popular to announce pride in being a lazy programmer. Not one person that I’ve heard say that was actually lazy. Looking for efficiency is not lazy. And laziness leads to the worst aspect of our industry: Ctrl-C/Ctrl-V.

Learning new things is important, but curiosity needs to be tempered with an enormous amount of responsibility. If you spend 80 hours a week learning new things, and you are brilliant, you will still not keep up with all the new advances in our industry.

Other things from McConnell’s list seem even more important today.

Humility is hugely important. It is why I’ve run crosswise of people that just pissed me off because they believed they had the “true answer.” There is no true answer, everyone is learning, and thank god we have 9-5 programmers.

Honesty is essential. It has always been essential. If you are in a programming environment where it is not OK to say “I don’t know” and “I was wrong”- run away. The environment is too toxic to survive.

I disagree with McConnell that experience and persistence are not as important as you might think.

If you read all of what McConnell says on experience, it’s clear he means is that simply counting years isn’t enough. Of course requesting five years of VB or C# experience is stupid. If you’ve been writing 1.0 code for five years, you have far, far less value than if you have one year embedded in generics, lambda expressions, LINQ, and the new libraries (WPF, WCF, Silverlight, etc).

But, the lack of respect for experience is holding our industry back. People are rediscovering things that have already been done. The act of rediscovery is exciting and sometime new thinking on old problems emerges. Alongside that, we lose the nuances that have already been uncovered. I am not espousing this as a gray haired old woman pouting that you’re not listening to me (a future blog post perhaps). I learn from people in this industry that are half my age but more experienced in some things. Those of us that are old, however, sense the fundamental truths. Unless we can ever write those in a book, which seems unlikely, both technology experience and long term passionate involvement in our industry have much to teach us.

I have the privilege of learning from my sons. My older one is a brilliant coder who grew up intimate with this industry. I told him once what I thought were important characteristics in a programmer – he said “nope, your wrong. The only important characteristic in a good coder is stubbornness.” I do not believe it is the only important characteristic, but it is an important one. In today’s world, we slog through code. We spend months or years on the same project. We debug in convoluted systems. While we sometimes need to find another way to solve a problem that is easier, it takes stubbornness in believing that problem will be solved to find the other route. And learning any technology takes patience and tenacity.

Those are my views. Take some time to consider your core values as a programmer. Take some time to see if those core values contribute to your programming life being what you desire.

The Most Important Feature of .NET 4.0

OK, I’m ready to stick my head out here. We just have a CTP and know only a little bit about .NET 4.0, but I’ll make a prediction about it’s most important feature.

First, let’s look at the big picture. .NET 4.0 is not going to have any blockbuster changes at its core like the anonymous method support and generics of .NET 2.0. Nor is it going to be the odd bolt on of half finished products that was .NET 3.0. Nor will it be the language frenzy of .NET 3.5.

.NET 4.0 is going to include some core changes, particularly in the area of parallel processing that is going to be very important to some people, and will eventually make it into all of our consciousness.

.NET 4.0 will also include another chance for Entity Framework, and I hope they can finish what they’ve set out to do there. I think there’s a measurable change they’ll create something with broader reach than EF 1.0, but I think it will remain needlessly complex for most projects, and Microsoft has further proven that the data arena is not a place they can be trusted when they announced limited evolution of LINQ to SQL. I hope one day I will say I was needlessly cynical about Microsoft’s data strategy, and I hope that day comes soon. I remain cynical.

.NET 4.0 will bring Azure and cloud computing to the forefront. That’s cool. For niche applications it’s very powerful stuff. People I respect like David Chappell think this is going to be the main development approach of the future. Maybe. But not right now beyond short term scale out requirements and applications looking for a new delivery mechanism.

All three of these areas are reasons that I’ll be on my toes as .NET 4.0 unveils itself because it will probably have the largest impact on how I design and code since LINQ. I anticipate that patterns will arise that are important in building applications that will evolve to take advantage of these major Microsoft initiatives (and others).

Before I go on, I don’t want you to overlook what I just said… I’ve got gray hair and I’ve been in the business a long time…

.NET 4.0 is likely to offer patterns that will be the most important change in my coding since the huge changes brought on by LINQ (and supporting techniques like extensions and lambdas) of .NET 3.5. That was the most important change to my coding since generics in .NET 2.0. That was the most important change to my coding style since strongly typed full OO programming came on in .NET 1.0. That was the most important change to my coding style since the visual coding style of Visual Basic (pre .NET). That was the most important change to my coding style since Clipper and FoxPro. Get the trend? Eight years, eight years, three years, two years, 18 months… I do a talk for INETA called “Rethinking Object Orientation” that tries to get a grip on these changes… .NET 4.0 is going to bring a lot and inspire a lot of rethinking.

And so, to stick my neck out and say “this is the most important feature” requires clarification. If we look beyond the long term implications of .NET 4.0 and ask about what it changes in your world the day it ships, beyond incremental improvements, I think there’s only one answer.

The most important feature of .NET 4.0 is Windows Workflow 4.0.

Windows Workflow 3.5 gave you a tool for free that previously cost tens of thousands of dollars to get your foot in the door. It was a great opportunity. And there was almost no uptake. I think there were a few reasons – it was too darn hard to use and Microsoft didn’t push it very hard. They probably didn’t push it because it became evident that they screwed it up and it was way too hard to use.

Windows Workflow 4.0 is a complete rewrite of workflow. It’s a brand new product. More than just rewriting, it represents a rethinking of the problem. It’s not the old giant workflow behemoths pared down to fit into Visual Studio. It give normal developers what they need to incorporate workflow into their applications. If we look beyond forms over data and extend the reach of our applications into helping the organization accomplish its goals, we find workflow. Workflows are a fundamentally better way to think about business problems – and it can often be interleaved with existing applications. Assuming the release is stable as a 1.0 product, and I’m optimistic on that, it’s going to be the thing in .NET 4.0 that lets you add real business value to your applications.

And real business value is what its all about.

No Intro Windows Workflow Workshop at DevConnections

For the past several years I’ve given a pre-conference workshop on Windows Workflow at DevConnections. It’s been challenging to cover the gestalt, and the grimy quirks and details in a single day. It’s the stupid quirks that cost so much time in a WF project, and that stuff is hard in a workshop.

I have good news and bad news: the good news is that the next workshop I give will be entirely revamped against a product that I can get you started on in one day. Assuming Windows Workflow 4.0 is solid and reflects what’s in the CTP, we have an amazing new product that will avoid the majority of the quirks in WF 3.5. It may be an order or magnitude easier to use. I’m especially excited about the workshops because we switch from “here’s all the weird stuff you need to know to get started with Workflow” to “let’s build out a couple of scenarios you can relate to.” Yippeee!!!!

That’s the good news

The bad news is that there will be no Windows Workflow workshop at the March DevConnections. For almost everyone, the best advice I can give you for WF 3.5 is don’t touch it. Microsoft isn’t going to tell you that, but I will. Unless you must deploy soon, and you can stomach an eventual full rewrite of your WF projects, skip .NET 3.5 and wait for 4.0. Microsoft is planning some interop strategies but my take is that this is not the time to make investments in .NET 3.5 if you can avoid them. It does not take me 6 hours to explain that and further exploration of 3.5 is a waste of time except for that very small segment that has to deploy soon. It doesn’t justify a workshop, and honestly I feel like I’m mucking horse stalls when working with WF 3.5 compared to the projection for WF 4.0.

We briefly considered a workshop on WF 4.0 using the CTP, and I will give a 75 minute session on WF 4.0. But if you’re going to invest your time and money in a workshop, it should be on a feature complete product that isn’t going to change before you have a chance to use it. That left us with the only option of skipping the workshop for the March DevConnections.

Unfortunately there was a clerical error and the workshop is advertised in the DevConnections brochure. I’m sorry for that.

I anticipate a Windows Workflow pre-conference in Las Vegas in the fall. My input will be to do the workshop there, even if we are on a beta if we believe we know what feature complete will look like. Assuming WF 4.0 is stable, it’s a very important product and you definitely want to learn about it as soon as possible. If you can make it to Orlando, don’t miss my 75 minute session on what’s coming in WF 4.0!


One of my favorite conferences is DevTeach. It’s low key with a bunch of great speakers with speakers coming because they want to see each other an attendees. While the schedule for the June conference is still in the planning stages, Jean-Rene’ who runs the show has put out a special deal for the June Vancouver conference . Last I heard DevTeach is dropping back to one show a year, so the next chance after the Vancouver show is late spring 2010. So, you might want to grab this great deal for the show. Note, its a limited time offer and only for the first 30 people that respond.


Save 50%  on the price of DevTeach / SQLTeach Vancouver (June 8-12,2009)!

DevTeach has created a secret rebate code that will give you 50% off the regular price of DevTeach/SQLTeach Vancouver (June 8-12, 2009). You will not find this code on the DevTeach or SQLTeach site. It has been given to only friends of the event.

Rebate Code: DEVT50OFFVAN