I bug fix every new software request before I release from live to test environments but good software development relies on a separate person other than the developer doing the testing.
In big companies I have worked with this is usually a test team where a tester or group of testers is assigned to a project or a developer.
The developer does his unit testing and then the testers do system testing and Quality assurance.
In small companies this is usually the client .. hence it relies on them or someone delegated by them to test and make sure that any new features fully meets their expectations and business requirments.
This means testing each and every new feature in as many situations as possible.. yes this is boring .. yes this takes time.. but further down the road it does ultimately save time and increase revenue.
I have never and will never bug fix software I have developed free for life ..
In my experience this doesn’t happen in reality except by developers that overcharge initially , are desperate or inexperienced or a combination of all three.
Of course there is "give and take" in all relationships and of course smaller fixes and tweaks are done out of good faith. The other exception is fixed price work where the specification is crystal clear and allows indefinite fixing of issues which are included in the initial price.
Building software is not like building a house! Things change.. dependencies get broken.. windows server hotfixs get applied to servers by automatic Microsoft updates that break databases etc
A modern computer and software suite is by far the most technically complex edifice ever constructed - far more complex than any mechanical or civil engineering project. Thus, a software project is an inherently complex task being undertaken in an environment where the interactions are far more complex and poorly understood.
what I'm saying is what might work one week may break the next .. there are so many inputs and permutations .. logic paths that can happen only on certain conditions… A recent point in case was a registration screen which all in all took me over an hour to diagnose and in the end it was down to the SMTP server switched off on the server and an emailing app turned off…. Fix time 10 seconds... responsibility or negligence of the developer - ZERO %
Which is another point ... that the diagnostic of some of these issues can soak up and absorb 99% of the time.. and the fix can be done in seconds once its found. Add to this a poorly written report by the client of the bug with no test case details and you have to factor in additional time to hunt down the right user account/ page/ report/ whatever to use.
As I mentioned while most GOOD developers that I've talked to agree that bug-free is a myth since there's always room for improvements at the very least; there's a fine line between being driven to writing quality code and then charging for it being intentionally bug ridden.
The model I would recommend is to use a grace period. Any bugs found with in 2 weeks of a release will be fixed for free (with a caveat about duration); however, anything not discovered until after that will be considered part of the next release and billable.
The other thing to make clear here though is locking down of requirements and expectations so that "bugs" are not found when in actuality its a new feature that’s needed.
Thanks for reading this far .. sorry it got a bit heavy ..i’ll leave you on a lighter note
Programming today is a race between software engineers stirring to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning.” Bill gates