spout

December 20, 2002 spout

Keep On Cookin’

I got a very nice email today from Ross Lambert:

I’m a new fan of yours, both in terms of your technical abilities and the down-home honesty of your columns in The Spout. I loved Of Eggs and Omelets’, mostly because I could identify with it. My own career has been littered with a lot of broken eggs. I ran my own little software company for nearly 10 years, writing and selling developer libraries for Macintosh developers. Needless to say, the ups and downs of that market were fairly impossible to survive.

So now I am enjoying the Dark Side, as Mac folks would say. I’m a total  .NET-head, hence my fairly recent acquaintance with your work.

Anyway, all that to say Don’t let the turkeys get you down.’ I was a pretty decent marketer; I still write ad copy for different folks from time to time. It was the only way I could manage to survive as long as I did. For what it is worth, I think your approach is innovative and fun. A few anal people will object (it sounds like they already have), but I’ve come to the conclusion that about 2% of the population actually enjoys being uptight and offering angry complaints. You’ll never make those folks happy, and it is just as well to give them a reason to bail out early in the game.”

Thanks for that, Ross. While Of Eggs and Omelets speaks of breaking eggs as metaphor for the negative feedback I’ve gotten from my recent series of marketing-related emails, in truth only a tiny fraction of folks complained. In fact, almost 10% of my newsletter subscribers responded to my inquires in some positive way, which is about 50x the number of people that had something negative to say. According to the marketing guy, getting a 10% response was about 3x what he was hoping for (although he didn’t tell me his expectations until *after* the results were in… : ). Even more telling was the large number of people that actually thanked us for asking. Apparently expressing interest in their wants and needs was unique for a surprising number of people. Further, the shear number of people interested in the various ideas we proposed (like the .NET War College and the WinForms PhoneCon) was only overshadowed by the number of people with good ideas that we didn’t even think of (which is what lead to Ask The Wonk).

So, while I may have broken some eggs, and every one of those emails physically pained me (how do spammers do it?!?), Ross and tons of others have encouraged me to keep on making my omelet.

Discuss

December 10, 2002 spout

Of Eggs and Omelets

My life has been one long series of experiments. I tried to be a know-it-all jerk in high school and found that this tended to cut into my social life (drastically), so I stopped (or am still stopping, depending on how well you know me : ). I tried to be a ground floor” employee for a small company, but that stopped being fun when the repetition and bureaucracy hit and it became clear that any profits that might someday happen would be kept at the owner level. I tried being an employee for a large company, but when my projects started getting axed based on political winds that, as a low-level grunt, I had no control over, I went looking elsewhere. Then I found DevelopMentor. The combination of working on lots of different things with lots of smart people was something that I loved more than anything I’ve since found.

But even that didn’t stop my experimentation. After teaching and consulting for a while, I decided that instead of just talking about building software, that I would take one of my ideas and build a software development team. There I worked to build the best software development team that I’ve ever had the pleasure to work with and a learned a *ton* along the way. However, the fact that the product itself was a commercial failure didn’t make for lasting employment.

So, late last year, I started another whole series of experiments, this time aimed at making myself solvent as an independent in a down economy. I’ve been doing all kinds of crazy things to see if I could use them to help build my brand, my business and my customer base. Some of them have been critically acclaimed and a few have even been commercially viable, at least to the point that I can continue to pay my mortgage (many of my friends weren’t so lucky). I have been successful in that I’ve gotten to do a lot of cool things and work with a lot of smart people.

However, what I’ve found is that to remain independent, I have to spend a lot more time doing promotion and marketing, which goes against every fiber in my being. The problem is, although I’ve experimented a bunch, especially as related to this year’s DevCons, I don’t have any natural marketing aptitude and I don’t know where to turn for help. So, I fall back on my old standby — experimentation.

Over several years, I’ve experimented with several sales/marketing/PR folks and organizations and so far, haven’t found what I’m looking for as far as mentors” go (to be fair, my standard for comparison includes Don Box, Tim Ewald and John Robbins, so I’m not surprised I haven’t found someone to meet that bar). Even if I did meet that person, or may have already met him/her, I don’t know that I’d recognize it. I just have no standard for comparison. With software, it either works or it doesn’t. With marketing, did it succeed or fail because of the quality of the product or the quality of the marketing? The whole thing is too damn squishy and it drives me nuts!

My most recent set of experiments is to let a friend of mine, a long-time marketing guy that I’ve known for years, run rough-shod over my newsletter subscribers, asking them all kinds of questions and for their help in various ways, offering my money and my time as incentives. Will it work? I have no idea. Is it risky? You bet. I’ve lost a dozen or more subscribers and who knows what some people think of me now that I’ve let marketing ideas into what I do (and I’d like to apologize again to the folks that I drove away or offended in this most recent campaign). Is it worth the risk? Yes it is, but not for the promised return (I still think my marketing friend was on happy pills the day he quoted his marketing targets). What makes it worth the risk is that I’ve identified a weakness in myself and I’m willing to perform the experiment and make the mistakes to see if I can come out better on the other side. Even if I fail, I’ve learned something. Eventually, I’ll get that omelet made, no matter how many eggs need breaking.

And to those of you who suffer with me through my experiments, thank you very much. You have no idea how much you mean to me.

Discuss

November 27, 2002 spout

My Coding Standards

Wednesday, November 27, 2002

Sometimes it’s like I’m a war veteran in my head. I’ll be going along, minding my own business, when *bang*! out of nowhere, a flashback from my days as the director of a software organization hits me right between the eyes. When it happened today, I thought it would be therapeutic to talk about it instead of trying to bury it when these episodes” intruded on my normal life.

The nice thing about setting up your own software organization is that you get to set your own rules, and this time do it right.” I had always planned on getting my engineers together one day and coming up with a common coding standards document, just like every software organization had, but in the interim, we started with this one:

  1. All code will use spaces instead of tabs.
  2. All new code in an existing file will match the existing style.

Rule #1 nicely handles the case where different editors expand tabs to different spaces, causing code that was easy to read when it was written to go all crazy. Rule #2 says not to waste time reformatting existing code into your own style, but to mimic the coding style that was used by the original author. Rule #2 had the unexpected side effect of helping developers get into each others’ heads, which helped transfer knowledge between us. I personally learned a bunch of cool tricks by fixing bugs in files in the style of the original author.

After a few attempts at adding other, more traditional rules to this short list, like where the braces go and how to name variables, we couldn’t find anything that was worth ruining the simplicity of our two-rule coding standards with, so that’s what I’ve used ever since. One other benefit of this simple set of coding standards was that it left us all kinds of time to debate the merits of various text editors, which is an argument that won’t be solved until just after the Christianity vs. Judaism debate is ended…

Discuss

November 11, 2002 spout

Hierarchy Doesn’t Scale

Sun, November 11, 2002

I was just chatting with a friend of mine and he said that he really wanted to write a namespace extension so that he could expose a hierarchy of data in the shell. Back when namespace extensions were introduced with Win95, I thought that everything could be integrated into the shell, making the shell the last application. Sometime in the last seven years, I’ve come to hate that idea. As a hardcore computer geek, I’ve embraced the hierarchy organizational styles in three major applications:

  1. Email folders (I keep things filed in a multi-level hierarchy and use my Inbox as a to do list)
  2. The file system (I keep things filed in a multi-level hierarchy and use my Desktop as a to do list)
  3. Free-form outline program (I keep things filed in a multi-level hierarchy and use a file called todo.txt as a to do list)

As anal as I am about arranging and categorizing things into their various hierarchies (and as many places as I’ve spread my to do list to, apparently), the hierarchy only helps me about 50% of the time. I spend just as much time searching for things as I do going right to where it should” be.

The hierarchy used to be lots more helpful, but as the data I keep around grows over the years, it becomes less and less possible to remember where something really belongs” and to find it there. In fact, I’ve come to believe that a hierarchy is a terrible way to keep data organized at all. A hierarchy is really just a way to associate key words (called folder” names) with hunks of data (called files”) and then only showing them in a very limited way. Searching is a possibility, but it either takes a long time (because file indexing is turned off) or it misses files (because file indexing is turned on —  what’s with that, anyway?). Searching creates an ad hoc logical folder, but there’s no way in the shell to create a permanent logical folder with custom content.

The basic hierarchy structure is easy to understand, but things become much more powerful if I can keep one hunk of data in multiple locations. Some versions of the Windows file system support this , but the shell doesn’t (although it can be simulated with shortcuts). Also, the same kind of pivot table” capability that Excel provides, mixed with a much faster, more flexibly searching capability of a database, is much closer to what I’m after. Hopefully Longhorn will provide something like this.

Also, being able to search all three of my hierarchical  data sources at the same time would be pretty damn useful, but one thing at a time…

Discuss

October 26, 2002 spout

A Giant Sucking Sound

Sat, October 26, 2002

While I’m in favor of NAFTA, and free trade over all, it’s certainly not helping US workers. Instead, it favors US corporations as they made use of cheaper labor. Of course, it’s the corporations that also seem to make out on these deals, doesn’t it? Similarly, the other giant sucking sound” I’ve heard lately are my friends moving to Redmond to work for Microsoft. MS is using the recession to cherry pick the best and the brightest in the industry. I can think of almost ten people I know personally that have gone to Microsoft in the last six months. And these aren’t folks that were laid off and had to go, either (even though everyone but Microsoft is laying off). These are good folks that had good jobs, either as employees or as independents. One even owned half of what was my favorite company in the whole world! So why are they doing it? Why are they giving up their old lives to work at MS, often moving to Redmond in the process?

I think they’re going for a variety of reasons. One is definitely the safe harbor aspect. As an independent in the current economy, I have to work my butt off to attract funding using self-promotion techniques that I didn’t have to use during the Internet boom. I’m successful and I love the work and the life, but it’s still a lot of work that I know others are not willing to do. Another reason related to the really hard work” problem is that Microsoft, for the caliber of my friends, is allowed to offer what used to be a laughable salary, but is now looking pretty good against what’s generally available. If you can get 75% of what you used to make as an independent, great benefits and stock options that may do something someday, that’s pretty compelling. And the stock price is pretty attractive right now. It’s my belief that, as a government-sponsored monopoly, Microsoft is fundamentally sound, and the stock price is artificially low. If you were going to go to Microsoft any time in the last five years, now is the time. The stock is only going to go up.

But the big reason that makes people go, and this is the one that might tip me some day, is the raw, visceral experience. For better or worse, Microsoft is the mother ship from which everything we know now has sprung. And they’re still setting the tone. I know I dream of moving to Redmond to work on the next technology that’s going to kick ass in 2-3 years, like Don and Martin and Yasser did. I’d also love to live where I am now, commuting to Redmond a week/month to work with developer education, focusing on research and writing, like Tim did. Sometimes I want to just chuck the extra effort it takes to stay outside,” throw up my hands and let the assimilation process begin.

So, why haven’t I thrown in the towel? I’m waiting. I’m waiting for the perfect balance of quality of life where I get to spend every day doing exactly what I want, working with a team on a long-term project that I really believe in, but without the politics or the management responsibilities that I deplore and without giving up my family or dropping significantly in income. Right now I’ve got that all nailed except for the team and the long-term project, so I’ve got it damn good, but I’m still looking. Who knows? Maybe I’ll get caught in the mass geek migration to Redmond some day, but not yet…

October 17, 2002 spout

Type Safety in a Loosely Coupled World

Tim Ewald gave a very rousing keynote address at the WinDev conference in Boston yesterday. During his talk, he did something I’ve never really heard anyone do convincingly before — he defended the typeless recordset/rowset/dataset style of programming. His justification was that you don’t always need type-safe object models and, when getting a subset of data, they’re often more trouble than they’re worth (do you really want a set of types for every query in your app?).

My standard objection to the just the data, ma’am” style of programming is that I don’t get compile-time type checking. Of course, I can write the code to check all the data I get at runtime, but I don’t like to do that. Instead, I like things like the type safe dataset generator built into VS.NET. However, that damn tool fooled me. I looked at those type safe wrappers and considered that compile-time type checking. Of course, it’s not. Instead, it’s a hunk of code that pretends to offer compile-time type checking, but only really offers run-time type checking, because the data still needs to be coerced at *runtime*.

I have always turned up my nose at run-time type checking until I realized (and this is the insight I got from Tim’s talk) that *all* marshaling-based type checking is done at run-time. Even the type-checking done in COM between apartments needs to coerce the data to and from a serialized format, which means that it’s possible for the data to be mismatched between two endpoints, causing a type exception at runtime. Since I’m not willing to give up the loose coupling involved with components talking to each other across apartment/thread/process/machine/context/appdomain/whatever boundaries, I need to accept the fact that type checking needs to happen at run-time as well as at compile-time. As far as type checking is concerned, unmarshaling an RPC call stack is really no different than coercing/converting dataset columns or applying an XSD to an XML document.

Once I’ve accepted run-time type checking, I can take Don’s advice to free your mind” (he’s moved on to other parts of The Matrix not involving medication) and embrace things like structural typing, which is much more flexible than the nominal typing that OO languages rely on. I told you that nobody makes it the first time,” Don, but I think I’ve finally made it across. : )

October 2, 2002 spout

The Fallout Begins

Two months ago, I noted a fall in morale in the IT industry amongst my friends and colleagues. I wondered whether the best people in the industry who’d been fighting for a sane development process, but living without it because people were handing out cars as signing bonuses, would rather not work in another industry when the cars were no longer available and the fight for what was right didn’t seem to make as much difference any more. Yesterday, one of the people that I’d put into the right up there” category, Justin Rudd, announced his intention to pack it in and go back to school to be a doctor.

This kind of thing shakes my own faith. Should I continue to bust my hump on the latest and greatest technologies or ditch it all and start that novel I’ve got in the back of my head? I still really love doing the former, but it seems that everyone has to work a lot harder for a lot less these days. Maybe I just need to readjust my thinking, but damn, being smack dab in the middle of an economic boom really does a number on you! I feel like the guy who found a silver mine in the middle of the gold rush. I don’t have any trouble feeding my family and it’s not fool’s gold, but I still pine for those deep, yellow nuggets…

September 13, 2002 spout

Never Send An Email In Anger

Never Send An Email In Anger

I learned how to write good emails at the foot of the master — Don Box. Whenever we’d decide we wanted something, he’d grab his computer and say, Let’s write the email” and it would be done.

One of the most important things that I’ve ever learned about high-tech communications is to never, ever write an email in anger. Or, to be more precise, never *send* an email in anger. I encourage you to actually write it. It always makes me feel better. But don’t address it, because you want that email to first end up in your Drafts folder and go from there to your Deleted folder. If you address it and mean to press Ctrl+S to Save but manage to press Alt+S to Send by mistake, you might well be looking for work in another industry. If you don’t address it, however, Outlook complains and you can breathe a sigh of relief. Frankly, I wish there was an add-in that protected me even if I ignore my own advice:

Of course, this spouting could only occurred after I’ve violated my own advise, as I’ve often done over the years, always to my determent. When you’re angry, all you care about is making sure that your anger comes through. If I give myself an hour or two to think on it, when I come back to read that angry email, it always makes me flinch. Writing an email once I’m done being angry always yields the nicest, most thoughtful emails that I can write. Those I find to be *much* more effective.