Fixing software development within GoC
Following the Agile Tour 2013 and based on the number of civil servants, here is our plan to fix software development within Government of Canada (GoC). I guess the 12-factor app manifest grew on me more than expected.*Bring in knowledge: This is fundamental. Create a learning/training center for common skills (Git, photo editing…) accessible to ALL departments. Train people on core cross-departments concepts to get them started faster. New concepts, new ways to proceed, everyone will benefit from it, everyone will bring own experience, hence will raise global standards. Speaking of standards, Git is now the leading Version Control system. How many groups have it deployed? Technology goes along with learning, hence should be encouraged.
*Remove silos: Initiatives pop up with diversity. DBA and system ops should get involved with system architecture. How can one support an app when they don’t know how it works? Why a developer could not create a database schema? Why a DBA could not raise concerns about scaling and caching? All sorts of issues that ultimately will need to be addressed. Sooner is better.
*Upgrade technology and tools. No, Microsoft is not the only ‘secure’ technology provider out there. Yes, you’ve spent years developing processes, architecture and solutions, but in some cases this is no longer the most suitable tool out there. Yes, I’m looking at you MS Access. A tool in the hands of a fool remains a weapon, no matter the tool. Same goes with technology/framework/platforms and security. Bonus, development time will dramatically shrink.
*Build a Canadian data centre. Yes, a few tentatives have emerged, but it’s not enough. Amazon AWS built a dedicated government zone. Build a central data centre shared by all departments, manage it, and give access by level of privacy required (just like with security clearance authorization). We’ll save lots of resources, time and public money.
*Hire web designers. Everything is in the title. Design is a skill. Train designers to become web designers or at least use common frameworks out there. Review #1.
*Ship often. No need to schedule releases 2 weeks in advance (real story). Code isn’t ready anyway so what’s the point. It breaks software development lifecycle and this isn’t agile at all. When an app has been tested and approved by the end users, it’s time to deploy. Currently, it’s rare when a developer has enough privileges to be able to release his/her own code. However it just adds layers on the process, reinforces silos, miscommunication and create frustration.
*Manage, stop buying. True, we can’t be an expert on all matters but nowadays no one is responsible for anything. People need to embrace projects to feel concerned, else it just dilutes responsibilities. Empower teams by letting them build and lead. Real challenges with clear value will make a big difference. Otherwise it’s vendors projects.
*Allocate resources wisely. PM can handle multiple projects. Testers can work on multiple apps. Fact: no one reads project documentation, except the requirements document and the user guide. The full suite (project initiation, project plan, stakeholders document, lessons learned…) should be reconsidered and serve a clear, distinct purpose over time.
*Bring smiles in those cubicles.