Some folks use QA as the bug catchers. They send them code that they haven't thoroughly checked. [The Clean Coder]
Everything starts with the source code, and developers are the only people capable to change it - to better, or to worse. It’s obvious that the QAs don’t create the bugs, they just find them! The bugs, and hence the quality, starts with the source code.
Having said that, if the project DX is really poor, then it is extremely hard to improve the overall Product Quality. Regardless of the chosen measures.
Consider an example - you’re going through the legacy project in order to fix a bug. The mess is everywhere, you see many places worth refactoring, but instead of doing anything like improving it, you don’t even touch it, you do everything to touch as few lines of code as possible, because any change may break something, and you don’t want to be the one responsible.
This is what I call poor Developer Experience. You noticed the problem, but didn’t fix it. You violated your professional ethics, because you were so afraid of making a mistake. Naturally, you don’t want to ruin your professional reputation, but in that particular case, it also means that you prefer to leave the problem to fester and exacerbate rather than be perceived as the one who touched and broke something.
In the long-term, it’s impossible to work like that, to drive the project like that.
In a perfect world, you would have tools and processes to help you, like Tests (Unit, E2E, Integration), Static Typings, Linter, other CI quality gates, and so on and so forth. All of them would confirm that your changes are safe, so you would be proud that you made the project a little bit better. And for sure, you wouldn’t be having any ethical issues.
When a developer isn’t afraid to change the code then they change it all the time. This is simply the nature of software delivery - to make constant adjustments to the new reality, to the new business request. It is not dangerous to make constant changes, incremental improvements to the code, but leaving the code static is.
Trust developers. There’s nothing more devastating than micro-management. Let them be free and responsible. It will generate a feeling of ownership and commitment.
Give developers all the tools they need and ask for. If they hate testing library - they won’t use it, or only as little as required. If they hate slow CI workflow - give them time to improve it. If they want to refactor something - at least consider it! The idea is pretty straightforward - when someone doesn’t like what they do, feels forced or disrespected, then we cannot talk about efficiency, thus we cannot talk about Product Quality.