Monthly Archives: September 2010

Lighten Up

I got in the habit a few months ago of collecting unusual technology-related pictures.

It started out as an effort to collect images for presentations, but somehow it took on a life of its own.

Here are some of the best. Enjoy!

Dilbert cartoon about user interfaces and morons

Children's book with title: no, you can't be an astronaut

Continue reading

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

My Master Plan to Destroy the Internet as we know it

What’s the minimum amount of interface that you need to do the most work?

I’m not talking web interface. I’m talking interface period. Picture a black box. What kinds of buttons, lights, or displays would you need to do, say, 80% of the work you do online?

I think the answer is very surprising: not very much. In fact, I’d argue with a few buttons that double as lights, and a mostly-plain display, you can do much of whatever you do right now. No keyboard, no web browser, no flash, no iPad.

Another way to phrase this question: What are the limits of a universal Minimum Viable Product?

It’s a magic box. A box where you push a simple button to get a category of information you are interested in, not a specific set of information from a specific site. Interested in technology news? Push the technology news button. Up pops a list of technology news gather from, well, anywhere/ Where it comes from doesn’t matter. Strangest 500-pound gorilla in the room ever — we go to this branded sites and participate in sign-ups, voting, games, and other “sticky” and “engagement” activities not because we particularly like them, but because they use human psychology against us in an attempt to own an entire category of material.

Want to chat with your friends? Push a button and say something. It goes to your friends (or “followers” as Twitter calls them). Send a person a message? Click on their name and speak the message. Want to review your financial status? Push a button to see your net worth. Another one to track recent activity.

Want to know why most people use Google? It’s not because of the quality. Most people use Google because after thousands of searches, they’ve trained themselves to think of “search” and the Google logo. I know — I’ve been using Duck, Duck, Go for the last 2 weeks and it has been painful. It’s a better search engine, yet in my mind the Google branding that I’ve subjected myself to over the years still draws me back to Google.

This is stupid. It doesn’t matter where all this information comes from. You want to send a message to a friend, do you care if she updated her personal email on LinkedIn? Does it matter? You just want to send her a message. We live in a wonderful age of computers. Why are we getting so wrapped up in channels, walled-gardens, brands, and all sorts of implementation details that have nothing to do with what’s important in our lives?

Such a device is known as a “magic box”. My current working title is “magic brick”, since the goal is to make the thing as plain, unattractive, and simple as possible. You can see an early prototype reading tech news from several different sites in the video below if you like. I’m building it in F# on a .NET stack, but the idea is to run it on mono on a stand-alone device

Of course this kind of detachment from the inner workings of the web not only brings freedom, it also threatens millions of established business models. Why build a freemium service if nobody comes to see your engagement material, nobody “plays” your site enough to become a paying member? How can you sell advertising if nobody ever reads the ads?

I love saying this next phrase because it has such a mad scientist feel to it (picture Dr. Evil with his pinky in his mouth) This will destroy the internet as we know it!

I have no idea where this project would lead, but I know the underlying technology is sound, I have a working prototype, and I know exactly how it’s all going to come together. If you’d like to be a henchman or a minion, we’re now taking applications. We’re also looking for places to build our secret lair. A death ray would be awesome, but perhaps that’s a bit much for now.

Technology has become an amusement park you have to drive to and pay to get in, even if “paying” only means putting up with ads and branding, and not like the human-empowering super-tool it was supposed to be. Let’s fix that.

UPDATE: Nice darker look at the situation from my reading today

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

Agilholics Anonymous

I’m a mean-spirited, incompetent, untrained, bad-example-of-a-parent who’s only bigoted goal is to make a buck at the expense of hard-working experts by unfairly trashing their work. I’m the “Rush Lumbaugh” of the Agile movement.

If you listen to some of the comments I’ve gotten after running “Agile Ruined My Life“, that’s probably what you’d think. I deleted the worst and had to ban a couple of folks.

Gee, and the evening is still young!

Oh, I almost forgot the best one: I’m also a liar that made up all the negative feedback I get from folks trying to adopt agile, which was the reason for writing the article in the first place.

So let’s play a little Google game: What was the positive reactions from the developer community? What kinds of sympathy did I get from around the web? Were the reactions mostly positive or negative? For those skimming, I’ve added bold formatting to phrases with the most punch.

Continue reading

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

i do not exist

Stephen Hawking has convinced me I do not exist.

In his new book, Hawking omits all references to “God”, saying he’s not needed any more. He also takes some jabs at philosophy.

Well them be fighting words, Stephen.

I’ve been toying around lately with the idea of fundamentalist agnosticism — that there is no way we can know whether a concept called “God” exists or not, and we can never know. That this deep state of unknowing is a necessary condition for a balanced life.

As part of that, it also occurred to me that i do not exist.

Think about it: in the grand scheme of things i am but one person in billions, living for a flash of an instant on a fairly young rock that’s already hurdled billions of times around its star and will hurdle billions of more time. I might get to see a hundred of such voyages. This rock is most likely one of trillions of such rocks — each of them perhaps supporting billions of other beings.

i’m not trying to be morose, just looking at things objectively. A hundred years from now you’d be hard-pressed to find anybody who knew me. A thousand years from now anything that i might do will be eaten away by the sands of time. Even if i were the greatest person alive — even if I were the greatest person that ever lived — ten thousand years from now i am invisible. And i and not the greatest person that ever lived.

If i exist at all it’s only in the sense of a sub-atomic particle, winking into being for a minuscule instant and winking out again. A flickering speck of smoke.

Others, on the other hand, do exist. Mankind as a species is growing up, becoming something it was not before. Over time as we mix with machines to form an extremely long-lived, super-intelligent super-organism, we stand a chance at getting out, growing into new, unknown things. Becoming part of a universal community.

Everything we have and do now is created by others. Others will cure cancer, others will write great books, others build great cities, others make important observations. Other people — other beings — do and experience everything of importance.

Other people, in the general sense, are very real. i am not.

Philosophy should be left to old and ornery people like me, not given out to teenagers and unexperienced kids like candy. Why? Because philosophy is having a beer with a really smart person. When you’re young you tend to idolize them. You use philosophy as some sort of tool for finding out ultimate truths. You think of it in the same way as you do the other subjects you are studying. You think philosophy is going somewhere in a straight line, like physics or math. Ultimately you become very disappointed.

When you’re older, philosophy is like a suit of clothes: you don’t take it so seriously. You try on whatever seems to be comfortable and convenient at the time. Life is too short to go down in the weeds with all this bullshit, but it can still be lots of fun to kick around new deep concepts, or to take old ones and put them together to synthesize new ones.

Most philosophers had a handful of good ideas and spent the rest of their life taking those ideas too far. (i exclude Socrates from this because he obviously felt he didn’t know anything and that questions were more important than answers) Give a young person too much philosophy? You’ve either created somebody without any footing in reality or a sad, closed-minded cynic.

So yes, for all intents and purposes, i either do not exist at all, or exist in only the most microscopic of terms, virtually indistinguishable from nothingness. But I still own my choices, and from that comes joy.

Fundamentalist agnosticism, existentialism, anti-solipsism. It’s not “duty, honor, country“, but it’ll do for now.

Stephen Hawking’s new book begins “Philosophy is dead”, but Stephen is still smoking from that old cynical physicist’s crack pipe. Philosophy, like God before it, is not dead, it’s just getting started.

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

Signal-to-Nothing Ratio

Here’s a tidbit it took me a while to figure out.

Let’s say you write an article and post it on a few social sites. It becomes a very popular article, and thousands of people read it. A few people pointed out that you didn’t know what you were talking about. These people were obviously mistaken (grin). A few people somewhat agreed with you and added some of their own content. Finally a few people not only understood what you were saying and completely agreed, but took your thoughts to the next level. The distribution is like this.

I used to think that reading the responses to an article gave me some indication of how my writing was doing. If lots of people agreed, I had a good piece. If lots of people disagreed, then either I didn’t know what I was talking about or I was completely out of whack with most of the folks reading it thought. I thought comments were some sort of quasi-immediate feedback on the intellectual content of my writing.

This is because commenters themselves will gladly offer you their opinion of how correct you are. “Boy you really nailed that”, “You completely don’t understand X” , ” and “I think you’re correct in this part but missed these other parts” are common types of comments to receive. If folks are leaving comments on the veracity and perspicaciousness of your writing, it must mean that people want you to write true and insightful stuff, and that the depth of insight and intellectual power displayed in your article is of paramount importance.

Boy was I wrong!

Continue reading

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

Functional TDD: Codd is my Copilot

Let’s play a little game.

You work for the IRS. Your job today is to select a list of people with large bank balances so that you can do some kind of indescribably-complex tax-stuff to them. Your boss would like a list of these guys on his desk by noon.

SELECT FirstName, LastName, SSN FROM RICHGUYS WHERE Wealth > 250000

Now before you start in with the exceptions, this extremely tiny program provides business value. It’s something your customer is going to use over and over again. Over time, it is planned to become part of a larger program which chases down tax cheats overseas and posts their personal information on Facebook. This is just the first increment.

According to some, you shouldn’t write a lick of code without writing a test first. I think Bob Martin said to code without testing first is something a “caveman” would do. But how would you do that with a SELECT statement? I guess you could create some mock data, then run the select and test against the results, but that makes no sense. Plus if you test that way, you’re only testing the database engine at that point, not the code. In fact, the only thing to test here is whether or not you understood what the requirement is — is the data being returned and transformed the way the customer wanted or not? The only real test is a business test, not a programming test.

TDD doesn’t work with SQL. Most people develop this code by, well, just typing it in and running it, probably on a development copy of the database. Either it works or it doesn’t. Once it works, it works. You can move on to other stuff. The test and the business acceptance are really the same thing.

Ok, so perhaps simple SELECT statements are really silly to test. Let’s move up a notch in complexity. Over time, you build up a library of SELECT, UPDATE, and transform statements. None of them have a cursor and all of them are atomic transforms — data comes in one way and goes out another. Each of them do what they are supposed to do. None of them have been tested, at least not in the TDD sense.

A funny little secret comes into play here that is going to change programming forever.

Continue reading

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

Google Chrome and .NET – Almost, But Not Quite

I’ve been working on a browser for people who are easily-distracted. My theory is that most of html, instead of providing user value, is actually put in to drive “engagement” or “site stickiness”, which are just fancy words for me spending too much time doing things that serve little practical value, like clicking up or down voting buttons, playing a flash game, signing up for some subscription, or engaging in a conversation with somebody else who is wrong on the internet.

The working name is “Magic Brick”, and basically it works like one of those old-fashioned Star Trek tablets. Big lights, simple screen, plain text. Nothing else.

Over the last two weeks, however, I’ve realized that plain text has its limitations. You can’t put a table easily into plain text, for instance. As my oldest son pointed out, some articles center around a central picture — a infographic, an unusual photo, or a movie. While I could custom-code up all of that, it seemed like reinventing the wheel. Why not just create html that looks mostly like plain text and display it in a browser? That way if I just have to have 3-D models, I can easily send it out to the browser and let it handle it.

Ah so, but not so simple, grasshopper.

First up, IE is a huge pig. Love you Microsoft guys, but it has been time for a refactor/re-inventing of that code for a long, long time. I’m really not tying my project to something that is big, unwieldy, slow, and so far behind everybody else. It’s going to have to be the most HTML5 compliant browser I can find.

So I started googling around. Can I use Google Chrome as a browser control? I have some pretty good Google-Fu, but searching for this — embedding Chrome in a .NET winforms application — was like trying to find the body of Jimmy Hoffa (look it up kids). It just wasn’t happening. Google don’t want you putting Chrome in .NET apps. After all, that defeats their entire business model! They want us to be the Borg. They store all of our data, provide it on demand, and tell us what to do. The Queen Borg, as it were. If we had full creative capability over what to do what our browser we might start doing stupid and crazy things, like keeping our data locally, using the same algorithms they use but keeping our personal life to ourself, skipping ads, or telling ourselves what to do. All sorts of nonsense. Can’t have that.

But there was a ray of hope! Turns out Google created Chrome Frame, an Active-X control that sits inside of IE and basically turns it into some kind of it-came-from-hell hybrid of Chrome and IE. Part of the world domination plan, yes, but a part I can use.

So the new strategy — much as I didn’t like it — was to embed IE (webbrowser control) in a form, then use Chrome Frame to display the html.

That didn’t work.

Problem is, I’m using Microsoft’s cool new whiz-bang functional language, F#. So I’m doing all the cool functional stuff — immutable data, threading, asynchronous callbacks, currying and hurrying. IE don’t play nice in that world. IE’s threading model is STA, which, to make it short and sweet, means it doesn’t play ball with the big kids. It just kind of sits over on the sideline and whines a lot.

That sucks.

So no IE, no Chrome. But wait! Isn’t Chrome built on the open-source webkit engine? Perhaps I can use Chrome without really using Chrome.

Sure enough, I found a guy who is writing a C# wrapper around webkit. A few minutes of clicking and downloading, and I had a beautiful C# project on my desktop. A project which didn’t work, either.

Something about COM interfaces. For those of you who have not experienced the joys of COM programming, to get an idea of the pain involved just pinch your bottom lip real hard. Now pull your lip over your head.

Never fear! I am not giving up this easily. Programming is an odd mix of skills — it’s part chessmaster, part puzzlemaster, and part stubborn jackass.

As much as I’ve slammed Microsoft over the years, you have to hand it to .NET and the CLR, I honestly think it’s the best thing they’ve done in the last decade. I brought up the source code (in C#, not F#), then ran my f# project while it tried to use the control. A little bit of looking around and there — some new COM interfaces that the original programmer had not implemented. Pretty cool to program in one language and debug in another.

At first, I just commented out everything that broke. Open source is awesome! Having problems? Find the offending lines and comment them out. Suddenly no more problems! Function failing and needs to return a string? Make it the return value “weasel”. I’m sure some code somewhere will know what to do with it.

So after commenting out about five errors, the control ran well. Only it didn’t do anything except display an empty box. In the business this is technically known as “sub-optimal performance”

But there’s a method to the madness. By doing my hacking exercise, I realized that the scope of the problem is around 5 methods. This allowed me to make the decision whether or not to actually fix the problem or continue searching for answers. I decided to fix the problem.

A couple hours later, and voila, webkit running as a threaded control inside a F# project. All the html5 goodness I could want.

But it gets better. With the initial wrapper code in place, I could easily start getting the nightly builds of webkit and just updating the wrapper code in my project. As such, I’d always have the latest html5 deployment, even ahead of Google Chrome.

But that’s heading down another road entirely, and for the easily-distracted, probably worth putting off until another day.

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

Agile Metrics You’re Not Supposed to See

Now that I’ve ticked off half the agile community, let’s be fair. I should offer something back. You guys can trash this, copy it, or ignore it, whatever works for you. Just don’t say I never gave you anything.

Let me count the ways metrics have been presented to agile teams.

  • Agile Metrics don’t exist – Metrics are for waterfall teams
  • Nothing to see here, please move along. – Metrics for agile teams is just like metrics for regular teams
  • They’re like regular metrics, only cuter – Look! We use colored pens!
  • What we really need is an agile checklist – We need to know if people are doing agile the way they’re supposed to be doing agile. If so, there won’t be other problems
  • It’s all in there – Existing agile artifacts give you everything you need

Let’s cut the crap. The only metrics I really care about is: is the team worth the money they are getting paid? Do things get delivered in a way that the customer is ecstatic about? Is the team happy and productive?

I can make the obvious statement that if you’re worried about something, you should track it — at least until you’re not worried about it any more. But I’m not going to do that.

Or I can give you another platitude: you can’t manage what you don’t measure, you can’t measure what you don’t define, and you can’t define something without a common vocabulary and grammar.

But I won’t do that either.

Instead of defects-per-hogshead, or man-hours-per-story-point, let’s get down to brass tacks. Let’s make it personal. What do I use to measure teams? Certainly when working with a dozen teams or more I have to have some kind of insight into what’s going on. Something I can share with others. Some way of telling if I’m doing a good job, what the real problems are.

Well, what is it?

I’m about to show you two metrics. One is mostly useless. The second is terribly vague and confusing. Put together they do a pretty job of nailing down how to keep an eye on the agility of several teams at once. And most folks don’t want to see them.

Continue reading

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

Agile Ruined My Life

I read the reply to my comment on a popular hacker board with sadness:

(disclaimer: Agile consultants ruined the software group I work in.)

Making good software is hard, and anyone claiming to have a magical process that guarantees good software is selling snake oil. I can appreciate your wanting to make a buck, but would also seriously appreciate it if you could find some other industry besides software development to go screw up

Reminded me of an email I received back in May:

[We] started working on [agile technique X] when [author]‘s [famous book] was just a draft. I was on that project and worked on Agile Projects for a decade. (Next time you meet [famous guy], ask about me, I just finished reviewing his forthcoming [another famous book]). I am a founding member of the Agile Society of [place] and have organized conferences on Agile. I’ve attended XP Conf as well. I’ve probably worked in more agile projects than you ever have (not that it particularly matters). So let us first dispense with the notion that your notion of what constitutes “true” agile and its scamsters is somehow the only standard….

Do you deny that the whole Scrum Master idea is a scam within the Agile Camp?

Scamster? Ron Jeffries the guru/founder of Agile couldn’t write a Sudoku implementation with his favorite technique “TDD” and refactoring over five weeks. Fraud.

Robert Martin (another “guru” and agile consultant) claims that any code not written with TDD is “stone age ” code including such things as Unix and such people as Norvig and Linus and Zawinski who’ve built more code than he can dream of. Dalke poked holes in his TDD “kata” which never got answered Fraud.

I could go on and on. And these are the gurus. But that isn’t the point. i *saw* “agile consultants” evolve from some naive but well meaning people (like Kent) to scamsters like X and co and tose are just at the top. Practically every single “Scrum MAster” is a fraud. The more intelligent among them admit that two days of listening to a higher level shyster teach nothing and it is just a signal to dumb managers to improve their chances of getting a project. Yet they go along. That in my eyes is a scam like chiroproctors or reiki people claiming to be doctors. Agile was amovement founded by scamsters and propagated mostly by scamsters.

I’ve had many such conversations over the years.There are some seriously pissed off people about Agile out there. Why? Isn’t agile supposed to be warmth, apple pie, motherhood, goodness and all of that? Why so much anger?

Continue reading

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

Structuring Larger F# Functional Projects

Everybody that’s interested in F# has played around with some code, and it’s amazing how much stuff you can put into a small space with the language, but at some point, you’re probably going to get into a situation where you have more than one source file, yet you’d still like to stay functional.

So here’s a suggested structure outline for those larger functional projects

Continue reading

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.