I began my career as a software consultant back in the mid 1970s. There was no formal Quality Assurance process. We designed, coded, and tested programs, switching gears from one job function to the next as we moved through the development process.
Fast forward a few decades and we have the Quality Assurance profession, with the very specific focus of finding and preventing defects.
Over the years, I morphed from jack-of-all-trades to systems analyst to developer and finally to QA analyst/lead/manager.
Software and systems have grown more complex over the years but one thing hasn't changed: the old concept of "garbage in - garbage out”.
While that saying was coined in reference to data, it can also apply to software. The sooner we find (or prevent) bugs, the less expensive they are. Small misunderstandings during the requirements phase of a project can turn into major software bugs upon delivery. This isn't just a software development issue, it's a business issue as well.
I believe the key to creating high-quality software can be summed up in one word: balance.
An emphasis on QC (Quality Control/detection) over QA (Quality Assurance/prevention), will cause you to spend most of your time finding and fixing bugs.
If you emphasize QA over QC, the parade (and your customers) may pass you by while you're busy creating perfect procedures.
To create a healthy software product (and business), QA and QC must work together to create a continuous improvement loop. That requires the implementation of procedures that work in the real world by balancing software development with the day-to-day challenges of running a profitable business.