An informal intro to agile
This is based on an email to an interested friend, and I thought it might have some value to others.
Nothing motivates people as much as to be able to deliver working software to the customer. So if there is a way to do that more often it can be a great motivator. In larger companies complex processes have often crept into the tech setup (no one touches the main database apart from the database operations team etc…) Those processes are quite often based on fear and incorporate quick fixes to those fears. That immobilizes, but changing those is often a no-go area.
So as much as making things more agile, I guess addressing the concerns for safety, security etc. should also be done in a more agile manner. For example, parts of the required testing before a release could be automated, so the effort for manual testing can be reduced, thus allowing more frequent releases and more and faster feedback from users. From Wikipedia:
> One of the differences between agile and waterfall, is that testing of the software is conducted at different points during the software development lifecycle. In the waterfall model, there is a separate testing phase after implementation. In Agile XP, testing is done concurrently with implemetation.
Embracing change is another interesting value. Given the goal of software development is delivering what’s needed, on time and on budget, what do you do when customer requirement changes substantially? (And it does - it’s just too complex to get it just right on the first try.) “Design by contract” would have to go back to the drawing board and rethink everything - effectively creating bureaucracy walls against changes. - But if delivering what’s needed is a core value, defending the old contract is not helping. So the balance should be shifted towards flexibility: Developers should be free to deliver on the new understanding of the requirements without the fear of being punished by the old contract.
The insights of many people have been collected in the Agile Manifesto
An overview if you need more references: The well-known agile processes are Extreme Programming from Kent Beck (bit dated now), Scrum from Ken Schwaber, the new kid on the block is Kanban which is based on Toyota's work. You might be interested in Lean Software Development, initiated by Mary Poppendieck who took all Toyota’s values (like Eliminate Waste, Continuous Improvement, Respect, Long-Term Focus) and applied it to software development, ending up with a different, but strangely similar agile process.