Monthly Archive for May, 2010

200

I have written 200 posts since I started this blog back in August 2008. I guess this gives me some bragging rights!

tmp

The blog originally started back in 2008 on a Joomla! platform on my shared hosting. The first post, Options and References, was published on August 8th and compared the C++ and Objective Caml approaches to option and reference semantics. I managed to follow a thrice-weekly schedule for a few months, forcing myself to write when I felt tired, which resulted in posts that were sometimes badly formatted or completely uninteresting. There’s some serious chaff in those archives, folks.

I started a blog because I was at the time a very active participant on the gamedev.net forums, with several thousand posts under my belt, and many of these were long, in-depth analyses of technical topics. This also helped me improve my english language skills—I’m not a native speaker—and provides me with an invaluable argument in any hiring process. Not bad.

The game development forums were also the reason the blog was written in english : most potential readers at the time were people on the forums, so I had to cater to that audience. It ended up reaching far more people than that, as the blog gradually shifted from a C++/game focus to PHP/JavaScript (and now, to business strategy).

Several blog posts actually come directly from these forums, copy-pasted and quickly edited, and many others were directly inspired from there:

Actually, my 100th post on the blog (it was published on April 1, 2009) was titled The C++ hits you! You feel confused. and discussed a common topic found on the forums : should C++ be used as a language to learn game development?

Then, I moved to wordpress in late december 2008. I have had nothing to complain about ever since (well, except comment spam). I have been using K2 as a theme, and modified it last month to improve the readability of the blog, to add a Retweet button to all my posts, and to append a small 80-day plot of my feed subscribers at the bottom of the right column.

The Future

I certainly intend to keep posting here. There has been a gradual increase in readership over these two years, which might be related to my own improvements in both content and style. Besides, there are benefits to blogging (and, in general, to writing down things) : it serves as a log, as a way to think about stuff in greater detail, and as a reassuring routine that just stays there when you change jobs or locations.

I also intend to make a few improvements. These would be:

  • Add more links. I believe this is the single greatest offender as far as content is concerned. There’s absolutely no way for an average part-time blogger like me to produce as much fresh content as the rest of the internet. This isn’t a plan to become an echo chamber, but rather a way to add depth to my existing posts. There’s a middle ground to be found between the echo chamber blog and the listen-to-me-I’m-interesting blog.
  • Add more internal links. Now that I have two hundred posts, there’s absolutely no way for the average reader to skim through the archives to find something of interest. There are so many subjects here that a PHP developer will not care about C++ pointers and a start-up founder will not care about CSS. A short related links section at the bottom of every post should help with this whenever possible.
  • Add more images and structure. Right now, my posts are a neverending wall of text and pain. Adding a few more images, headers and lists back into the fray should help make my posts friendlier.
  • Combine several unrelated short posts into one. Right now, I don’t publish an article if it’s shorter than 1000 words (or at least, not without painful mental duress), but I have lots of ideas that I could write two or three sentences about. By combining them into longer posts, like Inc.com does (example here), I get to write more, and discuss a larger variety of topics.

On the other hand, there will still be no twittering (I have neither the time nor the interest to take care of that).

I hope the improved version will be to your liking. Until then, if you have any advice (or constructive criticism about existing content and practice), feel free to mention it in the comments section!

More Sales or More Production?

Robert loves hot dogs—he can never have enough of them! And now, he’s found a $100 bill on the floor, so he might as well buy some Premium Hot Dog Sausages ($3 each) and some Royal Hot Dog Bread ($5 for a five-pack).

How many should he buy?

2632651360_23f22a1a0d_o

I’ll give you the right answer, but first, think about how you looked for the solution. Depending on how you think, you might fall into one of many categories:

Step-by-step solving uses the classic «if out of dip, buy chips, if out of chips, buy dip» algorithm: buy one bread pack and five sausages (total cost: $20) to make five hot dogs, repeat until you run out of money (that would be 25 hot dogs).

Trade solving starts with a bad situation (I use my $100 to buy twenty packs of bread) and tries to improve it through trading (you can trade 15 pieces of bread for 5 sausages) until you have more sausages than bread. So, you would move from (100, 0) to (85, 5) to (70, 10) to (55, 15) to (40, 20) to (25,25) and stop there.

Unit cost solving determines that one piece of bread costs $1 and one sausage costs $3, so a hot dog must cost $4. This would mean 25 hot dogs for $100 dollars (and then, you would check if 25 can be divided by 5, because you can only buy bread in packs of 5).

Relative cost solving determines that meat costs three times as much as bread, so the budget for hot dogs should be 75% sausage and 25% bread. And since the budget is $100, that would be $75 = $3 × 25 for sausages and $25=$5 × 5 for bread.

All of these represent various ways in which different people will look at a given situation. Every one of them has something to teach.

Honey, We’re Out of Bread

A business is just like Bob, only instead of hot dogs, a business loves making sales. To make a sale, you need a customer and you need a product. So, there are two problems you can have here: you are either producing more than you can sell, or selling more than you produce.

Being limited by production is usually a happy place, because there’s often a simple engineering solution to the problem: buy more servers, build more factories, hire more people… but simple does not mean it’s easy: building a factory takes time and money; that you can buy more servers, does not mean your software was designed to use more servers; hiring more people is very hard if there are no skilled people around, you cannot hire a hundred world-class singers if you wish to increase your opera production capabilities.

It’s also a safe place: if you don’t have enough units then some people will just have to wait a little or buy the competitor’s product, but at least you won’t go bankrupt. But it’s not that safe either: maybe you’ll miss the high-profit winter holidays because you don’t have your game console supply chain up and running; maybe you sold thousands of one-year memberships on your web site without having the hardware or customer service team to back that up; maybe you’re a start-up and you’re not profitable yet.

Being limited by sales is often seen as the unhappy place. You have the product ready (and you’re paying lots of money for that) but people just don’t buy it. Fixed costs mean that if nobody buys the product, your company will die. And increasing sales is hard for three reasons: your product needs to be the best, people who look at your product need to understand that it is the best, and people just need to look at the product.

Of course, if you have trouble selling your product, there’s no point in producing more, and if you can’t make enough of it, there’s no point in finding more customers. It is essential for any business to know whether it’s being limited by sales or by production, and react accordingly; if you don’t know what is limiting you, how can you spend your money on things that actually matter? Jason Cohen advises tech-oriented startups to «Put down the compiler until you learn why they’re not buying», and I would add «Don’t drop the compiler until you run out of buyers»

Predict The Future

Of course, it’s easy if you can just increase production or sales at the press of a button, but from the moment you decide to do something about it and until the moment you reap the actual results, quite some time can pass. A real-life advertising campaign is prepared weeks to months in advance (though it can get shorter on the internet). Hiring and training someone to be useful is a six-month endeavour. Factories take months or even years to build.

The ideal situation, of course, is to have a fully automated scalable process: if you get a surge of new customers, just pour more money into your infrastructure and new servers will come online to shoulder the load within minutes.  Once this is done, you can concentrate all your time and efforts on finding more customers. But there is no such thing as full automation: an additional 1,000 customers also involves customer support, and while it would be possible to offshore that as well, it’s never a good idea. Never let a fully scalable architecture make you forget about your other limitations.

In short, it’s not enough to know whether you are production- or sales-limited today, you also need to know where you will stand three months or six months from now, in order to make the right choices today.

Coffee, Etsy and Karl Marx

Suppose that I, as a former CSS expert, decide one day to enter the coffee mugs with clever sentences on them market. Everyone likes a mug with overflow : hidden written on the side, so they will buy them for about $15 + shipping and tax.

Assuming that I’m going to spend my days at home ordering cheap white coffee mugs in bulk $5 apiece, paint overflow : hidden onto them and shipping them out to customers, how much can I expect to earn? What’s useful here is the amount of money left behind after a sale once the raw materials have been paid for : my business has a gross margin of $10; if I sell 10 units a day, the daily profits would be $10 times that number, or $100.

Good Old Karl Marx

What if there’s a boom in the clever coffee mug market, and every single person on the planet absolutely needs to have an overflow : hidden on their desk? This means I can sell as many mugs as I want and reap a $10 profit on every single one of them. Production speed is the limiting factor : if it takes me an entire hour to process a single mug, it would take me three years of 10-hour work days to service a small group of 10,000 customers, assuming none of them break their mug and decide they want another. So the best I can get is $100 a day.

But wait! There’s this wondrous tool called Professional MugBurner 2000 that burns the black text onto the mug in a mere five minutes, instead of having to paint it by hand: that would double my productivity and get me $200 per day. And there’s still no sign of the demand dwindling! Should I hire someone to help me?

Well, I spend 5 minutes making a new mug, and a full 25 minutes packing it and shipping it. This means every hour there’s a full 50 minutes where the MugBurner is not used, which is kind of a waste. If I hired five people just like me, we could make and ship six times as many mugs and earn $1200 every day. The fair thing to do would be to split this evenly amoung ourselves, because we’re doing the same job. On the other hand, I own the MugBurner and paid for it with my own money! Is it fair if someone who never paid a single dollar for a MugBurner earns as much as someone who forked over $10,000 for it? Remember, I’m the greedy capitalist here.

So, I pay every single one of them $100 (because that’s what they would earn without me or my MugBurner) and keep the remaining $700 to myself (and the IRS). This is getting really interesting. In fact, I guess I don’t need to work at all : I could just hire another person and earn $600 every day! This is a demonstration of what Karl Marx was saying about capitalism: my six workers earn $100 per day making and shipping mugs, whereas I earn $600 per day doing nothing, because I own the MugBurner.

Supply and Demand

Right now, if someone wants to work in the clever mug industry, they can be on their own or they can join my team, which lets me set any wage that’s above the standard $100 per day. But sooner or later, other investors are going to notice what I am doing, and decide that they should be doing it too. After a few weeks, there are literally hundreds of people like me who bought a MugBurner, hiring all the workers they can, until there’s no skilled mug workers left on the job market.

In fact, since you now have to steal the workers from your competitors, you tend to offer higher wages. « You get $100 a day doing this? » they would say, adding « well at my factory you’d get $150 a day instead! » While this does divide their profits in half, it’s still better than having no workers! After a while, the wages end up at some high figure, like $190, and the investors who can’t stomach a daily $10 return on their $10,000 investment just leave.

When you need some talent that’s hard to find because everyone else needs it, you will have to pay top dollar to get it. Everyone knows that a Senior Frobuzz Programmer earns $75,000 a year, so there’s no point in trying to hire one if you can only afford paying him $50,000! At best, you could try offering him a different job : if you can’t compete on the main market, try to find a niche market where you can be number one. For instance, a $50,000 Dark Lord of Software Architecture position at a startup can be more compelling than a $75,000 Senior Programmer Drone position at a megacorporation to someone who hates boredom and enjoys building new useful things with a clear vision.

Hell, some of us might as well work for a startup for free because we like being the founders and building up something from scratch that is actually ours!

So I fire all my workers, and start renting the MugBurner to yound mug entrepreneurs who need it. I used to buy $5 worth of raw materials, pay someone $5 to spend five minutes on the MugBurner, sell the resulting mug at a price of $15, and keep the $5 surplus. Now, the entrepreneur buys whatever raw materials he wants, pays whatever wages he wants and sells the mugs at whatever price he wants, but he has to pay me a $10 rent for every five minutes on the machine.

Wait… $10 for five minutes? The entrepreneur would have to pay me his entire profits! How can this work?

The key to this approach is that instead of having average workers toil to make mugs I design and sell, I get talented individuals that are better than average (and better than me, too) who earn enough money to make those $10 a perfectly acceptable price!

Sarah does not have much in the way of mug design, but she’s a MugBurner goddess who can churn out those mugs ten times as fast as anyone. With the MugBurner, she still gets a $200 margin per day just like any other worker would (because shipping takes a lot longer than making the mugs), but she only pays $20 rent! This is a $80 improvement over not renting it.

Jonathan is a true marketing genius: he invented a clever O R’lyeh? snow owl mug that Cthulhu enthusiasts will buy for $40. He can make them on his own (ten per day) earning $350 profits per day, or he can rent my MugBurner to make twice as many, earning $700 profit per day and paying me a $200 rent. This leaves him with a $150 improvement over not renting my MugBurner!

If I find enough people like Jonathan and Sarah, I will be getting $1200 every day. And they will all be very happy about it, because they get a lot more money for their work as well.

Enabling Small Businesses as a Business Model

Now, suppose that instead of providing these talented people with a MugBurner, I provide them with something else that’s just as useful (in the sense that it directly contributes to profits), and is priced high enough to earn a nice profit for me but low enough to make it appealing to the top earners. What do I get?

Etsy : enables talented artisans to sell their work online.

Amazon Web Services : enables small companies to rent only the IT infrastructure they need.

Paypal : enables small retailers to easily sell things online.

The right duration

The basic truth about any activity is that it will always take more time than you have.

Allocating more time to a project does not help : it will just take longer. Reducing the scope of the project does not help : whatever is left will just take longer.

If you have an eight-month milestone, plan for a six-month one and you will get the eight-month release on time. If you have a 10-feature release, plan for a 15-feature release and you will end up with only 10 features anyway.

Shoot’em up Game Design

To understand how to make a game difficult, you have to understand how the player reacts to obstacles. In shoot’em up games, difficulty comes from the following causes:

  • Reflex-based obstacles require good hand-eye coordination and the ability to react in a split second. Examples are very fast shots or speeding suicide bombers.
  • Tactics-based obstacles require more concentration, because they are crafted in such a way that blind reflexes will not work. Examples are player position during intricate boss attacks, or choosing the order in which to kill the enemies.
  • Strategy-based obstacles usually involve the choice of weapons, or the use of smart bombs.

The common denominator to all these obstacles is the one and only player resource: concentration time. A given player can only concentrate on a fixed amount of entities and concepts in a given time duration.

An isolated entity (a ship, a bullet), no matter how dangerous, should never require large amounts of skill to overcome, because this is simply not fun for the player: acquiring the required skill can only happen when fighting that entity, which means the player will fail a large amount of times. However, the interaction of several entities creates another kind of difficulty: since the player can only handle a limited amount of entities at a given time, player skill will come from the ability to decide which entites are worth concentrating on, and which are not. Difficulty will then come from interesting ways in which entites can be made to interact in order to surprise or puzzle the player.

Clustering

The human brain has several innate abilities that allow it to handle large amounts of entites. The most important of these is clustering: if several entities are similar enough in their aspect and (simple) behavior, then the brain will be able to handle all of them at the same time as if there was only one. This has several implications on the difficulty of several situations:

  • Shots that move in the same direction are easier to manage than shots fired in random directions.
  • Shots that come from the same point are easier to manage than shots fired from several different points.
  • Enemies that are far away from each other cannot be easily concentrated on.
  • Differences in movement speed, as well as complex non-linear movement, increase the difficulty of managing entitites. However, if all entitites move exactly the same way (even if it is complex), then the effect is lessened a great deal.
  • Colour-coding helps isolate movements. By having all shots that move in a given direction have a certain colour, the player will dodge them with less difficulty.

In a shoot’em up game I worked on, Darklaga, these effects were obvious as different kinds of shots were used. In the high-difficulty modes, enemies used both a slow-moving shot type and a fast-moving one. The slow-moving type was initially used to spin a web, through which the player had to navigate. Because the fast-moving shots were almost the same color as the slow-moving ones, the player had many difficulties spotting them because he was concentrated on navigating through the web.

Delayed threats

The next step is the introduction of delayed threats. Indeed, right now all techniques only serve to increase the difficulty of dodging enemy fire, which is an immediate threat. Once an enemy shot is fired, the only solution is to dodge it. However, if a type of enemy is known for firing dangerous pellets, then that enemy is a delayed threat: if it is killed before it fires, then the game becomes easier. As such, destroying delayed threats is a top priority for the player (second only to the necessity to avoid immediate threats). Here are several pointers related to delayed threats:

  • Delayed threats fall into two categories: diversion and sneaking. The former must attract the concentration of the player onto itself to divert him from immediate threats. The latter will attempt to stay unseen in order to unleash an immediate threat of its own.
  • Diversion threats rely on attracting the player’s attention, and to do this they use several properties of the human brain. They blink/are animated/have a distinct color, they appear in a clear area where nothing else can block the view, and are usually quite big. Average differences in movement speed are not noticed (but different movement directions are). The reverse is true for sneaking threats.
  • A delayed threat need not be an enemy. A wave of shots that moves towards the player is an immediate threat. Now, hide among these shots a similar-looking shot that moves in the same direction (so it will not stand out of the crowd), but at a smaller speed (so natural clustering will ignore it), and you have an unseen sneaking threat going straight for the player if he did not spot it fast enough to move away. This technique was used for the Blazing Star final boss, by the way.
  • A delayed threat need not even be hostile! By setting free a valuable power-up at the right time (and having that power-up ‘leave’ the screen after a short time), the player faces the ‘danger’ of not picking up that item. This is a very interesting diversion system.
  • Delayed threats that must be destroyed (essentially enemies) are stronger when the weapon of the player does not have a wide spray or auto-aiming. The harder it is to aim at a threat, the more difficult it will be to counter it.

What would be examples of this? Darklaga featured “warping” enemies which appeared somewhere on the screen, waited a short moment, and unleashed a vicious attack at the player. It was very important to destroy these enemies as soon as possible (and they were weak), or they would transform the playing field into hell in space. Another such “delayed” feature was the introduction of kamikaze enemies. These would slowly move down the screen vertically, stop, and suddenly move horizontally to ram the player’s ship from its undefended sides. These enemies were mainly introduced to rebalance the otherwise unbalanced vertical laser (a very powerful weapon that ripped through enemies, but which required one to move fast enough to kill the kamikaze before it rushed in).

More diversions

There are even more ways to apply the constatation that the player can only concentrate on so many things at a given time:

  • Darklaga had a special class of enemy that rotated around the player. The enemy would usually do almost nothing (it did not shoot very often either), but it was safe from any attacks until its giratory movement placed it in front of the player’s ship (at which point it died). However, a rotating enemy ship is enough to attract the player’s attention, and divert it from more important concerns. Not having those enemies be completely inoffensive also helped keep a portion of the player’s attention on them.
  • The player naturally concentrates on his or her target. This can be used to your advantage in several ways. The most obvious is to have the player keep its eyes on an enemy a few milliseconds after its death. Idea: a way to do this is to have a little slot machine appear where the enemy was (which can roll out an instant bonus for the player).
  • Another is to notice that players watch the enemy until it dies (and not until they fire the final shot that would kill it): if the lethal blow is not different from normal shots, the player will wait until it reaches the enemy. Idea: have the player weapon fire “targeted” missiles at the enemy, with missiles being slower and more powerful as time passes; the lethal missile will be very slow. It works even best with a flamethrower, since missiles can be counted.
  • Have threats appear as much more dangerous than they really are. Darklaga featured horizontal walls of enemies. If the player kept firing constantly, they would die whether or not the player was paying attention at them. However, even though it served no purpose, most testers kept their eyes on the enemy wall until it was destroyed, and were hit by enemy fire in the process.
  • Teleporting enemies can be made to teleport behind the player when he isn’t looking (because his attention was diverted by something else). And the time spent on dispatching them can be put to use by other delayed threats coming from the other way.

It’s e-mail if we say so!

Jason Cohen from A Smart Bear makes an interesting point about the looks of your company matching its actual voice:

We’ve all been jarred by someone’s voice not matching their picture. Take English footballer David Beckham, the quintessential picture of manly sportif — washboard abs, ex-captain of the English national team, and married to Posh Spice.

But then he opens his mouth.

It’s actually quite common around these parts for companies to explain that « your satisfaction is important to us » and that « you can ask us questions by e-mail any time » but the moment you look for an e-mail address, all you happen to find is an online contact form.

I could understand if it was a matter of protecting their support e-mail address from spam robots by not including in on an actual page. But the RATP (the company that manages most of the subway lines in Paris) printed actual paper notices for billboards (the kind that you find on subway station walls) to explain how dedicated they were to their passengers and how you could contact them by e-mail by going to their web site in the « contact us » section to use the contact form. I didn’t know spam robots could read real-life billboards.

Not having any kind of actual e-mail is annoying for several reasons. One is that I actually like to use my e-mail client to send e-mail messages, if only because I get to keep a copy of what I send without any additional effort. Not to mention that the text editor might be a little less ugly than a vanilla text area on a web page. Another is that you have to double-check the e-mail address you type in the contact form. Yet another is that you don’t have to agree to anything when sending e-mail, but contact forms come with policies, terms and conditions that you have to read and agree with.

Yet, I can understand that, for the companies, contact forms are better than e-mail under certain aspects:

  • You get less spam (arguably not a lot less, but it’s still nice)
  • You can ask for more detailed information (such as a customer ID number) that helps you process the request faster if provided, even if it’s not mandatory.
  • The form dumps the data in a pretty format directly into your CRM software, while an e-mail takes a little more parsing (it’s hard to get anything out of an e-mail besides the body and the headers)
  • You get more data about your customers, if you want to aim more direct marketing at them
  • You get information about how many customers started sending a message, then gave up
  • You get information about what a given customer visited in your FAQ or online help before resorting to the contact form

You can even perform a search in real-time in your knowledge base using the words the user types in the contact form, just in case you can answer their question this way! I’m not sure if anyone does this, but based on how Stack Overflow works, I’m sure it would do fine.

I’m not saying any of these are good for the customers (although some of these do mean the limited-budget, low-skills support staff will be more efficient), but you can see the logic.

But I do wonder which is better: to provide an e-mail contact or an online contact form?

Could it be both ?

Crutches

My Zend Framework article from last month brought in several quite interesting comments. One of them in particular caught my attention:

It sounds like the issue is you have a problem developing without a crutch, your IDE. I’m not a CLI-purist/anti-IDE nazi, but until I see Visual Studio for PHP that runs on Linux and OSX I’ll stick to using vim and Textmate. I have amazing productivity and so does my team; none of use crutches.

What I find personally interesting about this comment is that it matches the way I used to think about this matter less than a year ago.

My programming career actually started when I discovered Objective Caml back in 2003. It was a fine language, but the closest it had to an IDE at the time was Tuareg, an emacs mode. So I started using emacs a lot. And I used a terminal, because I was on a windows computer and used PuTTY to access a Solaris server, which meant I never touched the mouse while developing. Auto-completion was not important: I named my functions so that I could easily find out what function I wanted to call, and I could always refer to the HTML documentation if I needed a standard library function. No debugger was necessary: whatever bugs the static type system would not detect were usually fairly self-explanatory so it was a simple matter of opening the right file, staring at the right function for a minute, and the issue became obvious.

Then, I started PHP as an afterthought in 2006, and many of my old habits carried over. I was using an emacs mode for editing PHP, uploading my modifications to a test FTP server («compiling») every hour to check. Even though PHP has a dynamic type system, I remained anal about variable types, and three years of Objective Caml meant I could handle lots of code without type errors. In short:

  • No auto-completion (I had to remember function names),
  • No local apache server to test my modifications in real-time (even though it was quite fast, I still had to manually upload the files through FTP),
  • No debugger (I had to rely on code-staring and var_dumping),
  • No swirly red underlining for syntax errors

Now, all of these managed to get me a lot of nerd cred. Imagine people who are used to testing their code every time they write a new line, meeting someone who can write a thousand lines, weed out a few syntax errors and misspellings, and have a working program ready for use. Or someone who can find an obscure SQL bug by looking at the error message and you didn’t even have time to start the debugger.

Working in a harsh environment to improve your skills is fine; it’s just like those old Kung Fu movies where the student has to punch a large rock until his fists bleed, and his sifu makes him feel like a failure, until the student knocks out his opponent in a single nonchalant blow because he is not aware of his power.

But there’s a time for improving skills and a time for putting those skills to good use. For me, it was time to move on. And that happened only quite recently: I started using an IDE for PHP in september 2009.

Lack of auto-completion meant I would spend a few minutes correcting typos in my code every time I finished a module. These are not « wrote setFoo instead of changeFoo » mistakes that are corrected by a sane naming convention, but rather « wrote steFoo instead of setFoo » mistakes that are purely unintentional. On average, for an hour of writing code, I spent five minutes correcting these small one-letter mistakes because of the time it took to complete the « run code; notice mistake; open editor; go to error; fix error » loop. It gets even worse when you take into account uppercase letters in file names, that work differently on different platforms. Now that I use auto-completion, this time has been reduced to almost zero.

Lack of auto-completion meant I had to look at the online documentation to determine whether str_foobar was a haystack-needle function or a needle-haystack function. Now I just write the function name and Eclipse tells me.

Command-clicking on a function or class to go to its definition is definitely not necessary. After all, if I’m looking at a call to App_User::register(), I can certainly open up App/User.php by myself and scroll down to the definition of the register function by myself. In fact, in Objective Caml, the code was usually short enough that you could remember where the definitions for all the functions were. But no matter how fast one can do the class-to-filename transform and the look-for-function scrolling, it would be quite surprising if command-clicking wasn’t an order of magnitude faster.

Back to the crutch comment: am I really using my IDE as a crutch?

Yes. Definitely. I utterly suck at typing class and function names, so I need a crutch to help me with that. I utterly suck at going to the definition of a class or function by hand—I just can’t seem to be clicking fast enough—so I need a crutch to help me with that. I can hop along without my crutches, of course, but it’s just not the same.

Or, to phrase it another way:

It sounds like the issue is you have a problem delivering Pizza without a crutch, your vehicle. I’m not a running-purist/anti-vehicle nazi, but until I see a Toyota that runs in tight downtown streets, I’ll stick to using Nike and Adidas. I have amazing delivery times and so does my team; none of us use crutches.

I’m happy for your amazing productivty. Think how much more amazing it would be if you squeezed out even more of these non-productive moments in your work day; maybe with crutches.

The One Slide

Conference speakers usually run in «performance» mode : people paid so that they could listen to them (either with their money or with their free time), and will do so quietly because interrupting the speaker annoys the other listeners.

This means conference speakers can get away with a lot. If they choose to start with facts or anecdotes completely unrelated to the subject, only to find some surprising relationship that comes to the listeners as an epiphany, they can certainly do so because the listeners are paying attention and are actively looking for that hidden relationship. If they choose a presentation structure that starts with the details and waits a few minutes before introducing the bigger picture, they can do so because the listeners are focused and will commit most of the details to memory as they are described.

They are performers. You don’t interrupt a tech conference speaker to ask «what about OpenID?» for the same reasons that you don’t interrupt the Rolling Stones to ask «hey, could you play Angie instead?»

When giving out a presentation at a meeting, you are not acting as a performer. You might have a lot of things to say about the new merger, and you might have crafted an elegant presentation, and you might have great speaking skills, but a typical meeting has no rules against interrupting the speaker to ask a question.

Joe from accounting is bored because he does not really care about how retailers will be trained after the merger or where the new computer center will be, and he is scared because the merger might mean more work for him, or moving to an office on the other side of town, or being terminated, or whatever else it is that accountants fear.

So, the moment you say something, anything, that might be tangentially related to his interests, Joe will interrupt you and ask a valid question about it, trying to drag your presentation over to his territory. Even if you shut Joe up immediately, the rest of the audience will lose their focus, making the rest of the presentation harder to grasp.

Of course, it might be better if meetings were meetings instead of conference talks in disguise. But sometimes, meetings are one-sided simply because one side has all the information and the other side has none, and there’s almost no polite way of saying «we know everything, so we’ll do the talking and you’ll do the nodding» so people mitigate and say instead «there’s something we need to discuss and act upon» and this leaves the door open to, well, discussion.

Where conference speakers can focus on giving an elegant presentation that drives a point home by creating the appropriate emotional connection or state of mind, a meeting speaker needs to give sturdy presentations that can survive several interruptions by people who don’t actually care. If possible, they should actually look for ways to make their presentation harder to interrupt, by not giving anyone in the room an inch to stray from the topic.

How?

1. Intimidate your audience.

Not the muscle-flexing, whip-cracking kind of intimidation, of course. Overt intimidation breeds hostility, but you can apply subtle intimidation for perfectly good reasons.

You could do the meeting on your own premises : your building, your floor, your department. This is especially effective if the audience comes from several geographically remote locations.

Invite people who don’t know each other so that they will stay quiet through peer pressure. If you can, also select personality types who listen before they talk back.

Tell the audience ahead of time that the meeting will be very important, preferably through unofficial communication channels : an «IMPORTANT» e-mail with tens of recipients has less impact than a quick one-on-one «by the way, that’s a very important meeting, I really hope you’ll be there» in a hallway.

The layout of the meeting room is important. Round table layouts place everyone on the same level, while classroom layouts put an emphasis on the speaker. If possible, stay between the audience and the board or screen.

2. Architecture your presentation as short, simple, independent bursts.

Conference speakers have the leisure to use a long, uninterrupted time span as they wish. As a meeting speaker, if you are interrupted in the middle of a critical ten-minute explanation, you might as well go home.

Unless you’re very good, or your audience is very good, you will be interrupted. Once the interruption has been dealt with, you go back to driving your points home, so you want to make that as simple as possible.

Short explanations that fit on one short slide are great, because you can easily start over again.

Simple explanations are even better, because if the interruption was short enough, you can simply go back to what you were saying without having to repeat yourself.

Independent explanations help the audience catch up if they every get lost. If slide N is a prerequisite to understanding slide N+1, you will lose more people with each slide.

3. Be honest : start with the One Slide.

If you want questions to be asked after the presentation, say so. People will be reasonable if you keep your presentation short. If you think a particular section is critical, say so right before you start talking about it. The audience will stay focused for a short while. Honesty helps, but there’s more to it.

If you’ve done meetings before, you know what the One Slide is. It’s the slide you fast-forward to when someone in the audience asks a question that’s a bit off-topic, and you need to show them a summary graph of what you’re doing. When Joe asks about the work load in accounting, you fast forward to the summary slide that shows the various topics in your talk, and the accounting work load is in there, and you just hadn’t reached it yet. Or perhaps your talk is about retail training and that question from Joe is completely off topic, so you show him a slide with the list of topics.

But it’s too late. Joe doesn’t read your mind. Fast-forwarding to the One Slide is a sign of failure.

The One Slide doesn’t have to be a summary, or a graph, or anything. What it does is explain the rules of the presentation : this is what we talk about, this is when we talk about it. After seeing the One Slide, anyone in the audience should be able to tell whether topic X will be discussed and when. The shape is irrelevant, what is important is that the rules are conveyed.

A common mistake is to believe that an outline of the presentation is enough. It might be, but only if it is very precise about what will be discussed. Vagueness undermines the authority of the One Slide, because it makes the rules feel optional. A section called «Technical Considerations» is an invitation to people asking questions about practical considerations you never dreamed of. «IT Case Study» is better because it’s not as open-ended and actually only relates to IT. «Legacy Mainframe Integration Schedule» means if they’re not asking about the schedule for integrating the legacy mainframe, they shouldn’t be asking at all.

Quick tip: if you have trouble describing your rules in the One Slide, maybe you should focus your presentation more, or look for simpler ways of presenting it.

4. Make interruptions happen when you want them to happen.

Questions tend to be asked when the audience thinks the speaker is done and is doing a short pause, or when the question is about to become off-topic. With this in mind, one can identify vulnerable spots in a presentation:

  • Questions about a slide will be asked on the next slide.
  • Questions about a section will be asked when that section ends.
  • If there are several speakers, questions will be asked when the speaker changes.
  • «Are there any questions?»

This should help you identify where you are likely to be interrupted, so that you may avoid them in tight spots where a focused audience is important. You can eliminate some of these vulnerable spots! For instance, while speaker A may introduce speaker B, he should not introduce speaker B’s topic: this just begs for questions about the topic, and it is very annoying to start one’s part of a presentation with questions.

If an explanation is complex, spread it over several slides so that no single slide will be so complex as to bring up questions when it’s done.

Make sure none of your transitions within sections feel like transitions between sections.

Defuse any potential surprise questions by asking, in spots where you know questions can’t hurt, whether the audience has any questions.



1150 feed subscribers
(readers who polled a feed this week)