Hello, I'm Noah Sussman
Punctuated equilibrium is a theory in evolutionary biology which proposes that most species exhibit little evolutionary change for most of their history. When significant evolutionary change occurs, it is generally restricted to rare and rapid (on a geologic time scale) events of branching speciation.
It is a commonly accepted principle that software systems evolve, much like biological ecosystems. And in general the crossovers between programming and genetics are well-known.
A large system that works is invariably found to have grown from a small system that worked —Anonymous
Erik Hollnagel’s concept of Tractable Systems and Intractable Systems assumes that in general there is a an unknown but relatively discrete inflection point for a simple system beyond which the system has become so complex that it must now be considered intractable.
Large intractable systems evolve from simple, tractable systems. A transition point between tractable and intractable exists somewhere along the timeline of an organization’s life.
Once a system flips over to being intractable, then it stops mattering how “big” the system is — your concept of system complexity on some objective scale stops being relevant once system behavior has become non-deterministic.
One always has, at every stage in the process, a working system. I find that teams can grow much more complex entities in four months than they can build.
— Fred Brooks￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼￼
Please stop trying to sell me on management positions while offering a “QA Engineer” title and salary
Recently I was sent a job posting that embodied what I will call the Pernicious Myth of the QA Automation Engineer. Here’s just one line:
Own automated testing capabilities across Web, mobile and production processes.
An engineer cannot by definition take responsibility (that’s what “ownership” means — right?) for features that cut across multiple groups. In all but the smallest companies, Web and mobile would be managed by different teams. With different MANAGERS.
Engineers don’t take responsibility for the behavior of MULTIPLE managers across different teams.
This is a Director’s job.
Managing software capabilities across multiple teams is the job of a mid-level Engineering manager such as a director or (in larger organizations) a VP.
Why not? Because decades of computer engineering experience show that it never works.
Management (with all its wondrous hierarchical levels) is responsible for behavior of people within and across teams. Engineers and designers are responsible for the behavior and organization of the product. Not the people. People are a management problem. Especially at scale. Organizations that forget this fail.
Takeaway: do not sign on for a director’s job at an engineer’s salary
I’m not saying no one should take responsibilty for the “tests and testability” of an application or service.
What I am saying is that someone should be explicity responsible for testing across the whole organizaiton and that person should be at the director or executive level. Never at the engineer or team lead level. Ever.
There is a widespread misconception that QA should own testing. This is false. Not only is it false but it doesn’t even make sense. You cannot have a discrete group that “owns” testing because testing is integral to the activities of both engineers and designers. Organizations often make a choice to ignore this, but the choice is based on cultural inertia rather than science.
Engineering and Product always owns testing because testing is a design process. If QA performs all testing and devises test plans, then that’s an explicit decision by Engineering and Product groups to try not to own testing.
As an engineer-or-designer, you can try not to own testing, but it doesn’t work. Because testing is part of the engineering and design process. Testing is not an activity in itself. Rather it is an aspect of the larger activity of designing and building software systems.
The problem with asking where testing/qa “fit in” to devops is that testing/qa is part of dev.
It’s a historical mistake that test/qa was marginalized to the point it’s now seen as a separate discipline.
- Traditional QA is necessary BUT NOT SUFFICIENT for safe systems. —Dr. Nancy Leveson
- Empirical success… is not proof of safety. Past success does not guarantee future safety. —Sidney Dekker
- Test Automation Zombies
- Classic Testing Mistakes
- The disturbingly thin line between a “passing” test and a no-op
- Even a “simple” test scenario can have a surprising level of complexity. —Trish Khoo
- What should I do if my boss won’t fix her broken unit tests?
I’ve been studying the design and maintenance of software systems for a while now, and these 14 articles have helped me to attain a higher level of understanding of the domain. I thought I’d share them with you.
- "Fred as Frankenstein, Fred the brilliant creator of the uncontrollable monster flowchart."
- Always deploy from the HEAD revision of trunk and never roll back. Here’s why.
- Etsy Code Deployment, Monitoring and Failure Procedures
- Code Review with GitHub pull requests
- "You can’t really declare something a standard until it has already become a de facto standard."
- "We do not know yet whether intrinsic intricacy can be distinguished from accidental intricacy."
- Netflix engineers continuously run destructive automated tests in PRODUCTION.
- "A bug with a one in a million chance of occurrence is likely to happen in the next day or so."
- All software projects exhibit a fractal level of complexity. Proof by example.
- The Addiction Model of Technology Adoption.
- Enforcing Strict Model-View Separation in Template Engines
- Better tools can improve efficiency by about 10%. The other 90% is hard work and cooperation. —Fred Brooks
- Software Systems As Big Balls Of Mud
- The Selfish Class (sequel to Big Ball of Mud!)