began writing software full time at IBM in 2001 u I’m also not dead. u We’ve declared Waterfall and Monolithic Architecture dead. u Let’s talk about that.
We tend to like a challenge. u We hastily invent new things, that are not always better. u New people come into the field, and haven’t had the experience of older ways. u We get caught up in spin and “grandfalloons” (see Cat’s Cradle). u We assume there is a true way. There is no true way.
u In Earthsea, she writes of “True Names” u We must know things as they really are u “Waterfall” and “Monolithic” – do we know them, or just their given names?
was the norm. u Requirements – Design – Implementation - Test u Engineering was engineering – greater responsibility, less hand holding. u Plenty of time to design solutions and research.
Engineering Requirements Documents u Questions, comments, documented mutual agreement u Status meetings usually once a week u Accurate view of strengths of various team members u Accurate view of dependencies between tasks, task order
“bad”. Is it? u Engineers are viewed as interchangeable. u Estimates are encouraged to not be time based u Scope is more unpredictable. u Overhead and status-focus is increased u Practices/Games make work feel like Kindergarten - “fist of five”, “planning poker” u Crunch time becomes constant
an accessible product owner, but a good one u Know hard requirements vs soft requirements. u Lightweight agile and Iterative Development can be closer than we think u Test driven development and test automation = super important.
of Jenkins builds per day u 8 Amazon regions (dev, stage, many prod regions) u ~1000s of EC2 instances u Could be modelled in ~50 EC2 instances in monolithic models u Jenkins configurations drift u Security enforcement drifts u Code sharing suboptimal u “DevOps” writing lots of custom code to manage it.
one laptop u Interfaces can benefit from static typing vs design-by-contract u Very small numbers of different server/image types in production u Local function calls are much faster than RPC
around with 5% utilization u No need for “containers” to get around above utilization problem u Greatly simplified debugging u Easy code sharing u Very simple version upgrades
people problem u Design by contract is effective u but increases test, ops, and debugging demands u Versioning increases need for communication and development formality u Avoids controversial design debates by … avoiding design u Potentially reduces code sharing, increases potential for NIH u Creates an infinite sea of new management challenges.
efficient. u Agile can be less efficient. u Microservices attempts to solve a people problem by introducing new technical and people problems. u There’s something to learn from everything. u Try to separate the labels from the true meanings of things.