We all know how teamwork is so amazing, right? Well, what if we extend this idea further from just your classmates in the room or your co-workers on the team to include the whole internet? This might not be possible in your job, because you might work in a large company, or produce an asset that is not so easily digitised, but what this does apply to is software. Let’s first take a step back and identify what is so great about teamwork in the first place.

Why is teamwork so effective?

When you have multiple people on a team they are given the freedom to each do the thing they’re really good at. The freedom to specialise. The designer can work on the packaging of the product, while the engineer figures out how it’s gonna be made in the first place. If one person was responsible for both engineering and designing then he wouldn’t do as good a job as two experts who can fully dedicate themselves to mastering their fields.

So as developers we should do the same thing, because while you might think programming is one field, it’s really not. If you were building a mobile app you could specialise in animation, accessibility or preformance (making it faster).

That’s if you’re making a basic app. You get more specialisations for more specific requirements, for example an app connecting a smart watch to your smartphone needs someone who knows how to use bluetooth.

If you had one guy who was responsible for giving the app fluid animations, bringing it up to speed with accessibility standards, optimising it not to use too much battery power, and building a system on top of bluetooth to communicate with the smart watch, then you wouldn’t have a good app.

A few real world examples.

to make the software running on a playstation is no simple task, and i’m not talking about the games. The base system has to insure that:

  • when you click the button, the thing powers on.
  • when you select a game, it launches.
  • when the game hits a bug and crashes, it doesn’t crash the whole system with it.
  • A hundred other things

So did Sony build all of that themselves? Of course they didn’t. there is a project called openBSD that already does a lot of the basic stuff. Playstation developers just built on top of open BSD, so now they could focus on the more niche parts of the playstation operating system.

A similar story happened with android. Google didn’t build the operating system from the ground up, but used the linux project as a starting point. Linux also offered a lot of the basic needs of an operating system. Google developers then focused on (for example) programming touch controls. Something very niche to a smartphone operating system.

Android wouldn’t have been released with the feature set that it did if there hadn’t been symbiosis between the developers of the linux project and android.