Monday, November 17, 2014

Why doesn't work

No one should be surprised that the federal government can't do database interfaces very well. Their computers are obsolete, of course, as are the development platforms they use. They require their programmers to use obscure programming languages that they are not allowed to fix. But the worst barrier between you and the database of your choice is the rigid hierarchy that infects the halls of power.

We know how to develop good technology. Silicon Valley has numerous companies that do it quite well. Google and Facebook come to mind. But the federal government pays absolutely no attention to the rules of program development, among which are the following:

1. Hire the best engineers you can find. Forget about Ivy League credentials and teacher recommendations. My company once hired a high school student who had been helping them with user testing. They waited until he got out of high school, though.

2. Give your developers their head. These developers are like spirited racehorses. If you tell them they must wear a suit and tie and be in the office at 9 am, they will bolt for the nearest exit, where they will find project managers eager to hire them. 

3. Make sure your engineers are creative and flaky. Encourage them to stay at the office by giving them whatever they need. Google gives them espresso and food. There are also game rooms (see below).

4. Let them goof off. My favorite software company developed video games. Anyone in the company could play video games at any time. That was part of the culture. In other companies, the department snitch spies on you and tells the manager you are goofing off. The Roman philosopher Seneca explained it this way: Reading and writing are opposites. You must do both, like breathing in and breathing out. Programming and playing are opposites. You can't have one without the other. One company I worked at had a big red nerf bat. The project manager came to your cube and hit you with it if you were late with your code. The same company had super-soakers (squirt guns). Members of the development team would sneak up on someone and spray him with water.

5. Pay them time-activated bonuses. These usually take the form of stock options that don't vest until a person works for the company for several years. This keeps them working for the company and gives them an incentive to keep producing.

These are just a few of the effective practices used in the computer industry to produce  high-quality software. Here, by way of contrast, are some of the practices of the federal government:

1. Always hire graduates of top Universities. Federalistas believe that they should hire people with good grades who are skilled at pleasing their professors. These people should fit in well in a federal system that prizes pleasing your boss above all other virtues.

2. Always give preferential treatment to veterans. Unfortunately, this hiring practice works against finding good programmers. Veterans learn how to follow orders. Good programmers learn to disregard orders whenever necessary. Their attitude is different. They know that managers can't code, so they don't pay attention when managers tell them how to do something. Good managers, on the other hand, don't give explicit orders to programmers, because they know programmers like to figure things out on their own.

3. Hire stable workers who will stay on the job for many years. This works well when you are looking for people who need to fit in to a hierarchy to be happy. Such people make terrible programmers. Good programmers find problems in other people's code and tell them about it. Good programmers abandon a structured design when it isn't working. Good programmers find new and innovative ways to solve problems.

No comments: