checklist.txt 📋
Intro
A checklist is a useful tool emplyed by professionals in many industries - not so much by programmers tho. We mostly automate tasks yet we still do quite a bit manually relying on our memory and experience. One of those tasks is thinking.
As studies shown memorized checklist is as good as having none:
The use of memorized checklists was similar to not using any checklist at all; hence the use of written checklists should be encouraged, instead.
In an attempt to improve quality of my work I started this project which aims to gather things which we should not forget to think about while developing software. The list does not provide any instructions on how to complete any of it's tasks - as it's not a manual:
It differs from an instruction manual or operating manual in that it does not normally provide details on how to perform the steps, as it assumes that the operator is competent and familiar with each step.
There is also no particular order to the items - the numbers are just for ease of reference.
So here you go and good luck to you pal 🫡
Programmer's checklist
- Do we really need this?
- Can I remove this?
- Can I make it simpler?
- What will/can change?
- What is the min, max expected value?
- What is the most common expected value? Can it change?
- What will happen on boundary values (0 - 65535)
- What will happen if there is no value?
- What will happen if value is really big or really small?
- Can the equation overflow the type?
- What are the usage numbers?
- How many users we expect? Will we have more?
- Are these distributed uniformly? (in time and space)
- Can I batch the operations? Process many at once?
- What are the assumptions? Are there any hidden ones?
- Can I assert those in code?
- Can we change the assumptions to make the code simpler?
- How to test this? Will the test be actually useful?
- On what kind of hardware will it run? Which platforms?
- What are the priorities?
- Are there any low hanging fruits?
- Have I handled all possible errors? Is there one more?
- How can I limit errors in the first place? Maybe change assumptions?
Design it with maintenance in mind.
Time spend on implementation is always shorter than the lifetime of the code you wrote. So it's only logical to spend a little more time on better and simpler implementation which will help you with troubleshooting, modifications and have less bugs in general.
This is not only smarter but also way cheaper in the long run.
more to come...