Our management system is no longer spontaneous. We've developed it by formalizing our knowledge and processes. Though is it mature enough, we are still improving it and we don't plan to stop the improvements ever.
We are not fans of any methodology and we never were. Instead, we take the problems known to us, and adopt available methods to go over.
But in the situation we could claim we share the Agile principles. Our experience made us realize that the best fitting of actual requirements with an optimal cost to risk ratio is possible when the following practices are in use:
We use task tracker, based on ChiliProject (RedMine fork) well known in software development. We are tuning it to best fit our needs, as for better realtime reporting, as to make its UI more intuitive.
We used to write down the formalized versions of information, responsibility and other artifacts flows.
The same is for quality criteria of regular tasks.
To manage the source code we use Git with its rights control add-on Gitolite. We have a wide experience in work around the known problems and use of strong sides of Git. The experience is frozen in a form of rules on a branch naming and preferred workflow. Right names reflect all the important state indicators of particular task branches and don't let them being lost among themselves.
We have a toolset for automatic data gathering on software failures. Key points of our products contain tools for self-diagnostic and sanity monitoring. Gathered information is usually detailed enough to instantly localize and fix the problem. We see even those things, which were met but not reported by users. And the reporter UI works in a manner of ticket tracker.
Also, we have rules on how to deal with users inquiries (as part of user support). Basically the system is the same as for tracking tasks, but different in some details.
All the code is always in version control system. This lets us find the roots of the problems to study the lessons and strengthen our experience.