TL;DR. You don’t need continuous integration (CI) if you are just a solo developer or just developing a trivial Go package. In other words, you don’t need CI if you are not developing large-scale team-based software.
Continuous integration is for the following:
- If you have a distributed version control system (like GitHub)
- If you are developing large-scale software with lots of contributors
- If you believe in test-driven development
In contrast, here is a quick read on why testing is considered evil!
So if you’re on the camp who considers testing as unnecessary evil, welcome to this viewpoint.
Testing whether in the small (unit test or integration test) or in the large (running in production like Chaos Monkey) is a classic case of Ludic fallacy. Don’t mistake the controlled environment as the real production environment.
In production, you may encounter bugs that will not manifest itself in a controlled environment.
For small business logic (like computing a payroll of a person who worked within two weeks), unit testing is important.
For software that is being built by a team of developers, integration test is important.
This is not to say testing is all too important but you have to be wise to know the difference.
However, when you are at the early stages of software design where requirements are not yet clear, there is no testing to speak of to begin with.
All endeavor no matter how small must be approached by asking WHY. Then and only then will you know why you are doing what you are doing.
Once you know why, it may dawn on you that unit testing is all you may need if you are simply writing microservices (or small business logic apps).
This is the beauty of microservices.
It lets you develop small chunks of code without bogging you down with so much details.
You can divide your business logic with clear-cut boundaries so you can assign it to one developer, and let separate developers write different programs in parallel (unlike with team-based large-scale software).
To summarize, read the difference between program and software.