Saturday, February 10, 2007

Thirteen Things In Which I Believe

National Public Radio has been doing this series called This I Believe, audio essays by listeners about their core values and fundamental believes. The series was actually started back in 1951 (before my time, as hard as that is to believe) by Edward R. Murrow. I like the series a lot, but I find it hard not to think about that old Steve Martin bit (“I believe that Ronald Regan can make this country what it once was: an arctic region covered in ice.”). Some of my core values, at least those pertinent to this blog, are a little too esoteric for NPR, but perhaps not to my readers.

1. I believe that developers should get out more.

Specifically, that developers should interact directly and frequently with customers. And not just on the telephone, with their manager hovering in the background. Or at the customer briefing center, with nervous account executives looking on. But at the customer site, watching to see how the customer uses the products that they develop. Unfettered and uncensored. I learned a lot in my various travels to customer sites, even though it is frequently an awkward and painful experience for all involved. Yes, a few companies will probably go out of business because of this. And some others will take over the world.

2. I believe in controlling the long-term cost of code maintenance.

Some studies have shown that maintenance of software constitutes fully two-thirds of the cost of the entire software development life cycle. Other studies have suggested it is even more. Design, coding, unit testing, and integration makes up about one-quarter of the cost. I believe that most companies developing software products completely miss the boat on this. Time-to-market is vitally important, no doubt, but quickly churning out code that is difficult to maintain over the life span of the software product only saves money in the short run. In order to be economically maintainable, software must be designed to be easy to modify.

3. I believe in managing the emergent behavior of large systems.

I have written far more words than anyone cares to read on the need for rate control in real-time systems. But I believe that rate control and other mechanisms for managing emergent behavior are necessary for building large systems that are both scalable and robust, and which can be reliably evolved over time. All things change, but all things do not change at the same rate.

4. I believe in designing systems to expedite field troubleshooting.

I don’t just mean some log files. I mean mechanisms like SNMP MIBs or JMX MBeans or at least some counters available via a debug console that allows developers to peer directly into the heart of a running system and see what it is doing or has done. Log files too often turn out to be a fire hose of information, useful for post-hoc analysis but useless while the system is running. Some carefully chosen counters or controls are crucial to gathering needed forensic data in a timely manner so that a misbehaving system can be quickly returned to a running state. This may also mean embedding some simple (or not so simple) tests in the production system that can be run at the customer site to facilitate the rapid indictment of specific components.

5. I believe that all development is by nature fractally iterative.

There are loops within loops within loops, all feeding back into one another. It’s not called the development cycle for nothing. At the very highest level, products need to be given time to mature and improve to be successful. Otherwise a company ends up shipping nothing but prototypes to increasingly disgruntled customers. At the lowest level, tools are needed to make code easy to refactor. Somewhere in the middle, expect designs to change over time. No design ever survives its implementation. The development process - any development process - is by its nature fractally iterative, whether you want it to be or not.

6. I believe that my best ideas do not occur while at work.

I get my best ideas when I first wake up in the morning and haven’t even gotten out of bed yet. Or while I’m at the gym, sweating and pumping a lot of highly oxygenated blood around. Or while I’m reading something totally unrelated to whatever I’m working on. Or while I’m talking with my wife. Or while I’m petting the cat. Or while I’m discussing the latest episode of Battlestar Galactica with my friends at lunch. If you’re the kind of manager that thinks people should “give it their all” by working a sixty hour week, then you have set the stage for where it is impossible for your people to give it their all.

7. I believe in the Golden Rule.

Except that I may phrase it as “Others will treat you as you have treated them.” For example, if you consider all of your people temporary employees, they will treat your company as a temporary employer. If you ask your people “What have you done for me lately?” they in turn will ask themselves “What has the company done for me lately?” In engineer speak: for every action there is an opposite and equal reaction. Please don’t act so surprised when this occurs. It is a sign of immaturity on your part.

8. I believe in a diversity of culture and opinion.

Study after study has shown that organizations with greater diversity of culture and opinion make better decisions. Look around and see if all of your employees are about the same age. Or the same nationality. Or all the same mindset (which probably really means: all agree with you). If so, you have created a culture which will produce no innovation, which cannot think out of the box, and which will be risk adverse. Maybe you preferentially hired clones of yourself. Or driven out all dissent. Or implemented hiring policies that were extremely selective as to skill set. In any case, you have crippled your organization. As a friend of mine says: “If you and I always agree, one of us is redundant.”

9. I believe that no one has ever shipped a perfect product, and you won’t be the first.

“The perfect is the enemy of the good.” (Voltaire) You need to ship a product so that you can book revenue. You need to book revenue so that you can continue to improve the product. All good things ultimately come from booking revenue, and you cannot book revenue unless you ship a product. This is not an excuse to ship a crappy product. But it is a rationale to ship a good enough product. Besides, if you ship a perfect product, what does your employer need you for any more?

10. I believe that most high technology has a half-life of about five years.

This means if you write those kind of job ads that list two dozen specific technologies, and if by some miracle you find someone with those exact qualifications, that person may not be the person you need a couple of years from now. It may be tempting to say “Okay, when the time comes, I’ll lay them off and hire someone else.” This ignores the rule of thumb that replacing an employee costs an organization anywhere from two months to two years fully loaded salary. Only the very largest of organizations can survive this, and even they will end up spending money that could have been more effectively used elsewhere. Hire people that are adaptable and fearless, so that they can tackle the next big thing, whatever that may be.

11. I believe that it is a very good thing indeed to work hard with smart people to achieve a common goal.

More than a decade ago I worked on a large team to produce the most complex single functional unit of integrated hardware, firmware, and software ever produced before, or since, by that particular development organization. The product is still in routine use today by dozens of Fortune 100 enterprises. The experience of that project affected the engineering team so much that to this day we still keep in touch and have annual reunions, even though we have mostly all gone our separate ways. There is simply no better thing in life than to work hard with a bunch of smart, funny, highly motivated, diverse, occasionally weird people to successfully achieve a common, challenging goal.

12. I believe that people are complicated, and that's a good thing.

I am a member of both the National Rifle Association and the American Civil Liberties Union. Of the American Motorcyclist Association and the American Association of Retired Persons. I like activities that include the possibility of lethality (and I have the scars and the titanium in my body to prove it), and ballroom dancing. I am currently reading the Harvard Business Review, a book on Java Micro Edition, and the latest novel by Jimmy Buffett. People are complicated, and that's a good thing. It is so tempting, for both engineers and managers, to try to plug people into stereotypical categories in an attempt to make dealing with them easier. But all it does is result in getting constantly surprised by what people do when they insist on stepping out of the box in which we placed them. The complexity of people is in fact their greatest strength. It is why Artificial Intelligence has been ten years out for the past forty years.

13. And, like Steve Martin, I believe in eight of The Ten Commandments.

2 comments:

KLH said...

with regard to #6, I'm curious: Do any companies exist in the U.S. that do not expect 60+ hour work weeks out of their employees?

Chip Overclock said...

I have no idea if these two things are connected, but this article in the BBC News, http://news.bbc.co.uk/1/hi/business/6502725.stm, cites the World Economic Forum as saying "US 'no longer technology king'". The article ranks the U.S. number 7 behind countries like Denmark (1) and Singapore (3). I also believe that you can interpret statistics to prove just about anything you want to. Still, interesting.