Sunday, November 17, 2013

Tips for Software Innovators Inside the Federal Government

This essay was first published at the Code for America Blog.


Tips for Software Innovators Inside the Federal Government

  1. Change the game through prototypes,
  2. Be a samurai: a loyal hacker,
  3. Be fast rather than good,
  4. Stand on the shoulders of giants,
  5. Scrape, don’t bow, and
  6. Be prepared to work outside the system.
1: Change the game through prototypes
A picture is worth a thousand words and a working prototype is worth a million. The federal government is used to suits coming in and talking about how great a system they are proposing to build will be two years from now if they are given millions of dollars to build it.

Shatter that paradigm by showing up with a working prototype, and talk about how great it will be if you get their cooperation in polishing it.

2: Be a samurai: a loyal hacker
The federal government has outsourced its technical brain and understaffed its technical know-how. It is not uncommon for one technically savvy person to be in charge of overseeing millions of dollars of labor without a staff. In short, the contractors have the administrators outnumbered about 30 to one. This is a recipe for chaos and confusion, and the result is terrible performance of contracts in many cases.

Say to the administrators: “I am a hacker, and I have no outside interests or loyalties. I am an expert who can’t be bluffed or intimidated or deceived. I will be your bodyguard, your gallowglass, your samurai. You can rely on me for brutally honest technical advice. With me at your side you will be able to negotiate a better contract and stay more in control.”

3: Be fast rather than good
Scientists need to study what happens inside government buildings, because I’m quite sure all processes are five times slower inside the federal government. Paper falls to the ground more slowly. When you switch on a light, it takes a while for it to reach the corners of the room. Getting a computer takes six weeks. Getting an Authority to Operate takes three months.

The government needs people with superpowers who are not affected by this timespace anomaly. Things that normally take a year need to be well underway within a week and ready for evaluation within a month.

Why? Because this is the best way to reduce risk. To make sure a two-year-long project matches the needs for which it was intended one must strive utterly to get as far as possible in the first month. In order to do that, programmers must be prepared to be sloppy and lock their inner perfectionists in the bathroom for a while.

An engineer who can build a prototype in a month can change the consciousness of an entire organization faster than the government can get a contract written to do the work. The methodologies that have been developed in the last 20 years to develop software quickly really work, and they work even better within government where speed is desperately needed. These are named Agile Methodologies, Extreme Programming, Lean Startup, and so on ad nauseum. Every few years the basic concepts are tuned a little and renamed, but the principle remains the same: learning something real right now is more important than fantasizing about something big a year from now. As Kent Beck has taught us, “You go fast by taking babysteps as rapidly as you possibly can.”
Demand the same speed and transparency from contractors that you demand from yourself.

4: Stand on the shoulders of giants
America invented the “Free as in Freedom” software movement. There is a silent army of intellectuals constantly adding to freely available software. Historians a century from now will look upon it as a great gift that the USA gave to the whole world.

The continuing explosion of off-the-shelf software capabilities is so tremendous that a software engineer now must think not so much about writing programs but about joining programs together. No one person can keep up with all of these capabilities. I love programming, but it is my duty not to program but rather to spend most of my time investigating what others have programmed in order to not reinvent the wheel.

5: Scrape, don’t bow
The biosphere of government software systems is a coral reef, each system built on the grotesquely shaped skeleton of its ancestors. These systems have inertia: users, rules, regulations, entry points, touch points, system interactions. Rather than try to change them, accept that whatever you build will have to be bolted on to the existing reef with as little disturbance as possible. By scraping existing websites, or by using extract-transfer-load tools, you can make something wonderful and beautiful even if what lies beneath it is ugly.

6: Be prepared to work outside the system
The government is risk-averse and highly responsive to outside pressure. It fears embarrassment. It loves praise.

If you can find one example of an agency doing something, it is much easier to convince other agencies to follow that example. Just as entrepreneurs must be prepared to go hat-in-hand to many different potential investors, be prepared to look for champions of change outside your own circle.

Finally, when you encounter resistance, ask yourself, “If I were not a government employee, what could I do to solve this problem?” Citizens want to help. Find them and utilize them to expand the bounds of possibility.

--Robert L. Read