|
> I started my career just a couple years ago. In my first company, they used 10+ year old tooling and imo it was terrible. A very old legacy mess monolith that made adding features pure torture. Trunk-based development with a "who needs tests" mindset, resulting in horrendously buggy code, 50:50 chance pulling newest version would break something. Monkey paw curls. My story is complete opposite. Three years ago joined a startup.
We use relatively new Java, branches everywhere, microservice architecture, +85% branch coverage, integration tests, end-to-end, performance, you name it.
CI/CD integrated and self hosted. Heaven, right? It was an absolute shit show. Because of microservice architecture you had no way of running +50 necessary microservice on your machine. Tests are mandated but brittle. Mocking libraries break whenever you refactor a method. Integration tests are flaky and inconsistent (behaves differently on local vs remote).
End to end test takes hours to complete. There are 20 different environments, each with different configuration, each divided into dev/qa/prod. In how long I was on we didn't have two successful deploys on main branch. But you have to keep adding features because one customer said it might.
Oh security found that library is 20ms too old. Have to replace it asap, despite the convoluted nest of dependencies between microservices. It had good pay though.
Taught me to really hate mocks and that tests need to be applied at right level. |
I think the main issue is just the other engineers you are working with. If they are bad, they will screw anything up.