KISS (or “Keep it Simple Stupid”) is a principle which was created in the 1960s apparently.
Certainly it was something we talked about when I started programming.
It is as true now as it was then.
Apparently Einstein said that ““Everything should be made as simple as possible, but no simpler.” He was a smart guy!
The trick in programming is to resist using something because it’s clever, or because it’s new, or because it’s trendy.
When something is simple, it easier to get right, it’s easier for others to understand, and it’s easier to maintain and enhance.
I have two stories to illustrate this: one new, and one very old.
The old one was when I was working in Shield Life and going to Trinity College in the evenings.
On my course I learned how you could create files where each record had a pointer to the next record (and optionally a pointer back to the previous record). So when you found the first record in a set, you would easily navigate to the others. And you could have another chain of free records which would could use when you needed to create a new record.
So we had a requirement for an “Outstanding Premium File” (OPF) which would store all of the premiums which made up an individual Direct Debit for the bank. Then if the Direct Debit was declined, you could work out which policies had not been paid so that you could take appropriate actions. I decided that this was a perfect use case for a file with record pointers.
I developed the program and it worked perfectly.
The problem was that, after I left the company, the team decided to re-develop the program using a more traditional approach which everyone could understand and maintain.
So I had ignored the KISS principle and I had developed something that other programmers did not like. I had been seduced by something that seemed to be very clever.
The second story is recent. We were developing a solution using SharePoint Online, SPFx, Azure, etc. and the architect and developers decided to use a Term Set in SharePoint to hold data which could have been held in a lookup list.
I could not understand the purpose of using a Term Set for this. Term Sets have an important role to play in some circumstances. But to me it looked like complete overkill for a lookup field.
And it turned out that it introduced a number of unnecessary complexities:
- We needed to have separate term sets for test and production. Using lists, it would have been as simple as having two sites and independent lists in each.
- We had to add values to lists using PowerShell and these scripts were made more complex and more troublesome because they had to populate the term sets
- The client wanted to export the data to Excel. We used the native export at first. But the term set columns were weird when exported to Excel. In the end, we did a custom export.
Einstein was right: it’s best to keep everything as simple as possible, but no simpler