Free Yourself
Code development
TODO → Development → Code Review → UAT Testing → Prod Deployment → Prod Testing (Regression test is ok).
Code Review:
If the code is too complex and no one can understand it for review, you won’t have any vacation or day off. This is because you will need to maintain your code indefinitely, without any assistance from others.
Testing:
Test planning
- Though it isn’t typically the responsibility of a software engineer to define a quality assurance test plan, it’s still essential to provide some strategy and guidelines. This helps others understand its purpose, functionality, and the expected outcomes.
- QA teams provide an independent and objective assessment of software quality. If software engineers were to write test plans, it could introduce bias, as they might unconsciously overlook potential flaws in their own code.
UAT Testing:
- This is required even for Hotfixes. First, merge it to UAT for testing before moving to Production with a Hotfix. When problems occur, we don’t want to introduce more issues into a malfunctioning Production environment; it’s essential to act quickly. An exception would be a P0 scenario, like a security breach, which might require a manager’s signoff or a pair coding/debugging session. In this situation, the entire team focuses on solving the problem.
- If you can’t test in UAT or by the QA team, halt the process for your safety. You’re independent; don’t become a slave to your code, or you may become entwined with the system in the near future. Attempt to conduct both new and old tests in UAT, treating it as a breakable production. If you claim to be rushed and have no time for development, choose between a lengthy development process or constant hotfixes. The choice is yours.
- However, if testing is truly not feasible, such as backend tasks that require frontend, we can accept feature testing. Or, if you can provide proof of work and a guide for someone else – perhaps another software engineer – to test it, then it will be accepted. If you’re unsure of how to test it, stop writing code. We can find tasks for you that don’t involve coding. Intensive Unit Testing with over 80% coverage can be considered a form of testing, but don’t be overly confident in it alone. Remember, we are all prone to making mistakes.
Documentation
- Each squad or service typically maintains its own documentation somewhere, even within the code repository. However, since services are built to interact with others, and cannot generate data independently, a standard documentation for operational tasks is necessary. We don’t have something extensive like protobuf, so we need to adopt our own approach.
- From now on, all services, pods, cron jobs, batch jobs, workflows, or anything else running in the system must adhere to the general centralized documentation to provide some basic information. If a non-compliant service is discovered, it could be terminated without notice, and the owner will be held responsible.
- Here’s a case in point: If your service doesn’t have an assigned owner or manager, who should we contact when things go awry? How can we audit, allocate costs, or assign responsibility during meetings? If your service doesn’t detail its resource requirements, how can we determine the number of services a single machine can run without risking resource starvation? Without documentation, how can we identify the root of the problem and determine the best solution?
- The ultimate goal is to submit a birth certificate, in an appropriate format, for each object in our system. Ideally, this could be accomplished without any bureaucratic processes for easy deployment. However, for now, we need to use pen and paper for this task.
Monitoring and Alert
- Would you leave your child alone outside in the dark? Could you sleep without knowing your child is safe in bed? Monitoring provides peace of mind, allowing for a good night’s sleep. A good parent sets up monitoring metrics, establishes a way to receive alerts, and formulates a basic process for responding to these alerts. While safety is a service provided by the police, they usually arrive after an incident has occurred. It’s better to prevent any issues from happening in the first place.
- One crucial thing to remember is the need to balance between meaningful alerts and minor system hiccups. Please learn from “The Boy Who Cried Wolf.” By the third false alarm, no one will come to save you.
Fighting for your own Freedom
I understand that managers often want tasks completed by yesteday and expect us to work at double our capacity. With each passing day, we improve, and continuous effort can multiply our potential. For instance, it took me four years of training to finish an ultra-marathon. The person I am now is not the same as the person I was four years ago. So, it’s possible to operate at 200% – it’s just a matter of time and effort (10,000 hours to become an expert in any field).
One thing I’m certain of is that if we adhere to this Manifesto, we can achieve a sense of peace and freedom.