Everything is a CRUD app

12/05/2018

Most software people get inspired by the big players; Google, Amazon, Facebook, Netflix.

Before that it was MySpace, Bebo, Friendster, Yahoo!.

Before that, is before my time, AOL?

I bet a lot of people in the software industry have had the same thoughts as I am having now. Most of the time we develop something that meets the needs of the business. I say most of the time, because sometimes we develop something that doesn't. We break a problem down into its component parts, which ends up being a table or two in a database, and we Create, Read, Update and Delete from those tables. We pride ourselves on making something that seems complex, easy and understandable.

And then we get bored.

We think that developing a few applications for multiple areas of the business is now beneath us. We must move on to something bigger, better. I'll break down the four companies CRUD-like features in the first line of this blog. All made up of course, I have no inside information.

Google

They want to index each page on the internet. Each page belongs to one or many domain names. Each page has some content. Each page will link to other pages. You can easily model this in a relational database, and you will end up with a terrible version of the internet.

Amazon

Products have descriptions, images, sellers, shipping locations.

Facebook

Users have profiles, who have posts, which other profiles Like.

Netflix

We consume films, which have actors, directors. Or TV programmes, which have series and episodes.

The above can all be modelled in a 'boring' database with 'boring' queries to retrieve and update it.

So what is interesting about these guys? Scale, what they have done with it, and interlinking data to get there.

Google have a knowledge graph of the internet. You ask who is Barack Obama's wife, and it tells you.

Amazon recommends you products it thinks you will buy.

Facebook shows ads from your interests, likes, and other network influences.

Netflix gives you an easy way to watch stuff, the interesting bit it how it uses one third of america's internet bandwidth.

So where is the interesting bit in the enterprise?

It is in the middle. How the business interacts internally. In the enterprise you may have separate applications for different departments, they may need to talk to each other, all of a sudden you are given the processes of two or more departments of the business and you need to make them interact. You now have the bigger picture.

You will still break the bigger picture down into component parts, because you want systems to be independent, decoupled, testable, individually scale-able, resilient, etc. All these properties are useful and have value.

IT departments are starting to get a bigger influence on how companies work. I am not talking about the modern, technology first companies. I am interested in the companies who have been around for a decade or more. The people writing the software get access to all the intricacies of where the company puts their processes, their money, their people. You start joining up the dots.... what if this system could take on some of the work of this other system, what if this could talk to that, if that happened then we don't need to support this legacy system. Sounds easy right?

Here comes the hard part

Conway's Law - "organisations which design systems ... are constrained to produce designs which are copies of the communication structures of these organisations."

The company has departments because people said that there should be a department who should be responsible for something. Persuading people that two systems should talk to each other is the hard part, actually making the systems talk is (relatively) easy.

Making IT departments work isn't about being interesting technically, it's people. As is every other walk of life.

Get to know the processes of the company/department/domain first. Then build the application. Then do it again for another application. Start joining the dots. Get non IT people on 'your side'. Propose a solution to remove technical debt, remove costs, increase developer moral.

You will be surprised how much influence a software development team has on the enterprise, you just need the bigger picture. Strive to get it.

Tags: