Having worked as a freelancer and for agencies I experienced a correlation between clients and software quality:
If you get paid for the time writing software the technical knowledge of financial backers determines the software quality.
Non-technical clients value new features over software quality. They do this indirectly and unknowingly by perceiving activities that lead to higher code quality less valuable because they don’t know about technical debt and its consequences.
Activities that improve code quality are for example:
Anyone who has planned a sprint knows that these kind of stories are first to be kicked out if time or budget is low.
The biggest barrier to higher software quality is teaching business people technical debt.
Additionally there is also time one has to cover the costs for which is not stated on the invoice as clients normally don’t pay for it explicitly. It is nonetheless necessary if one wants to write good code. During this time one has to:
- contribute to open source
This means it’s harder to do these things mentioned above if you or your company gets paid for the time developing software.
This problem is less likely if one has customers. Customers pay money for using a product not for its development time. Therefore they have different expectations like good support.
If a client pushes for more features and the freelancer/agency says no, the worst thing that could happen is losing the project or future projects and therefore money.
If a manager in a product company pushes for more features and developers say no, the worst thing that could happen is losing customers because the delayed features were so important that they leave to a competitor. This is less likely though for multiple reasons:
- Most features in continuous development are improvements.
- Delaying a feature does not cause customers running away immediately.
- Customers might not even know that these features were planned if not publicly announced with a release date.
- Customers are bound to a contract or don’t want to pay again the price for the competitor’s product.
In conclusion it is not impossible for freelancers/agencies to have good software quality, but due to the source of income it requires more effort.
Disclaimer: I have not yet worked for a product company. If you have experience in this area I’d be interested in your feedback. Would you say there is more time in a product company for software quality than in an agency?
Update: Now that I have worked for a product company, I can definitely say that it’s easier to spend more time on software quality than in an agency.