Agile Principles Management & Leadership Programming

Our Highest Priority

The first principle of the Agile Manifesto is “Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.”

Easier said than done 🙂

This principle is deceptively simple and simply radical. I don’t believe it’s an accident that it’s the first principle and it’s first 3 words ensure that what we pay it detailed attention.

So let’s pick it apart!

There are five major ideas embedded inside this 16 word sentence:

  1. Highest Priority
  2. Customer Satisfaction
  3. Early Delivery
  4. Continuous Delivery
  5. Valuable Software

All five of these ideas deserve a blog post or two (the highest praise one can give in the 21st century). But a paragraph each will have to do.

To have a “highest priority” is not a foregone conclusion. Usually you have competing priorities. The classic problem with software development priorities is expressed in the consultant’s conundrum:

Fast, cheap, or good — Pick any two!

The consultant’s conundrum has no “highest priority” and thus an impossible problem to resolve. I’m going to tell you a secret. No matter what the consultant (or Jakob Neilsen) says, you can’t pick all three, or even any two. You can only pick one priority. This is the first principle of agile development and the lack of a single highest priority is the root cause of why projects fail.

To focus on “customer satisfaction” is another tragically overlooked value in the real world. Most business, except the ones that succeed for the long term, focus on everything but happy customers. Even though really smart people write books like Patricia Seybold’s, revenue or awards or downloads are still made into objectives in and of themselves. Another secret: SUSTAINABLE REVENUE FOLLOWS CUSTOMER SATISFACTION! (Sorry for the caps–my shift key got stuck.)

The third and forth ideas, “Early Delivery” and “Continuous Delivery”, are difficult to do because they go against many humans’ natures. Some of us naturally crave feedback and offer up unfinished works for critical review early and often. But that type of human seems not to get into software development. It’s the lonely author, or lonely blogger,  who seems to dominate our industry. He wants to knock the socks off his audience so he waits until every thing is done before revealing his magnum opus to the world. This behavior in a business context is rationalized by the idea that you only get one chance to make a first impression. I feel my shift key being to stick as I prepare to refute this idea–but I will resist shouting in type because of the overwhelming evidence supporting early and continuous delivery: Microsoft, Google, Adobe, Apple, Salesforce. When these companies (and any other tech companies) are successful, it’s when they release incrementally and improve over time guided by customer feedback. When these companies fail, it’s when they hold off for the big bang.

The final idea of the first principle of the Agile Manifesto is the hardest to define. What is “Valuable Software”? What is value? The article on Value (economics) is messy and ultimately not helpful. Like truth, value is subjective and only understood when time and multiple perspectives are integrated. So let us go back the classic definition and say that valuable software is that which “saves labor” (which leaves out gaming and entertainment, but I consider walking away from my computer a form of labor).

If the software you are building does not “save labor” then perhaps you shouldn’t be creating it. I’m serious. There is plenty of software out there that is not valuable by this definition. Yes, I’m thinking of you MS Project! At the end of the day software is about automation and by that I mean the automation of labor.

To me, and many others, the Agile principles are not a silver bullet to cure all the ills of software development. They are a recognition that the software development process is not separate from software being produced. A product that is not valuable can not benefit from Agile development anymore than quackery can benefit from healthcare reform. Our highest is priority is not to make it fast, cheap, or good. Our highest priority is to make it valuable.

Management & Leadership Programming

Circular Logic in Project Management

Listening to one of my favorite public radio programs (The World) while carting the kids around this weekend I heard about an interesting study by the Max Planck Institute for Biological Cybernetics. A team of biocyberneticists wanted to find out how well people navigated. They hired a bunch of hikers, gave them each a GPS, and one simple instruction: Go straight that way.

Tracking the GPS devices from the comfort of the lab the researchers discovered that people don’t navigate so well on cloudy days or dark nights. Without an external frame of reference, like the sun or a mountaintop, people tend to walk in circles. Even people who claim to have a great sense of direction.

After reading more about the study I realized that people don’t tend to walk in circles. People only walk in circles. With out an external reference point the natural human programming is to only go so far, turn around, and go the other way.

And this makes perfect sense. Over millions of years, if an individual strayed out of his natural habitat without a good reason, that individual seldom got to reproduce. Our natural inclination is to stick to our territory, to the known, and within boundaries. Even when we think we are on a new path.

The mind is not exempted from this bit of hard coded behavior. I see it in others and myself all the time. In programming we call this recursion when we mean it and a bug when we don’t. In business it’s know as “once size fits all”, “if it plays in Peoria”, and “if it ain’t broke, don’t fix it.” Actually, I wish the business world had relegated circular thinking to tired old cliches. But insidiously it’s in your MBOs. It’s in you mission statement. It’s in your strat plan. Any goal that isn’t externally verifiable is a carrot on a stick.

The typical recursive program looks like this (pseudo code):

function DoIt() {
	If(GetData()) {
	} else {

As long as there is data DoIt() will call itself. The data is the external reference point, the mountaintop. Remove the call to GetData(), or if it fails to return false, the function DoIt() will do it forever (or until the stack overflows—which ever comes first).

What is interesting to me is how strong the impulse to think in a circle really is. Many times we ignore the Sun or miss the mountaintop.
I have so many specific examples that I can hardly choose one but this is my favorite: The project is behind schedule so we need to:

  • Add more resources: The team is swamped so adding more should help!
  • Spend more money: More hardware, more consultants, more tools ought to help!
  • Work more hours: We just need find another 12 hours in a week to get back on track!
  • Motivate more: Obviously the team doesn’t understand how critical the project is to the company!

All of those solutions are examples of circular thinking because they seek to resolve the problem with more what the team is already doing.

When a project is late (and the calendar is the ultimate external reference point for any project) you have stop. Break the sprint. Reverse course. Look up for a guiding star that points to true north.

This is what works for me:

  • Shuffle the project’s management: Poor execution usually means one thing—Poor leadership. Good leaders take poor plans and make them successful (or change them until they are successful). Poor leaders complain about the plan, the team’s skills, and the design of the product.
  • Hold the budget: Throwing hardware, consultants, and tools at the project usually just makes it more complex. Sometimes running on a faster CPU will temporarily buy time for your pokey little puppy of an app server. But you’re just making some other project late down the road. You should only spend more budget if you inadequately budgeted beforehand.
  • Work 9-to-5: I know I’m going to get a lot of tech management mad at me but I’ve seen this go on for 20 years. Working 12-hour days just buys you bugs and burn out. You can do it for a short “sprint”, maybe at the end of the project. But you can’t sprint your way out of a hole. The secret here is to make sure the 8-hour days are not interrupted by meetings, fire drills, and shop talk. Engineers shouldn’t go to very many meetings, outside of the daily scrum. They get bored and ask silly questions.
  • Admit it’s not going anywhere: The current team is your greatest resource. They’ve been working on the problem, they know why the project is late, and they feel bad or mad or just resigned. Get their help and really listen to the suggestions. Honesty will get you for free what bonuses can’t buy. The team should be working for long term company success not a short term project bonus.

These techniques are counter-intuitive, and that alone probably means we are on the right track for breaking out of a recursive situation. As you can probably guess I’ve had more than a few projects go circular over the years. In the end there are no quick fixes. When you finally figure out that you are lost the realization doesn’t make the problem go away. It’s usually a long walk home—even when you are on a straight line.


Worst Ever Paragraph in a Technical Doc

I’m working on my Flash game framework. Progress, which I admit is slow, requires a good understanding of the Flash CS4 Component model. I embarked on this project a few weeks ago without realizing 3 things:

  1. The CS4 Component Model is very different from the CS3 model.
  2. There is very little good documentation for CS4 Components.
  3. Flash and CS4 Components have become the step children of Flex and it’s entirely different, incompatible component model.


I’m not sure why the CS3 Component Model had to go. The major change seems to be that CS3 Comps were based on a subclass of MovieClip while CS4 Comps are based on a subclass of Sprite. This change in inheritance has some great technical advantages but even more practical disadvantages.

MovieClip is a heavy weight object with lots of functionality. It’s a great starting point for components because you have all of Flash’s frame-based animation at your command. Sprite is a superclass of MovieClip and hard-coded to a single frame. Sprite is a great idea, since a many elements in a Flash game are static. Using Sprite-based components means less overhead for the Flash engine to grind through. Sprite-based components are less overhead for the programmer too: Since Flash plays any MovieClip by default you don’t need to include frame management code in a CS4 Component.

That’s all good. Here’s the bad:

CS4 Components can not share the same stage with CS3 Components. You have to choose one or the other!

There are 5 less Adobe-authored CS4 Components than CS3. Some of my favorites were not ported to CS4 including Accordion, Tree, and Window. I can still use the original CS3 set of components but not in the same application with CS4 components.


A quick search of FlashDen lists 236 CS3 components and only 51 CS4 components. This means to me Adobe has been doing a poor job of evangelizing the benefits of CS4 Components or that the benefits aren’t worth the effort. Or, as I suspect, all of the above.

CS4 components can be compiled so that their code is hidden. I hate that. I hope I don’t need to argue the open source model here. But someone at adobe should read the Wikipedia entry. I know developers who want to make money from their Flash components probably demanded this feature. I want to grab these follow capitalists by the shoulders, look them square in the eye, and say “There is a better way!” Look to the Perl community! Look to the Ruby community! Look to the PHP community! None of our brothers and sisters are starving there! Hiding your code leads to a lack of adoption, a lack of quality, and the illusion that you can sit on your butt and no longer have to innovate.

For me, the single biggest problem with the CS4 component model is the scarcity of quality documentation. The books and sites devoted to CS3 components are too numerous to mention. I found only one decent article on Adobe’s DevNet about CS4 Components: Creating ActionScript 3.0 components in Flash by Jeff Kamerer. It’s a very comprehensive article, points out many of the problematic design details that need to be considered when authoring CS4 components, but it’s rambling and needs much editing.

In fact it contains one of the worst paragraphs I’ve ever read in years of reading technical documentation:

You’ll find ActionScript metadata throughout all component code: in ActionScript 2.0 and ActionScript 3.0, in Flash and in Flex. ActionScript metadata comes between square brackets. It has a name that is followed by a list of name/value pairs enclosed in parentheses. For example, here is metadata with the name Inspectable and a single name/value pair, defaultValue/Label: [Inspectable(defaultValue="Label")]

Confusing yes?

What the author means to say (and I don’t blame him, I blame the nameless Adobe technical editor who should have fixed this) is that metadata is enclosed in square brackets and defined by a name and a string value or a list of key/value pairs. The example given is the most confusing part of this paragraph: It would be much clearer if a general example was used like [Name(key="value")]. By using a specific example he makes us hunt for the general hidden in the details. The example uses “defaultValue” as the key and confuses us with the word “value” on the left (the value is on the right). By using the string “Label” for the value the example confuses us with a synonym for a name on the right (the name, or key, goes on the left).

Unless I’m so confused I got it wrong.

Tech Trends

Nope: I Haven’t Stopped Reading

Steve Jobs is a man we all admire and respect. Even when he says something, well, dumb. Back in January of 2008 Steve told a NY Times reporter that “… American’s have stopped reading.” Steve cited this as the reason the Amazon Kindle would fail. In the past year and half the Kindle has been selling pretty well. But it gets even better: E-book readers from Amazon and Barns & Noble are popular applications for the iPhone. There are over 40o book-related applications available for download on Apple’s App Store. One of my favorites is the Kindle for iPhone.

I don’t own a physical Kindle. I don’t need a another electronic device. All the sockets on my power strip are filled! The iPhone is my phone, emailer, broswer, PIM, GPS, notebook, music player, camera, and now e-book reader. While I don’t agree with Steve that Americans have stopped reading I do agree that that specialized single function harward like the Kindle has a dim future. Kindle software, and book readers in general, on small multifunctional devices like the iPhone have a bright future.

Since I downloaded the Kindle software I’ve bought and read 6 digital books in 60 days. But here’s the important point–I would not have read these books otherwise. I don’t get a lot of traditional time to read between a busy startup and a house full of kids. With the iPhone I can read while waiting on a line at the pharmacy, or while sitting on a stalled train somewhere between Newark and New York, or while waiting for soccer practice to fishing up.

When I was younger (by several decades) I used to carry around a paperback book on the off chance that I’d get a moment to read it. These days I don’t have the time to think that far ahead. Downloading and reading books on the iPhone is just so damn convenient it has replaced Blocked as my favorite time biding activity.

The only real issue is Amazon’s digital supply of Nebula Award winners is running dry. Some important books from the list, The Quantum Rose, Parable of the Talents, Forever Peace, and Moon and Sun, are tragically missing. I’m anxious to download Barns & Noble’s Bookstore reader and see if they can pick up the digital slack.

Management & Leadership

Not So S.M.A.R.T

The original requirement for S.M.A.R.T. objectives

I’ve been managing technical people since 1989 (currently at Conductor). It’s surprising how challenging and entertaining it remains. You would think by now I had it all figured out. After 20 years I should have written a book on the subject with a catchy title like “Who Moved My Submit Button?” or “The Seven Habits of ADD Engineers”.

But no, gross generalizations about managing people that can be effectively applied to real-world situations elude me. I’ve developed a lot of my own theories and tested out quite a few of the more popular ones on unsuspecting victims but when it comes to helping individual contributors succeed my mileage still varies. Like the seemly well thought out instructions for assembling IKEA furniture the map is not the territory.

My message to you here is that management is an art–not a science. It requires a lot of empathy, experience, and thickness of skin on both the part of the manager and the managed to get something useful out of the relationship. Servant Leadership, Situational Leadership, MBOs, and the OODA Loop all get chucked out the window when you’re sitting down with a real person at performance review time and really and truly want to help.

One particularly pernicious management tool is the so-called S.M.A.R.T objective. It’s a seductive idea that seems to make perfect sense. Like mom, apple pie, and Bruno, S.M.A.R.T objectives are one thing we can all agree on. After all who wants to write vague, assay-required, guesstimatable, unparalleled, eternal (V.A.G.U.E) objectives?

If management technique can be expressed as an actual word–beware! Did the author rig the technique to fit the word? If the English word for “smart” was spelled “snort” would objectives be Smart, Normalized, Obvious, Relevant, and Time-bound?

I have the suspicion that SMART objectives predate the Internet. Back in the days when the day had an end, distribution took time, and distance mattered, every activity of value had a physical manifestation. SMART objectives seem to want to be very “specific” things that actually get finished. In this Internet-age nothing is finished! The goal is to get it out before it is “done” so you can get comments and feedback. Is Microsoft Windows or ever “done”? Nope. No software or service is “Time-bound”. Heraclitus would have loved SaaS.

“Measurable” is good. It’s nice when you can tie a number to something. Take page hits and clicks. They seem like nice concrete numbers to measure success on the web. Talk to an engineer who knows something about HTTP, about fraud, and about packet loss and pages hits turn into very soft abstractions while every click becomes suspect. The fact is that measurable things require a judge. In today’s empowered self-managed work force there are no judges—just collaborators. Even your boss is a collaborator.

Don’t get me started with “attainable”. Even 20 years ago I realized that if goal is to be challenging it can’t be obviously attainable. Why bother? Don’t tell me a goal can be both challenging and attainable. That’s a Jedi Mind Trick! Like Jumbo Shrimp or Conservative Investor. (OK, an oxymoron.) I’m not paying you for the attainable. That’s already on the market.

The only tool in the SMART objective toolbox that survives critical thinking is “relevant”. After all you would not want to confuse the employee with irrelevant objectives like meet your deadlines while standing on your head. But that’s kind of insulting to the manager. I mean if you have to tell me to make my objective relevant you should also remind be to have them be rational or not stupid. I bet relevant is there because SMART has an R in it.

So how should you write up objectives? If it makes sense for the situation by all means write up SMART objectives! On the other hand, your employees (collaborators really) might benefit from VAUGE objectives. Especially if they are smarter than you… You did hire people smarter than you?

The ideas behind VAGUE objectives:

  • Vague: You don’t know exactly what to do. The employee has to find out. You job is to point in the right direction not draw the line down the road. The answer is off-road.
  • Assay-required: Don’t measure—experiment. It’s the only path to reliable knowledge.
  • Guesstimatable: I don’t know if you can do it. I think you can but there is some risk of failure. This keeps you from feeling dead inside.
  • Unparalleled: If goals should be realistic then nothing impossible would get done: Landing on the Moon, electing black men president, creating a popular phone without a keypad.
  • Eternal: Nothing is ever finished. Keep refining, iterating, upgrading…

Always Start with Da Face!

The hardest part of creating a Flash game, after figuring out the idea behind it, is to figure out what it will look like. Once you have those two tasks out of the way the actual coding is easy: The design tells you what to code.

But first -> Inspiration!

Since this game will feature multi-player interaction I’m going to borrow from the greatest of all multi-player games: World of Warcraft. In WoW you get to battle monsters and other players rendered in an epic 3D virtual world. Sweet! In my little game you’ll do the same, only with dots instead of the epic 3D. A lot of WoW-play boils down to a race between DSP (damage per second) and HSP (healing per second). So that’s what my game will do: Let players discover who can keep their little team of dots alive while killing the other guy’s dots.

Like the game the UI will be inspired by Blizzard’s magnum opus as well. On the left will be unit frames that display the health, mana, and experience of your team. On the right will be unit frames that display your opponent’s stats. In the center will be an animated dot-view of the action. Across the bottom will be command frames: Click these guys and you can target and attack bad dots or help your good dots. Lose and you hang your head in humiliation. Win and you gain experience to progress to the next level. Maybe even some loot will drop!

At this point I have a rough idea and a very rough UI design. I like to work it that way. I’ve found it’s a big waste of time to spend hours designing something what will just end up trashed as the concept evolves. It’s time to code…

I’ll need four major classes: An application class to manage everything, A view class to display stuff to the player, a state machine class to track what is happening to who, and a game engine class to control all the action. (This architecture is called Model View Controller (MVC) and is at the heart of almost any well written GUI application.)

I’d like to use a hash map to store the current state of my objects in the game. I don’t really need the efficiency of a hash map. But my ideas are very rough right now and things are going to change. Store keyword-value pairs will make managing change easier than hard coding properties into ActionScript classes. The Adobe documentation suggests I use the Object class to create a fake hash map (associative array) or use the flash.utils.Dictionary class. But I won’t get cool Java-like collection interface convenience functions 🙁

Luckily I found: AS3 Data Structures For Game Developers by Michael Baczynski. Thanks Michael! This library includes Hash Maps, Queues, Trees, and Stacks and more. Hard to believe ActionScript 3.0 doesn’t include them by default.


Getting Back Into Flash!

It’s been a couple of years now since I wrote a Flash game. They’re fun and easy to write and don’t take much time. For me the fun is in the design and programming. The result of the process might be a playable game–but I make no promises.

I’ve taken down all my old work, since it was out of date and I barely functioned anymore. That’s the problem with programming: The platforms keep changing. The Flash CS 4 of today is a whole new ballgame and I need to get up to speed quickly so turned to my favorite Flash platform how-to author: Colin Moock. I think I have every book he has written on ActionScript that is published by O’Reilly. Since beginning of the 21st century Mr. Moock has exhibited genius when writing about Flash programming.

Moock’s current Flash programming book is Essential ActionScript 3.0 from 2007 which is old by Internet standards. But I’m a couple of years behind the times and EAS3 got me up to date quickly: Subclass Sprite and Shape not MovieClip, how to use events, how to animate, how load resources, how to redraw the stage intelligently. Nice stuff that is scattered all over Adobe’s support site. Apparently there is more Internet info on Flash and its buddies ActionScript, Flex, MXML, and Air then on the Mac OS X APIs!

One technology I want to use in my game is Moock’s Union Platform. It looks like a quick and elegant way to incorporate multiple users into my game. We talk a lot about the power of social networking and data mining but under all that talk is the power of multi-user applications. I remember years ago when I worked at Apple asking Kurt Piersol what comes next after OpenDoc (the hot technology of 1997) and he said MUDs: Multi-User Dungeons. And I said Huh? Isn’t that a buch of guys fooling around in a fantasy world online? Yep, he replied and smiled mysteriously.

12 years later I get it. Any with Moock’s help I’ll put MUD goodness into my little Flash project 🙂

Self Improvement

Sorting is the most important thing you can do right now!

You need to stop reading this blog post and do some sorting. I don’t mean later today, when you have spare time, I mean right now. Don’t worry, I’ll wait.

OK, did you do it? If you did leave me a comment about what you sorted (prioritized, categorized, arranged, screened, rated, grouped, graded…). If you didn’t leave me a comment about why you didn’t.

Enough with the homework.

It took me a long time to figure out that sorting is the most important thing to be done.

If it didn’t take you as long as me to figure it out gratz! You are winning the game of life.

But if you need more hints here are my reasons (in order of importance) why sorting is the first thing you do at in the morning and the last thing you do at night.

  1. If you don’t sort the odds are that you won’t do the most important thing first. You’ll most likely do the most urgent thing first. There are wickedly huge differences between urgent and important. Ask Keen PDA if you don’t know the difference.
  2. You have to do a lot of sorting to get good at it. Putting your priorities in order is actually hard work (I think that’s why most people don’t do it). You need to become an elite performer in sorting and that takes practice–lots and lots of it.
  3. Not everything you want or should do is going to get done in your life time. You have to make choices. I know, making choices sucks. But that’s the way it is for us mortals.

I have this great book, The Order of Things (There is one other, more important book, by the same title and you should read it first). I bought TOOT back in 1999 from the discount bin of a bookstore in Palo Alto. I was working at a startup, BitLocker, and we thought we might want to create an online database with most of the world of things already represented. The big problem with databases, after you have the right schema, is data entry. Its boring, easy to screw up, and not fun to double-check. So I wanted to pre-populate the BitLocker with all the bits that a consumer might want to track–All the CDs ever released, all the comic books ever published, all the automobiles ever manufactured. Then when you wanted to track your collection of comix it was just a matter of search and selection (something that is actually fun and easy).

I thought TOOT might help me design the UI of BitLocker and prioritize the search results so that the bits would appear in a natural order that the majority of users would find sensible to navigate. But I was doing things for BitLocker in the wrong order. What we needed first was a good business model. Instead we build a cool Java-based online object database with an early version of an AJAX UI.

Naturally BitLocker’s bubble burst along with the rest of the dot coms. So stop reading this and go sort your to-do list!