Older blog entries for apenwarr (starting at number 162)

Making banking fun, round 1

It turns out that other than so-called "business logic," there isn't much to business software. It's all the same stuff: a database connection, forms, fields, buttons, some daily/weekly/monthly batch operations, and the dreaded Reports.

Over and over again.

What's interesting - and interesting is the first step on our way to fun - is the process of converting fluffy human requirements into usable software. Many programmers doing business software aren't quite up to the level of programmers doing other kinds of software, but also interestingly, you don't get a lot of cross pollination between groups. Things just start getting done a particular way, and they keep getting done that way, and nobody really thinks twice until and you get these funny "programmer cliques" that believe totally different things and don't really talk to each other. You know, the Oracle types don't have much respect for the MySQL types, and vice versa, and they'll never resolve their differences because, well, they don't really care enough to bother.

Now I've gone and switched cliques - from operating systems to financial software, of all things - and what I learned is that both groups have plenty they can learn from the others.

One thing I learned is that there's a huge, tangible, visible difference between a company that understands business (and software is secondary) and a company that understands software (and business is secondary). Software companies do an awful lot of silly things that just don't make basic business sense. I don't mean any particular company here - they're almost all pretty clueless. Me too, for now. But it can be tough not to be clueless when you don't even know what clueless is, and worse, you've isolated yourself from the people who do know.

Now turn it around. People with business sense tend to be profitable, which is a good start. But they don't know that much about advanced software development, and silly things happen and time gets wasted, and they don't know that those things are totally avoidable. The smart ones, though, are willing to learn. Great software is an amplifier for a great business model, and the two put together is how you can get a really great company. This is straight out of Good to Great, of course. Go figure.

Bankers are literate!

All this is tangentially related to another amazing discovery I made recently, which is that banking-type people are actually much more compatible with programmers than I thought. You would normally not expect this, since banking-type people (kind of an extreme form of accounting-type people) are in many surface ways different from programmers: less energetic, less liberal, less creative, and often less smelly.

But one thing we have in common - and this is a critical thing when you're trying to work together - is that both bankers and programmers are literate.

"Literate" is the word I use to describe the sort of person who processes text efficiently. I hold literacy to a higher standard than, say, the people that tell me 97% of Canadians are literate. Maybe so, but I'm sorry, hardware engineers can't spell. That goes for assembly language programmers too, and I'm grossly overgeneralizing, but my generalization goes almost exactly opposite for good high-level language programmers.

Maybe you noticed the trend too, and thought it was just a coincidence. But it's not.

By my extended definition, many "illiterate" people can read and write... but they'd rather not. It's a last resort. Illiterate people would rather have meetings and "facetime" and phone calls. They also prefer diagrams over long-winded explanations. There's nothing really wrong with "illiterate" people, I suppose - let's call them "visually oriented" or "spacially oriented" people instead, and it suddenly sounds better.

Illiterate people are hard for literate people to get along with. They don't understand why programmers like to have long email flamewars to resolve their problems. They don't see the point of developing documents collaboratively in a wiki. They prefer shorter and more abstract, not longer and more detailed. They can't skim. They can't search. They don't understand irc. Being the vast majority of the population, they agree in these respects with almost everyone, and so they assume the literates are just doing things wrong and our methods are somehow horribly inefficient: "Geez, it must have taken you all morning to type that up! Why didn't you just have a meeting?"

...Illiterates are frequently slow typists.

But bankers are literate. Of course they are - they have to be. Their whole profession is about spending long hours avoiding people, working with long, complicated legal documents, writing things down so they don't get forgotten or misquoted, and checking long columns of numbers, making sure nothing gets lost, because one mistake messes up the whole thing. Hmm. Avoiding people, complicated documents, concentrating, columns of confusing numbers, one tiny mistake screws everything up. Does that sound like anyone you know?

Programmers are totally capable of dealing with this sort of people, but they let differences of external style - mostly the conservatism, I suppose - stand in their way. But little things like that are less important to collaboration than the fundamental communication channel. If you can talk to people effectively, you can deal with them. Or so I claim.

Hmm, have you ever seen an accountant using a wiki?

Smallness, responsiveness, feedback

One thing I've discovered about myself over the years is that I prefer driving small, responsive cars with clear feedback over big, fancy cars that try to isolate you from the real world.

I like small cars because they fit in places where big cars won't. I try not to have a lot of luggage, so that doesn't bother me. But going where other people can't go is valuable in itself: supply and demand. Okay, yes, people with Land Rovers can also go places where my Pontiac Pursuit with Pulsating Performance can't, but statistically speaking, more people want to pay me to park downtown than to go driving through swamps. You know. Statistically speaking.

I like responsive cars because I'm short-term indecisive and my sense of direction is complete crap. I'm always impressed by people who actually know where they're going and how to get there, but I'm not one of them. So sometimes I need to change my mind and turn a corner I wasn't planning to turn. And sometimes I need to make a U-turn. And sometimes I need to stop or start quickly because the person in front of me or behind me was even less decisive than I am. Responsiveness is good when you need to deal with surprises, and perhaps out of necessity, my specialty is dealing with surprises.

Feedback is a more interesting question that a lot of people don't even think about: in fact, they almost think of feedback as a negative. The most expensive cars are the ones that make you feel like the outside world doesn't impact your driving. That is, they're soundproofed so you can't hear outside; the steering wheel never resists your turning; they have cruise control so you set-and-forget the speed; they have anti-lock brakes and fancy auto-traction control to prevent skidding when you stop or turn. The idea here is that you should be able to concentrate on setting the speed and course - the strategy - while the "system" handles the rest of the details for you.

Well, I don't trust the system. Maybe it's because I'm an programmer and I know better than to trust programs, or maybe I'm just paranoid. But luxury cars like that drive me crazy. When I drive one downtown, I often open the window a crack, defeating the expensive sound isolation, so I can hear the street noise, like someone yelling or tires screeching. I like steering feedback, because they let you feel whether you're turning too fast, mostly eliminating the need for traction control on turns, and anti-lock brakes actually make braking distance worse on dirt roads. There's no substitute for just driving carefully, and isolating yourself from the real world discourages that. If all you have to do is set the speed and course, what's to stop you from setting a just slightly faster speed and a just slightly bumpier course?

In a company, the equivalent is the executive who isolates himself in the corner office and reads reports all day rather than visiting the front lines. I can't stand to do that - and if you're an executive, it's not even your fault, people try to set you up that way. People will see it as their job to make problems go away between the front lines and you; after all, if they can't deal with these little problems, why did you hire them in the first place?

That's absolutely true, of course. But it's also true that if you as an executive never see the problems, you'll set stupid strategies that arbitrarily increase the problems for no reason. You'll take the bumpy dirt road instead of the superhighway, but you'll try to drive 120 km/h anyway, because what's the difference? The bumpy road is a more direct route than the superhighway, and the speed is just a dial that always seems to work fine, and it all looks the same from in here.

Company Size

Okay, so how does this relate to my preferred company style, then? Well, I prefer small and responsive companies and teams to big and stable ones. Small companies can afford to do projects that big companies can't justify. And the way you run your company - my way is controlled instability - can make your company more responsive than others, so when you make the inevitable mistakes, you can recover.

I'm interested in ways of making stable companies more responsive without making them unstable. I'm not sure you can easily make big companies small, but it's easy to start a new small company anyway. As for isolation vs. feedback, well, just try to isolate yourself from a customer when your whole team is only five people. It forces you to do a great job, or you'll die of exhaustion.

Code Size

And while we're here, I can tie all this directly back to programming, as usual: small, concise code vs. big, unwieldy code has exactly the same characteristics as cars and companies.

Big, ultrastable, isolationist companies, like typical big banks, program in Java and use UML and huge specs and "Software Engineering" and five-year plans and code monkeys. I'm not a fan of that whole development style, but I'll tell you one thing for sure: it works just fine for them. Check out one or two of their balance sheets and tell me I'm wrong.

But big code is hard to change, so you have to plan it in advance. The isolationist executives at giant, stable companies get very good at this, and the stability of such a company is totally compatible with this, which is why it works. But in a small, responsive company, you need small, responsive code. And sufficiently smart people can do the same code in a smaller, faster, more responsive way, allowing them - and thus, the program itself - to respond more quickly to feedback.

That's my kind of team, my kind of company, and my kind of code. I got the car. Now I'll have to work on the rest :)

6 Oct 2006 (updated 6 Oct 2006 at 13:20 UTC) »
Conservation of Life Force

dwiseman mentioned that some people are polite and civilized, but because of the way they act, may be unknowingly "extracting positive life force from those who will let them."

I think that's an interesting way to look at things. Many years ago when I was first starting NITI, someone I know referred to such people as "hangers-on" and warned me to avoid them - the people who are friendly and supportive, but don't really add anything to what you're doing. They just want to be pulled along with your momentum.

There are lots of people like that. The question is really: do you really have a limited amount of positive energy to share? Does sharing it with someone really mean you have less of it left over? If someone can be happier because they can bask in the warm glow left by other people around them, is that a problem?

I decided it's not a problem for me. People who get in my way - they're a problem. People who just play along and enjoy the show - at worst, they can be safely ignored.

But if you let them get to you - if you start to feel like these harmless people are "stealing" energy from you - that's when you start to lose your energy. But it's not them, it's the way you think about them, and thinking that way is what demotivates you. The good news is the way you think is in your control, not theirs.

I think of it this way instead: how can making someone else's life better possibly be a bad thing?

(Must... resist... urge... to compare... life energy... to MP3s...)

RSS Housekeeping

To appease the whiners I have updated my copy of NITLog to produce valid RSS 2.0, including If-Modified-Since and a GUID field. That was interesting: I've never implemented If-Modified-Since in a script before. The auto-title-sucking algorithm has also changed again to rip all the subtitles, not just the first one. I hope that doesn't confuse your RSS reader too much.

Cat is the anti-gap

My new car has an mp3 player that is very nearly not stupid, but fails to even remotely attempt any sort of gapless playback. This is fine for most things, but really, really annoying for CDs that have a continuous mix format.

Well, after reading various long-winded tirades about how incredibly difficult it is to make mp3 players gapless, hardware limitations, blah blah, I solved my problem by simply concatenating most of my Tiesto collection together (one album per file, of course) and writing a new CD. Of course, when I ripped the CDs in question in the first place, I used LAME's nogap option, or it wouldn't have been quite right.

The bonus is that I can now seek from one album to another rather rapidly. It's a good thing I have absolutely no desire to seek to specific tracks, since that totally defeats the point anyway.

So, advanced audio enhancement technology or ancient 1970's Unix? You decide!

BarCampWaterloo, this Friday

Okay, it's official. I will be attending the official trial edition of BarCampWaterloo this Friday, September 29, from 2pm to 7pm. If I get a timeslot, I guess I'll probably do a presentation about either GourD or Schedulator.

The conference seems a little funny, but it should be interesting. Note that "bar" refers to "foo", not alcohol.

26 Sep 2006 (updated 26 Sep 2006 at 00:02 UTC) »
Delirium 2: Imbalance

Imagine you're in a speedboat testing an experimental new engine with 5x the propulsive power of any engine that came before. Moreover, the lead engineer for the new engine, who is also an expert technician, is there in the boat right next to you, excited, tuning the engine as it runs. "Egads!" he exclaims. "I just found a way to double the power one more time! This thing is really going to go now!"

Impressed, and listening to the scream of his supercharged nuclear turbine as it spins at full speed, you yell out the only obvious question: "So why aren't we moving?"

The engineer, an expert at engines but not much at boating, looks around in dismay. "I guess... it's still not good enough." He turns back to his engine with a determined look on his face. "We just need more power!"

Hours pass. The engine roars louder and louder. The churn beind your still-stationary boat is getting out of control. The engineer, apparently rather motivated, has doubled, tripled, quintupled the power. By now a crowd has gathered around the dock to watch. They all agree that this engine is the most powerful one they've ever seen at this size and weight - by a long shot. Your friend the engineer has discovered at least two new laws of thermodynamics right there on the spot, and people are sneaking up behind him with honourary PhD's. But still - the boat's not moving.

Suddenly a thought occurs to you. "Hey, are we still tied to the dock?" you yell. It's hard to hear you over the wailing engine, but he stops, looks at you, and then turns in the direction you're looking, to see the lines still holding the boat in place. Then he slowly sits back, stunned and silent. He throttles back the engine, and the world gets a bit quieter. You look at your audience, still there watching from the dock. "Why didn't someone say something?" you ask.

"We thought you knew," someone shrugs, not meeting your eyes.


By now the sun is already setting in the evening sky, but it's not too late. You unlash the boat from the dock. "Let's do it," you say quietly, and take the steering wheel. The two of you begin to edge away from land at last.

But before the engine his even 10% throttle, it's already threatening to flip the boat. "It's too fast!" you exclaim. "I can't steer! Slow down!"

Your friend looks back at you, then looks away and begins to throttle back to a normal speed. "What's the point then?" he asks.

"I think we'll need a better boat, and we'll have to find a better driver. An engine this good must be useful... this boat just can't handle it. But the engine is way too good to waste!"

"You don't understand," he replies. "This engine was tuned for this boat. The concepts can all be generalized, but it's going to be a huge amount of work... I guess this particular engine is never going anywhere."

The two of you make your way back to shore. The engineer, looking exhausted and frustrated, gets out and starts to walk away. "That's it. I'm too tired. I'm done here."

"That's it?" you ask. "What about the engine?"

"You can keep it," he says. "I left my notes. If you can make it run half as well as it did today, it'll probably make you rich."

Just don't tie it down.


It's such an odd problem - if all you have is a hammer, everything looks like a nail. If all you have is duct tape, everything looks like a duct. If all you have is an engineering team, every problem looks like an engineering problem. After all, it... has to be. How can we deal with it otherwise?

You know, if we had kept that engineer working long and hard enough, eventually he might have fixed his problem using pure power. Maybe he would have snapped the lines, or torn the dock right off the shore. But the results would still have been out of control, out of proportion, and even more disastrous and disappointing in the end.

Even though this is a sad story though, the point I'm trying to bring up is actually a happy one.

A great "engine" got built, based on new "technology" and "laws of thermodynamics" that we discovered out of necessity. The bad news is that the engine was unnecessary - a merely passable one would have worked just as well, if what you want is a really fast boat. But the innovations themselves were still useful and can be reapplied elsewhere, on a new boat equipped to withstand that kind of propulsion. Someone just has to build the boat.

Those innovations would never have been made at all if it weren't for the original grotesque error in judgement. The engineer will keep those innovations - along with a determination never to make that same mistake - with him, ready to be applied when needed, for the rest of his life.

And if you were in the boat along with him, or even just in the crowd watching, maybe you learned something too.

Delirium 1: The Genius of Obsession

My friends dmg and apm recently lent me a book called The Soul of a New Machine, by Tracy Kidder. It's a work of long form, non-fictional journalism that describes the process of designing a new minicomputer at Data General around 1980. It's much more about the people and their social issues than about the computer itself.

What an interesting book to recommend to me right now. I certainly recognize the story: team of 30 or so crazy people in larger company isolate themselves, gel as a team, build impossible product on crazy timeline, live through pressure, team reorgs, smart and stupid managers, and have way too little real life experience. Product gets completed (a bit late, of course), team leader moves on, and team essentially disintegrates and carries its experience elsewhere, person by person, while parent company lives on, continuing to sell the resulting product and ones based on it. I guess we can be proud - we held together the culture longer than they did.

But the things that really struck me about the story weren't so much the similarities as the differences. They did a few things "right" in that story - for some definition of "right" - that I never quite managed. Their team lead, Tom West, managed to bring out of everyone on his team something that I've only ever managed to bring out in myself personally - total obsession with the end goal.

And obsession, as I learned for sure in the last few months of not being obsessed, is where it's at. Obsession is the only way to really get into The Zone. It gives you energy you didn't know you had. It turns you from a normal mortal into something more. I've done it for myself a few times. I used to wonder if you could even do it for other people, because I never had much luck. But after reading this book, I have a few clues. Not surprisingly, they echo the environment I create naturally for myself - but I have to change my style if I'm going to create the same conditions for others.

Mutual Motivation. You can't obsess alone for long. The key thing isn't so much having help as being needed. You have to not let people down. That fear is what makes stopping harder than going on.

"Signing up." It has to be voluntary. You have to know what you're getting into on day 1, and decide it's worth it. You have to decide it out loud, and promise it to others. You have to be visibly, publicly in the game, so any failure will be an obvious one.

No way out. There can be no escape clause. If you fail, we're all dead. Nobody will save you. If you're late, we're all late with you. There's no superhero who will do it better and bail you out. You're going to have to grow up and be the superhero. If you really have to do it, maybe then you really can do it.

Too stupid to know it's impossible. It has to be harder than you thought it would be, not easier, so the pressure builds instead of dissipates near the end, when it's easiest to lose interest. And so experience kills - you'll never be able to obsess the same way twice. That's why younger people, especially students, are better at it than oldsters. (As someone on the verge of being an oldster myself - in the book, 30 years is the magic age - I already have to find crazier and crazier projects each time, always outside my existing experience, or I simply can't obsess enough.)

Too blind to see it doesn't really matter. In real life, almost nothing you do makes a serious, long-term difference. Realizing this will kill your fun. You need blinders - and if you're lucky, a really good reality distortion field. Again, older people have trouble here, because once you've been disillusioned by dedicating a year to an ultimately pointless project, it's hard to fall for that again. Except that falling for it is fun.

Too restricted to take the easy way out. Smart, sensible ways of solving problems will knock you out of The Zone. Sensible schedules, flexible and forgiving bosses, 8-hour work days, good nutrition, the newest equipment, a social life (outside work), even using low-cost direct mail services instead of composing your own poetry and stuffing your own envelopes - all these things make it too easy. That means less pressure. Less pressure means less obsession. There's a good reason why entrepreneurial companies are responsible for most of the wildest innovation in the world: because they're so helpless, disorganized, and resource-constrained that nothing you do there isn't a challenge. And that makes your brain work harder, nonstop, without any chance to cool down and drop back from hyperspace into normal space.

When I've done the best work in my life, those are the rules I followed. I turned my load factor down to levels I knew perfectly well were too low to be safe. I set things up so I had no escape and nobody could possibly bail me out. I bet my reputation that I would be done on time. And because it's my special skill, I always, always, failed to realize how impossible and unimportant the job was - at least until afterwards.

And that, let me tell you right now, is the magic combination that makes life worth living. From now on, I'm going to be a very different kind of manager. You should be glad you don't work for me anymore!

Delirium 0 (second try): Nerve Center

When you play a computer strategy simulation, there might be hundreds of agents doing your bidding - workers, warriors, transports, cities, convoys, and maybe even angels and demons. They march to your orders, they do more work than you could ever do for yourself, faster than you can see, because the computer handles the details - you just handle the strategy.

But the real world isn't quite like that. In the real world, real minions cost real money, and have real feelings, and want real self-actualization and self-expression. Minions are real people, just like strategists, and minions want to grow up to become strategists like you. But managing the feelings of your minions takes work - it takes away from your game - it weakens you compared to the other players who "feel" their minions better than you do.

What if your real-life minions weren't people, but computers? What if whole aspects of your business didn't need human minions anymore - just automatons with some strategic direction? What if every human was a strategist, and every meeting was a strategy meeting, and the details managed themselves?

Well, then your business would have more power than any other business. You could do more with fewer, smarter humans, all of whom would actually be worth hanging out with after work. One change to your management logic would retrain all your hordes instantly. This sort of power is dangerous if you don't know how to use it - but soon, it'll be the difference between winning and losing the game. And the one who rules the game is the most powerful strategist, the one who defines the game itself. The one who programs the minions.

The winning strategist is the one who can hold the whole game in his mind at once, and let the details work themselves out exactly how he would want them to work out.

So what if I told you I've found a real-life game that we can really play this way? I guess then we'd just need the right programmers to control it.

21 Sep 2006 (updated 21 Sep 2006 at 01:09 UTC) »
A Quick Note on Economics

If I was centrally planning an economy, it simply wouldn't have occurred to me to figure out how to make a perfectly good microwave oven for $59.95 CAD. And that's why capitalism isn't so bad.

A Quick Note on Socialism

kjrose linked to an article about "soft paternalism", which is basically a way of subtly adjusting "default behaviours" and stating messages in just the right way so that people tend to do sensible things instead of wrong things. It's very neat, very successful, and a bit scary. And I know I've done it too. Why force people to do things when you can help them do things? Hmm.

Moral quandary: well, the cat's out of the bag. If you don't do it, someone else will.

A Quick Note on Work

Not only do we have rental plants here, but it seems we have rental paintings too. So when you get tired of them, you just send them back and someone replaces them for no extra charge! Oh, modern world, where have you been all my life?

A Quick Note on Syndication

Someone pointed out to me that there is a Livejournal syndication of my diary that people can post comments to. There are two problems with this: first, I don't see them, because I don't use Livejournal. And second, even if I saw them, I can't reply to them, because anonymous comments are disabled on that syndication and I don't have a Livejournal account. So you'll have to email me if you want me to see your thoughts. Sorry.

Welcome Back to Ontario

On the radio today: "Guys! Want to impress that special woman in your life? Make sure to practice good hygiene! We'll have some great hygiene tips after these messages." And they weren't kidding, I swear.

Crackberry Indeed

They kind of insisted on getting me one of those things for my new job. It's even more evil than I ever imagined. But it does Google Maps (and that saved me today already), so it does get high craziness points.

I guess sometimes it can be fun being a total corporate sellout. That said, this is really not your usual bank, in that everybody I've met there so far actually makes sense. And they process expense reports in 24 hours.

153 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!