Software Development and Government

Random thoughts while walking at night: The structure of government can be a bit analogous to the structure of a software development project.

The Constitution is like the requirements for a project. It’s kind of high-level and (I believe) shouldn’t be too detailed. Supposedly the requirements are written by the client. For a country like the Philippines the client is “we the sovereign Filipino people”.

Slight tangent: I used to know this guy who was one of those rabid “we need to amend the constitution” types and he asked me to review a “mathematical model to track the budget as a function of tax collection and monetary policy” that he wanted to include in a proposed new constitution. I told him I didn’t believe such detailed rules shouldn’t be in the constitution – that would unnecessarily tie us down to a specific model that we may or may not regret later on. I ended up declining to help him with his strange hobby.

The Legislative branch are the analysts. They make the detailed specs/laws to define how we’re going to satisfy the requirements/constitution. In a real project, the client usually signs off on the specs. In government, we supposedly sign off when we vote for the legislators.

The Executive branch are the developers. They’re responsible for implementing the specs/laws in order to fulfill the requirements/constitution. They can decide the technical approach to use, as long as they satisfy the specs and the requirements.

The Judiciary is the QA, they review the work of the developers/executive and make sure they’re following the specs/laws and adhering to the requirements/constitution. Sometimes they even have to review the specs/laws themselves to make sure they aren’t contradicting the requirements/constitution.

Sometimes a project is so large and you need to form smaller subteams to specialize in different areas or modules. That’s called Federalism. Or maybe local government.

Sometimes one person handles specs, development and QA. That’s called dictatorship.

Sometimes people want to rewrite or amend the requirements/constitution. That’s called agile development. Or maybe scope creep.

Sometimes the bureaucracy needs to be reorganized to be more efficient. That’s called refactoring.

The big difference between government and software projects is that in software projects, team members are selected based on meritocracy. In theory at least, you choose the best people for the job. In government, who gets the job is determined by who is best at bamboozling the largest number of people to vote them in. Maybe someday we’ll get a meritocracy in government too, but until then I’m probably sticking to software development.

Related posts:

Leave a Reply

Your email address will not be published. Required fields are marked *