It’s virtuous to separate out different perspectives in code because it helps make code more testable, extendable, and understandable. We want to use entities at the same level of perspective so that code is easier to read and understand code. The same thing is true within entities where we want to do tasks at the …
Continue reading “The Single Level of Abstraction Principle”
Read MoreDifferent people have different ideas of what it means to be Agile. For some, Agile means doing standup meetings and two-week iterations. For others,it means doing all the practices from Scrum, Lean, and Extreme Programming. For me, what it means to be Agile comes right out of the Agile Manifesto, which says: “Our highest priority …
Continue reading “Automate Deployment”
Read MoreCheck out my Agile Amped Podcast at Agile 2016 on Creating Implementations of Intent and What Makes Great Developers Great.
Read MoreIf I offered you a thousand dollars a day for thirty days, or a penny for the first day but I’ll double it every day for thirty days, which would you take? The former is a linear progression: 1000+1000+1000+1000… and the latter is an exponential progression: .01x2x2x2 . . . At the end of the …
Continue reading “Linear versus Exponential”
Read MorePeople like certainty but we live in an uncertain world. The future is uncertain and therefore it’s scary, so we tell ourselves stories about the future. We know they’re lies, but they’re good lies. They help us set our expectations. We can’t help but lie to ourselves. If we didn’t, if we had to live …
Continue reading “Telling Smaller Lies”
Read MoreThe web site Mental Floss recently reprinted a series of helpful instructions written in Japan for Japanese tourists planning to visit America (http://mentalfloss.com/article/55140/10-japanese-travel-tips-visiting-america). These ten sometimes funny, sometimes confusing bits of advice ends with this: “In Japan, there is great fear of failure and mistakes in front of other people. It is better to do …
Continue reading “A Culture of Inefficiency”
Read MoreHistory is full of examples of institutions incentivizing the wrong things. In 2007, in response to an increase in the population of wild pigs in the area surrounding Fort Benning in Georgia, the US Army sponsored a bounty program, paying local hunters from $25 to $40 per wild pig killed. All a hunter had to …
Continue reading “Incentivizing the Wrong Things”
Read MoreIn an industrial society workers perform rote tasks that are interchangeable with others so the faster a worker accomplishes his task the better a worker he is. That being the case, it’s not difficult to understand why so many industrial workers have been replaced by robots. But information workers are different. What we do requires, …
Read MoreIntegration is one of the most painful parts of a traditional software development process. After the system is designed and coded it gets integrated together in a Waterfall process, and this is when the nastiest bugs show their faces. It’s also when we really can’t afford to address fundamental issues. When I was doing Waterfall …
Continue reading “Turn Pain into Gain”
Read MoreOne key characteristic to Agile software development is time boxing. We build software in fixed intervals called time boxes. Time boxes for iterations are usually one to four weeks, with most teams opting for a two-week iteration length. Any fixed time iteration is going to be somewhat artificial. Software development tasks don’t all lend themselves …
Continue reading “Time Box to Scope Box”
Read MoreUnderstanding the technical practices of software development is not easy for everyone and a lot of otherwise smart people are failing when they try to apply them. Some people even claim that the practices I cover in my book, Beyond Legacy Code: Nine Practices to Extend the Life and Value of Your Software, don’t work. For …
Continue reading “Test Driven Damage?”
Read MoreWhenever I hear a recruiter or a manager refer to a software developer as a “resource,” I cringe. People are not resources. Unlike assembly line workers, software developers don’t perform wrote tasks and so therefore they are not interchangeable nor are they scalable. In his book The Mythical Man Month, Frederick P. Brooks, Jr. writes …
Continue reading “People are not Resources”
Read MoreAcceptance Test Driven Development (ATDD) is a relatively new but essential practice in software development. This practice goes by many names, including Behavior Driven Development (BDD) and Specification by Example. This practice is not to be confused with Test Driven Development (TDD) or other forms of testing. ATDD or BDD is something unique. And as …
Continue reading “Assert Behaviors Through Acceptance Tests”
Read MoreEvery successful software development project I’ve ever worked on has had a Product Owner. They may not have been called by that exact title, but that was essentially their job. They were responsible for defining the product, prioritizing features, and answering the myriad of questions developers had as they built those features. The Product Owner …
Continue reading “The Single Wringable Neck”
Read MoreA central benefit to Agile software development is breaking down tasks into the smallest component that can provide measurable feedback. When we do this we take complex tasks and simplify them by breaking them down into smaller, easier-to-handle tasks. Smaller tasks have four essential benefits: First, they’re easier to understand, which means they cost less …
Continue reading “Smaller Tasks Have Big Benefits”
Read MoreDag König and I spoke on Dev.Cast 145 (http://www.buzzfrog.se/index.php/2016/05/dev-cast-145-will-we-ever-learn-to-develop-better-software/) about the state of software and its future, my book, and lots of other stuff. I was so excited that Dag could hardly say a word. But it was a fun podcast.
Read MoreA story is a single sentence description of a feature. Stories tell three things about a feature: • What it is • Why it’s there • Who it’s for. Stories do not tell how to implement a feature or even what it looks like. Stories are very high level. Stories are placeholders meant to remind …
Continue reading “Tell Stories”
Read MoreI spoke with Vasco Duarte at Scrum Master Toolbox Podcast on April 18, 2016, on several different topics. Here are the five episodes topics: Monday (18 Apr 2016): David Bernstein on learning to break stories down Tuesday (19 Apr 2016): David Bernstein on the Us vs. Them mentality Wednesday (20 Apr 2016): David Bernstein on metaphor as a …
Continue reading “Scrum Master Toolbox Podcast”
Read MoreTen years after the Agile Manifesto was signed into being, the original authors got back together to review the progress made in the last decade. It was Jeff Sutherland who said, “Demanding technical excellence is a top priority for the next ten years.” But what is technical excellence? Given the state of the software industry …
Continue reading “Technical Excellence”
Read MoreThere are three main constraints in manufacturing that are sometimes referred to as the “iron triangle.” These are scope, time, and resources. In manufacturing they say, “Pick two of these three things to flex, but one must remain fixed.” But this model does not apply to software development. Scope refers to the size of the …
Continue reading “The Iron Triangle”
Read MoreExperts in any field organize their knowledge in specific ways. They have their own unique vocabulary and draw on specific analogies and metaphors. They have established key beliefs and distinctions around their expertise, and though they understand their subject their understanding maybe different and deeper than the rest of us. All experts draw on skills …
Continue reading “Think Like an Expert”
Read MoreI generally find that developers engage in one of two different activities when it comes to making future changes: they either anticipate or accommodate. Anticipating change comes from a good place, a place of caring, but can be ineffective and stressful. I spent much of my career trying to anticipate code changes so that my …
Continue reading “Stop Anticipating”
Read More