Politics and coding

What forms of politics occur in coding? Well in particular I want to explain how teams can operate and be successful using different forms of government as the basis to form teams.

Our typical team will contain some software engineers, a team lead, some testers and a project manager.

Democracy

Let us get the easiest one out of the way first. This form is based on equal voting among the population. In our team it means everyone gets a voice and decisions are made using referendums. This means there will be a proposal with some outcomes to vote on, does not have to be a yes or no question, and then everyone gets to vote. Whatever the majority votes that will be the direction to head in.

This form will be beneficial when you have a lot of experienced people. At least the majority of them should be experienced. Everyone brings some point of view to the table and that will make discussion and these votes meaningful. It does not work if there is a polarization in the team. Be mindful if the team is experienced but headbutting a lot then this form won't work.

Oligarchy

This form of government consists of the ruling of a few that have power. Mostly persons or families. If we stick with families for a moment we could say only the most senior of their kind can operate. So the team lead, project manager and senior tester. They make all the decisions.

This might work if the team is somewhat bigger and you only have a couple of all round experienced people that happen to be distributed somewhat evenly among the coders, testers and project management. The advantage to this form is that a select few bear the responsibility and accountability for the success so if they are all well aligned then it will work out great. The disadvantage is that they can all have the same blind spot and therefore something might go wrong because of it.

Technocracy

This form of government consists of having the most expert in their field on the position and making decisions. Relating this to our team you will defer the decisions on infrastructure to most expert infrastructure person, the decisions on architecture to the most expert in architecture and so on. Regardless of position. This works really well in a small to mid sized team where there might be a lot of persons that are well versed in a lot of different aspects of software development. This also works when there are a lot of experienced/senior staff on the project to maximize the output and also give everyone a meaningful role and responsibility. Divide and conquer will be applied to the different topics and it is easier to make a project in to a success knowing the respective expert is put to great use.

Dictatorship

This form can also be seen as despotism, where only a singular figure holds the complete authority. This system might seem wrong, as it feels wrong. However it might work if the team is really really small with a few people and one singular person takes all the decisions. This breaks when the team is bigger than a particular size or when it becomes multi-disciplinary.

Meritocracy

This form of government gives power to those based on talent, effort and achievements. This seems closely related to the technocracy but it differs in one subtle way. This one does require you to be an expert, just have a good track record. This informal one works the best in young teams and ones where trust has been established. If you take a look at what a person has done rather than the statistics on their resume and also how they come across it might be that a junior is put on a singular task that is well within their capabilities. This is the most difficult to sustain though as talent, effort and achievements are a movable target and it shifts. Therefore the responsibilities in the team should shift and most people are not comfortable giving up a position of power.

Anarchy

This form of government means there is no form of government and there is an active rebellion against hierarchy. There is no formalized structure in place, no accountability nor are there protocols or processes in place and it seems there is no responsibility. This form again might seem to be a bad thing, not one to strive towards, yet if you have a team of people that are intimately familiar with one another you might not need any formal protocol. The work gets done and everyone feels equally responsible to bring the project to a success. Decisions get made and automatically trusted by the others and there is always the immediate feedback as everyone openly communicates everything to everyone else.

This form is dangerous as it is successful whenever everyone is on point, but a couple of missteps and you are heading into domino effect territory that can lead to catastrophe.

Theocracy

This form of government actually puts a deity in place as the leader. The laws of the religion in question are the laws and there are people in place to enact those laws and make sure it is all done proper with regards to the religion.

This form might seem ridiculous at first and it might be as such, but just think of the people that hold Agile in high regard, or Scrum, or Scrumban or Kanban or any other such thing. Maybe a language, Java or a framework like Phalcon. It does not matter what is placed at the deity level but all follows from it and everyone has to be a zealot to make it work.

This can work successfully if everyone is a zealot and is on board. Just make a cult of things and attract the same minded followers and a theocracy as your form will work excellently.

#devlife #thoughts