I wonder if there is a reasonable way for us to track the quality of our fixes and enhancements so that we could start to quantitatively and statistically evaluate the quality of the changes made to the core codebase. This is related to moving up to Level 4 of a Capability Maturity Model (https://en.m.wikipedia.org/wiki/Capability_Maturity_Model).
Good question. It would be great to get a better measure on regressions -- Eileen and I have been talking about doing regular post-mortems after the release for a chance to talk about them. I'm not anxious to jump right into a hyper-structured approach since we need to build more culture around this. We'll try to do one a week after 4.7.13 comes out ( https://github.com/civicrm/release-management/ ).
For CMM, I wonder if there's some incentive for us to pursue a more formalized model -- e.g. maybe it helps in contracting?
Thank you for this blog post, I felt very happy reading it as it resonates with my views of some of what's important for the success of the CiviCRM project.
Your asking for people's suggestions encouraged me to share some of what I have to share. So here it is.
There are a number of books that I think can greatly help the people who are working on CiviCRM. The information in these books (I think) will lead to a change in approaches and consequently to greater quality and quantity of the work produced. I think the desired change in culture and habits will come this way.
The books I recommend:
Scrum and XP from the Trenches
Pragmatic Thinking and Learning
Debugging: The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems
Science and Sanity
Also, talking about testing, I myself have not been able to get into test-driven development, but there are many resources out there. I think Henrik Kniberg has written on the topic. Unfortunately, as with agile and many other great things, most books and courses on the topic likely provide very little value. So you might want to seek contact with people whose expertise in test-driven development you trust, develop partnerships with them and learn from their experience.
Getting better at time management can also lead to a huge increase in productivity. Here is an article just to open the subject up: http://blog.trello.com/how-to-pomodoro-your-way-to-productivity
As you go through the books above, you might start asking more and more questions along the lines of: How is the team organizing itself? What platforms is it using for internal communication? How is it prioritizing? How much time is it spending on which things?
One thing that immediately comes up for me is Jira. Why not use github for issue tracking? Are there Jira features that warrant spending time on maintaining the installation? Can those things be accomplished through github?
I'm noticing the team schedules release dates for bugs and then keeps pushing the release date back when the bug has not been solved and there is a new release coming. Why spend time on pushing back the release date? Can this be done in a different way (e.g. default bug status of Unscheduled)?
And another thing: how are other open-source projects organizing themselves? I have experience with Joomla and Wordpress and I can tell you that when there is a new Joomla release, quite often it breaks things. Then another release follows, but often it breaks other things. So very often there are a few quick minor releases after a larger Joomla release. But with Wordpress, which I have been using for over a year now, this has not happened even once during that time. The difference in code reliability seems tremendous between the two CMSs. How is this so? What is Wordpress doing to achieve this quality? Are their releases focused on optimizing and further optimizing the existing features and codebase? I'm saying - it seems worthwhile studying the approaches and strategies of successful open-source projects. Probably there are many things they have discovered that can be adapted to CiviCRM.
This seems enough for a single post, please let me know if you find it useful. My main message is: we work on educating ourselves => our ability to impact the world improves proportionally.