On Github hamvocke / devCrashCourse
Agile Development
TDD
Continuous Delivery
Continuous Integration
Waterfall
User Stories
This Brownbag is very limited in time and will force me to rush through stuff. In this Brownbag I will be oversimplifying stuff that is actually more complex. I will be opinionated. I will only scratch the surface of many topics. Some stuff I tell might be utterly wrong. Feel free to yell at me at the end of the Brownbag.
Long, detailed specifications
Strict planning, sticking to the plan
People approached building software as they approached building an aeroplane. They simply took what they knew from other engineering disciplines and tried to shoehorn software development into these practices. People made long and detailed plans, wrote big specifications about what needs to be done up front and sticked with whatever was planned. Specifications were then given to the development teams which implemented whatever was specified. Unfortunately this is not how developing software works. Writing specifications up front takes time. The world of software changes -- fast. When the software was finished the world has most likely changed. On top of that you don't really know what people want and how people are going to use your software. A methodology that is not ready to cope with the frequent changes in the software world is not suited to build software. We now know that building software is not like building an aeroplane. That's why the methodologies need to be different.Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
* Self-organization and motivation and collaboration are important * Emphasis is on working software * You cannot know all the requirements, therefore collaboration with the customer is important * Agile focuses on quick responses to change and continuous improvementExtreme Programming (XP)
Scrum
Lean Software Development
Kanban
...
Build the software automatically
Test the build automatically
Test the software automatically in multiple stages
Deploy the software automatically
You test your application with every commit
"Good" versions will be deployed automatically
Fast feedback for the team
Features go from development to production insanely fast