• Note from 2025: This blog post on software development and AI was originally published in November of 2009. It was republished in February 2023 after ChatGPT shipped (which happened in November, 2022) because, 13 years later, it was clear the predictions around artificially intelligent coding assistance and AI-aided requirements elaboration had begun to come true. Today, in 2025, I still think that humans will continue to add value in the design and specification process for new and novel systems intended for human use–probably indefinitely. This is not true across the board, though. Some application types are “standardized” enough that the alternatives around potential requirements can reasonably be constrained. In these cases, the entire system can be (and is starting to be today) generated and deployed by AI. Standard e-commerce shopping sites and blog sites (like this one) are good examples of commoditized system; in fact these sites have been generated algorithmically even pre-GenAI. These more structured systems and and others like them (portals, for example) are more easily and flexibly generated now that we have GenAI.. GenAI has also proved very powerful in taking ambiguous requirements and both highlighting the ambiguities and also providing guidance and suggestions for making requirements unambiguous. This opens the door for even more widespread system generation, as noted in the blog below. Good requirements are the key..

    “Collector” is probably too strong a word, but I am definitely an aficionado of handcrafted items. While true hand craftsmanship has become rare and generally prohibitively expensive in the West, I’m fortunate to travel to places where handmade items are still relatively affordable. 

    Over the years, I’ve managed to accumulate artwork, metalcraft, furniture, embroidered tablecloths, handwoven shawls, silks and other items that my family and I really love. I’ve been luckier in finding great women’s clothing items than men’s, but at least that has made me a popular gift-giver in my family! 

    Having beautiful, handmade things in my life is a source of real satisfaction. I like the thought that an actual human being made something I have or use and, I like to think, perhaps they cared about what they made, and took pride that what they made was really good. Maybe they even hoped that someone like me would come along who would appreciate what they were making. 

    A handcrafted item puts me in touch with a different way of life — that of the craftsperson. And the best of these items have an elegance and, well, “soul” to them that machine-made items just don’t seem to have.

    When I’m looking at these items, it strikes me that my work is not so different.

    Software is the last handmade thing in common use in the developed world.

    For those of us in the software industry, that software is “handcrafted” is no great revelation. To us, it’s clear that beyond the technology (which, though sophisticated, is at least largely amenable to human control) the true difficulty in producing a software product are the human factors and the imponderables that human beings and human interactions introduce. 

    Humans misunderstand directions, give unclear requirements, make mistakes and wrong assumptions, have prejudices and divergent career goals, are good at some things and bad at others, can act lazy or be overly aggressive, and generally are very human. 

    Though the technology is compelling, to me the people aspect of the business is the bigger challenge. How do you take a collection of imperfect human beings and get them to work together to quickly produce a quality product that does what you and your customers really want it to do? That’s the challenge, and why software product development is so much a human activity.

    “To err is human” [Alexander Pope]

    A few years ago, I acquired a small carpet I really love. This is a fairly elderly appearing tribal pattern carpet, and the seller made extravagant claims for its origins and history. After a series of visits and hard-bargaining sessions, I finally bought it. But I still had doubts about whether I had really purchased a handmade masterpiece or an artificially aged, cheap, machine-made knock-off. 

    After living with the carpet a while, I began to notice a lot of small asymmetries in the intricate patterns. A series of “gulls” or “C” shapes make up part of the border, for example. I began to notice that some of the “C” shapes opened to the right, and others to the left, and that while the two sides of the carpet were close to being mirror images of each other, they actually were not. 

    There were a number of other such small asymmetries here and there throughout the carpet. After a few weeks of observing these imperfections, I became completely convinced that this was indeed a laboriously handmade carpet. It would be prohibitively expensive or even impossible to achieve this degree of asymmetry and imperfection by machine; the only way it could be done was by hand, knot-by-knot. 

    I’ve also read that in more than one culture, such asymmetries are inserted purposely as intentional flaws. This is to avoid tempting fate by aspiring to make something perfect. 

    While I think this philosophy is probably a good example of making a virtue out of necessity, I nonetheless appreciate the sentiment. It is, unfortunately, not for us humans to produce perfect work — at least, I’ve never seen it. Machines, maybe; but a human endeavor, no.

    Learning to appreciate the rough edges.

    As another case in point, I once tried to get a business suit made for myself in India, figuring the labor cost would be low — which it was. I had read that one of the hallmarks of a good tailor-made suit were buttonholes made by hand. I had also read that you can tell whether a buttonhole is handmade or not by looking at the side of the buttonhole on the inside of the suit, facing the wearer. If the buttonhole is imperfect on the inside, it means it has been hand-embroidered; if it’s perfect on both sides, it’s machine-made. In the West, you will pay a lot more for a suit with “imperfect” buttonholes than for a suit with “perfect” ones, because hand embroidery is a sign of extra, skilled effort.

    However, when I asked the Bangalore tailor, “Do you put handmade buttonholes on your suits?” he looked embarrassed and responded, “Yes. We’ve been trying to save up for a machine but so far, we can’t afford one.” 

    The tailor’s perspective regarding handwork and my own were quite different in this situation. To me, the value of the suit was increased by skilled handwork, even if the result was in some sense imperfect. To the tailor, the imperfections (and the extra time that came from the required handwork) were a negative. 

    It is imperfection that is the hallmark of a handmade item, not perfection. Both the Bangalore tailor and I agreed on that point. But where I valued the “imperfection” in this case, he was embarrassed about it.

    As consumers, our standard for software products really is perfection. 

    We like our buttonholes perfect on both sides. Like that tailor in India, though, as software developers we are in a situation where there are no tools available to us that will rapidly produce a perfect product. In large part, such tools are not even theoretically possible, because the goals or requirements for a software product are invariably “fuzzy” to a smaller or larger degree when we begin a project. 

    Years ago, in the early 1990s, I was on the team that developed Rational Rose 1.0. I believed — as did a number of my colleagues at the time — that we were helping to create a new way of developing software. We felt that in the future, people would generate code directly from a graphical version of their software architecture, and would then be able to use the same tool to reverse engineer hand-modified code back into an updated graphical representation. 

    Alternatively, you could start with an implementation, semi-automatically extract the architecture from it, and proceed from there. The round-trip nature of this process would overcome what we then saw as one of the major obstacles to good software architecture, which was keeping the architecture diagrams up to date with the actual implementation. 

    The reverse engineering piece, once fully in place, would allow people to effortlessly toggle between a high-level architectural view of their code and the detailed implementation itself, we thought.

    Now, we’re fifteen years down the road. 

    Why isn’t a rigorous architectural approach to software development widely used? 

    Why don’t people architect their product and then just mechanically generate the implementation code directly from the detailed architecture? 

    Surely enough time has passed since Rose 1.0 that its descendents and competitors could have made this approach completely practical if that’s what the market wanted. There are probably many reasons why this is not the approach companies actually tend to take today, but I would argue that a key factor is that people generally do not know exactly what their product is supposed to do when they start work on it. 

    I would also argue that in most cases, they can’t know. Even in the case of a relatively mechanical port, the urge to add features, fix problems, act on mid-course learning and/or exploit the possibilities of a new technology generally prove irresistible. And in real life, the resulting product will invariably be different from the original concept.

    There is no tool yet devised that will mechanically turn a “fuzzy” or currently unknown requirement into one that is clear and unambiguous. There are definitely techniques that can help the product owner refine his or her vision into something less ambiguous: Innovation Games, Agile kick-off meetings, requirements as test cases, rapid prototyping and the “fail fast” approach, for example.  

    And I can still imagine a world where completely unambiguous requirements are fed into a machine and something perfect pops out of the other end — like code from a Rose diagram or, to return to our tailoring analogy, a buttonhole from an automatic sewing machine. What I cannot imagine, though, is human beings producing specifications so perfect that what comes out is actually what is desired, perhaps even for a buttonhole.

    Until humans are out of the requirements and specification loop (which I can’t imagine if the software is to be used by human beings) I think we need to live with imperfection in this sense. 

    To be sure, our ability to implement requirements mechanically has and will continue to steadily increase. Programming paradigms like convention over configuration (Ruby) and aspect-oriented programming (Spring) are reducing the amount of code required to implement a new feature, reducing development times and eliminating systematic sources of error. Tools, languages and reusable components and frameworks have vastly increased programmer productivity over the last few decades, and I am sure this trend will continue. But to date, people are very much part of the process of creating software as well as specifying it.

    Should we hope that human beings are eventually eliminated from the software development process? 

    Right now, a large part of the work of a professional software engineer could arguably be characterized as identifying and eliminating ambiguities in the specifications, to the point where a machine can mechanically carry them out. A software engineer often makes dozens of decisions each day about what the software should do in a given situation not specified or anticipated by the product owner or requirements, often because the situations are considered “edge cases” or “too low level.” 

    A theoretical device that completely eliminated these ambiguities would have to first identify them, and then surface them for resolution by the product owner at requirements-generation time. But would the product owner be able to cope with a huge volume of decisions about, say, out-of-memory conditions in a very specific situation many levels deep?

    My guess is that while in the future “programming” will be done at a higher level, with better tools, more reusable frameworks and even perhaps artificially intelligent assistance, it will remain a human activity at core for years to come. 

    As long as humans are better at understanding the intent of other humans than machines are, I think this must be the case.  

    At some point, machines will probably become so smart, and the collection of reusable frameworks so deep, that AI systems can assemble better software from vague requirements than people can. Until then, however, I think we will have to learn to appreciate our buttonholes with one rough side, and use approaches like Agile that acknowledge that software development is a human activity.

  • Scrum and the Copernican Revolution, Parts III & IV Outline

    Note from 2025: Embarrassingly, I never completed this 2009 blog series. I have, however, had people ask me how it ends! In that spirit, I’ve attached these “notes to myself”, also from 2009, for parts III & IV.

    Does the Agile / Scrum software development paradigm encourage innovation, or discourage it? We continue to discuss this topic here in part III of our little fantasy. In part I and part II, we pretend that the idea that sparked the 16th Century Copernican revolution in astronomy happened during the course of a Scrum-based effort to develop version 173.92.3 of the Earth-centric model of the universe that had been originally proposed in the 3rd Century B.C. 

    As we saw in part II, you as Scrum master of Nick Copernicus’ Scrum team have become a believer in Nick’s proposed “Sun-centered” or “Heliocentric” architecture. However, using some introspection you have also come to realize that from the Product Owner’s point of view there are risks both in adopting it, and also in not adopting it. This is the age-old innovator’s dilemma—when to stick with something proven, and when to consider abandoning it for something potentially better.  There is no ready-made answer to this question, and the stakes are very high either way. 

    Note that from our perspective here in the 21st Century the choice may appear obvious. However, try to put yourself in the mindset of people who have had a great deal of success in predicting the motion of the heavenly bodies using an Earth-centered approach for almost 2,000 years. The approach has been highly successful and, undoubtedly, become very comfortable and familiar to successive generations of developers and managers who grew up with the system. The criteria for success are clear. It is very disturbing to have our fundamental assumptions questioned, especially when they seem to be working for us. Yet this is how innovation happens—it invariably takes us out of our comfort zone. The real question is—when is it worth it?

    You and Nick have resolved to go back to the Product Owner and try again to sell him on the idea of a radical refactoring of the architecture, moving from the current model where @@@

    Before you speak with the Product Owner, you and Nick will discuss your proposal with the whole Scrum team at today’s stand-up meeting. They are, of course, aware of the general ideas and status since you and Nick have been raising it as one of your “what I did today” items ever since the idea first came up. The team has been generally neutral to positive on the approach, with only one descenter—a curmedeonly senior developer—but until now you have not asked the team to commit one way or the other. Last night before you and Nick left the office, you posted a notice to the team to expect an extended standup—45 minutes rather than the usual 15 or so—where you will ask for their buy-in.

    ==========================================

    Decision: leave one of the more accurate planets “as is” and shift resources onto a tiger team to develop a prototype of Nick’s model. Work goes on in parallel, and you will demo both heliocentric and geocentric models to the King—if it looks like he’s in a good mood.

    ==================================

    Part III

    King gives the go to try the new heliocentric model after seeing the spike. You tell him it’s less observationally accurate. Product owner jumps in and says to start putting epicycles on the circular orbits. 

    King rewards everyone on your team—and the PO—with a house.

    Part IV

    Eliptical orbits. It’s several generations later, and the scrum master’s family still lives in the same house. Family lore tells you your grandparent was scrum master on the project that originally developed the heliocentric model. You are now using techniques of test driven development and a “fail fast” approach. Ty Brahe is the test lead; John Kepler is a software engineer who has idea about elliptical orbits.

    If you choose not to refactor, then you run the risk of your competition (other Monarch’s sphere development teams) doing it first, and your Monarch coming to you and saying “why didn’t you guys think of this?”!

    Fail fast—elliptical orbits

    There are a couple of questions to ask yourself first, however:

    1. Will the refactored architecture help to meet my business requirements?
    2. Do I have the right business requirements?

    In the case of Mr. Copernicus, however, this would have resulted in problems down the line—because his original model was less accurate than the epicycle-centric approach it replaced. It was not until Kepler and Galileo developed the concept of planets moving in elliptical rather than circular orbits that the Copernican model became truly accurate.

     So let’s examine a couple of options:

    1. Let’s assume we have great automated test coverage against well-defined interfaces on top of a well-encapsulated architecture.  This would allow us to do a “spike” which re-factors the architecture while continuing to be able to test it via the same API’s with our existing test suite. Such a spike could become a story in the next sprint, with its priority driven according to business requirements. In the astronomical case, the test suite would consist of observational data for the positions of the planets, and the interfaces would allow selection of a particular date and time. Automation was not available in Copernicus’ day and in practice test execution speed would depend on the number of monks and other workers who could be enlisted for the task of computation using the new system, and comparison to the published observations.
    2. Let’s assume that the architecture is “tightly coupled” to the 

    Credits and references

    To see how both models explain the retrograde motion of the planets, see the animation at http://www.sciences.univ-nantes.fr/physique/perso/cortial/bibliohtml/epiclc_ja.html and http://alpha.lasalle.edu/~smithsc/Astronomy/retrograd.html.

    Photo of planetary motion from http://antwrp.gsfc.nasa.gov/apod/image/0312/retrogrademars03_tezel.jpg

    Kepler planetary data tables from 

    http://www.hps.cam.ac.uk/starry/tables.html

    Images from wikimedia.org

  • Scrum and the Copernican Revolution, Part I

    Does the Agile / Scrum software development paradigm encourage innovation, or discourage it? My answer: it’s neutral, and can be used to do either. If both the customer and product teams show openness, imagination and indeed a little courage, Scrum can be a powerful force for achieving innovation. Scrum can also be used to more efficiently keep doing what you’re already doing—which is sometimes the desired result.

    To illustrate these points let’s construct a little fantasy around a somewhat modified version of one of my favorite episodes in the history of science, the “Copernican Revolution”. Not using a software example will keep us in the process domain, rather than being distracted by the technology or particular business problem. Also, with my physics background, I just like this example! Even though it’s hopelessly anachronistic, we will imagine that astronomy in the 15th and 16thcenturies was done using the Scrum development methodology, and see how or if that would have changed history.

    Nicolas Copernicus was an astronomer (among other things) who lived in Poland in the late 1400’s and early 1500’s. At that time in Europe, the widely accepted belief was that the Earth was at the center of the Universe and that the planets, stars, Moon and Sun rotated around the Earth.

    Though this seems laughable to us today, it’s actually quite reasonable to suppose that the Earth is fixed in place. When you stand on the Earth and look toward the ground, the world seems quite stationary—and there is certainly no sensation of movement. It’s only when we look up at the sky that we need to broaden our view. The Sun and Moon rise and set. The stars circle around us in a predictable pattern of constellations, with different constellations becoming visible or being higher or lower in the sky at different times of the year. And the planets—well, the planets were the problem.

    It turns out that the planets do not move in circles across the sky, as the other celestial bodies like the stars, Moon and Sun appear to do. Instead of always moving across the night sky in the same direction, the planets sometimes go backwards against the sea of stars, reverse direction, and start going forward again. Because of this initially unpredictable behavior, the English word “planet”, in fact, derives from the Greek word “wanderer”.

    Let us suppose that the goal or “business requirement” of astronomy in the 16th century was to predict the motion of all the celestial bodies at any given time. Starting from the assumption that the Earth was fixed at the center of the Universe, this was a relatively straightforward task for the stars and our own Moon. To predict the back-and-forth motion of the planets, however, a complex system of what came to be called “epicycles”, or “circles on circles” was developed. In this system, the assumed circular motion of the planets around the Earth was elaborated by adding a circle-on-a-circle to the orbit. This model then described the sometimes backward motion of the planets.

    These epicycles were sometimes further elaborated by adding epicycles to the epicycle itself, and so on, until a complex but observationally accurate model of the solar system developed over time.

    Given that there were no general-purpose computing devices in the 16th century, special-purpose mechanical devices called “armillary spheres” were developed to aid in visualizing the future movements of the planets and other heavenly bodies. These spheres were complex and sometimes beautiful, and generally built for Royalty—often, we imagine, so that the King could brag of having the most beautiful and accurate sphere to his fellow sovereigns. 

    OLYMPUS DIGITAL CAMERA

    Now, in our fantasy, suppose that you are a 16th century software engineer assigned to work on, say, version 173.92.3 of an armillary sphere. The key business requirement of this project is to produce the most accurate model of planetary movement yet developed, using fresh observations to construct more and more elaborate epicycles—and to do this before any other Monarch has such a sphere.

    Since our project is using Scrum, the backlog is full of epochs derived from the business requirements, like “As a Monarch, I want my armillary sphere to accurately reflect the new observational data for Jupiter before any other Monarch has such a sphere—or else”, where the “or else” was personally added by the King during his project review. There are similar Epochs for Mars, Saturn and so on. There is a Scrum team assigned to each planet, with a “Scrum of Scrums” coordinating the overall project. You are a scrum master, and your team owns the “Mars” epicycle Epoch.

    During the release kickoff, the product owner reminds you that there is a lot of pressure to meet the deadline for this project, and that there is a demo planned for the King’s upcoming visit, which is just six sprints away—three of which you need to reserve for the sphere mechanical construction team and other tail-end tasks. You and your team work with the product owner to do release level planning, elaborating the backlog and making your initial story point estimates using planning poker. You make an initial assignment of stories to sprints. The schedule is tight, but it looks like you can make it.

    Sprint one passes without major incident, with you and your team working on tasks related to the top priority story, which is “As a software engineer, I need to compute the additional epicycles required to account for the 2 degree inconsistency measured in the position of Mars during the last eclipse”. A couple of days before you finish up the sprint, a junior member of your team, named Nick Copernicus, comes to you with an interesting idea.

    Nick sees you in the cafeteria at lunch one day and says “I’ve been thinking about this whole epicycle thing…”

    “Yes, Nick?” you say.

    “Yes,” he replies, “I wonder if we haven’t ended up with a needlessly elaborate architecture here because we started from a false assumption.”

    “I’m listening, Nick, but I’m not sure what you’re saying” you reply.

    “Well”, says Nick, “we’re starting out with the assumption that the Earth is stationary and the Sun and planets go around it, right?”

    “Of course,” you reply. “We’ve been doing it that way since the 3rd century B.C.” 

    “Yes. Now I’ve been doing some thinking, and if we were to assume that the Earth goes around the Sun, it turns out that this whole Epicycle thing just goes away.”

    “Goes away?” you respond, startled. “What do you mean, goes away?”

    “Well, if we assume the planets all make circular orbits around the Sun at different distances, then for people on Earth the planets would naturally look like they’re going backwards sometimes. Let me draw you a diagram…”[i]

    He does, and a long discussion ensues. It’s a heated debate, but by the end of it you are convinced that he’s right, and that you and your team are patching a faulty architecture which is about 1700 years overdue for refactoring.  You and Nick decide to go talk to the Product Owner right away. 

    The Product Owner is a good guy, but much more business-oriented than technical. He listens patiently, and surprisingly does not offer any real opposition to Nick’s radical idea. However he says “Guys, look, this is an interesting idea. As you know, though, we’re on a tight schedule. If we don’t have this armillary sphere ready to demo in 5 more sprints, heads will roll.”

    Knowing the King is coming to see the demo, you are not sure if the “heads will roll” statement is literal or metaphorical—and somehow you feel reluctant to ask for clarification. 

    This is the “innovation” decision point in Scrum / Agile: How much risk do you take to incorporate radical innovation into your product, and when do you take it? The glib “textbook” answer is that if you’re really following Agile, you will have strong and complete test automation and so should never fear to radically refactor your architecture right up to the last minute.  Real projects, however, often have incomplete test coverage, and the real or perceived limitations around schedule and business goals can cause architectural improvements to be deferred—sometimes indefinitely. Is this the right thing to do?

    More in part II.

    Credits

    Photo of planetary motion from http://antwrp.gsfc.nasa.gov/apod/image/0312/retrogrademars03_tezel.jpg

    Images from wikimedia.org


    [i] To see how both models explain the retrograde motion of the planets, see the animation at http://www.sciences.univ-nantes.fr/physique/perso/cortial/bibliohtml/epiclc_ja.html and http://alpha.lasalle.edu/~smithsc/Astronomy/retrograd.html.

  • Scrum and the Copernican Revolution

    Does the Agile / Scrum software development paradigm encourage innovation, or discourage it? We continue to explore this topic in part II of our little fantasy. As you’ll recall from part I, we are imagining that the Copernican revolution in Astronomy happened during the course of a Scrum-driven effort to add yet more epicycles to the then-conventional “Geocentric” celestial model. This model, popular in Europe until the 16th century, predicted the motion of the planets by assuming the Earth was the center of the Universe, with the planets rotating around the Earth in a complex combination of circles-on-other-circles called “epicycles”.

    In part I we saw a junior engineer, Nick Copernicus, suggest a radical refactoring of the architecture of the armillary sphere your team is helping to construct. The “Mars” team, of which you are Scrum Master, is working along with other Scrum teams to produce a product update meeting the requirement: “As a Monarch, I want my armillary sphere to accurately reflect the new planetary observational data before any other Monarch has such a sphere—or else”. The King is coming to see a demo in six sprints, and sprint one is nearly over. Sprints 3 through 6 are reserved in the product plan for the construction and testing of the mechanical device.

    Nick Copernicus has made the suggestion that the complexities of planetary motion could more naturally be described by assuming that planets move in concentric circular orbits around the Sun, rather than the complex circle-upon-circle pattern the current Earth-centered architecture now requires. You see the elegance of his proposal and have become a believer. As scrum master of Nick’s team, you’ve taken his proposal to the Product Owner. The PO does not argue with you about whether Nick’s architecture idea is good or bad, but instead points out that you’re in a schedule-driven release and that the schedule is tight. Of course this is correct. What is the right thing to do in this situation?

    Here are some of the thoughts that run through your head:

    • You’ve got the wrong architecture—you are now convinced. Completing this release using the current architecture will simply be adding patch upon patch, making the architecture more and more cumbersome, and harder and harder to maintain over time.
    • If you don’t fix it now, when will you? Sure the schedule is tight, but it’s always tight. Last release was aggressive and this release will certainly be followed by yet another aggressive release. It’s always been that way for this Monarch, and will be for the foreseeable future.
    • On the other hand, if you don’t meet the business requirement by the release date you’ve been told “heads will roll”. You are not sure if this is literal or figurative, but either way—is it worth risking your job or worse just because the new architecture is more “elegant”? To put it bluntly: what’s in it for you?
    • The actual business requirement is to build an “armillary sphere” and to make it as accurate as possible. This new thing Nick came up with will indeed predict planetary motion, you think, but it won’t be an “armillary sphere”. By definition an armillary sphere is based on the assumption the Earth is stationary at the center of the Universe. You think this new heliocentric model should be accurate—qualitatively at least it explains the motion of the planets correctly and it just seems right—but the truth is that you haven’t tested it in action yet. All you’ve got is pictures on a napkin. Suppose you moved to this new architecture and it was less accurate—or didn’t work at all! The current model has been refined over nearly 2,000 years. The architecture may be a complicated mess, but one thing you can say for it is that it’s “battle tested”.
    • As you think about it, the business requirement is pretty lousy. It actually dictates an architecture—namely a geocentric model of the Universe as embodied in an armillary sphere. A good requirement should talk about the end result, not the means. It seems pretty clear to you that the King’s intent should be to model the Universe most accurately, and as it really is. But you don’t know that from the requirement as written. Maybe the King (you look around cautiously when you think this) doesn’t understand the architecture or astronomy and just wants something fancy to look at, like a piece of furniture. Maybe he only wants to one-up his fellow Monarchs, and for this he might see having the world’s most complicated armillary sphere as a good thing. Or maybe he really is interested in the ultimate in accuracy and that’s his key goal. The King’s true purpose is not at all clear from the requirement you’ve been given, now that you have a new perspective.
    • If part or all of the King’s real goal is to one-up his fellow Monarchs, moving to this new architecture could be one heck of a way to do it! If the Sun-centered “heliocentric” model turns out to be better, it could instantly make every armillary sphere in the world obsolete. The King would have the latest-and-greatest in models of the Universe, and the ultimate bragging rights.
    • If you don’t suggest this architecture, and some other King’s engineering team comes up with it, then your armillary sphere will become obsolete. While you probably won’t literally lose your head over this, at a minimum the King is going to ask some hard questions like “Why didn’t you guy think of this!” Now that a better architecture is obvious, doing nothing seems like another, though slower, path to job loss.

    Bottom line—it seems like a risk to refactor, and a risk not to. Your sense is that the refactored architecture is better, but it does not meet the “business requirement” as written, which you now realize contains a built-in assumption that you will use the old architecture. It may or may not meet the goal of improved accuracy—you just don’t know. And now that you see things from a new perspective you’re painfully aware that you really don’t understand the “strategy” driving the business requirements.

    There’s no way you would talk to the King himself about this—you’ve never even met the King, and he would have no idea who you were if his guards even let you near him. Despite no real answer to your question about “what’s in it for me”, you somehow feel that advocating this new architecture is the right thing to do. The Product Owner is the King’s representative on this project, so you decide you need to go talk with him again, if for no other reason than to understand what is behind the business requirement in the first place. Before you have that conversation, though, you decide to think the problem over from the Product Owner’s point of view.

    You know that the Product Owner’s key goal is to please the King—first, last and always. It’s not so much that the PO doesn’t understand what you and Nick are proposing, or your arguments about engineering elegance, architectural cohesiveness, and astronomical correctness. Rather it’s that the PO sees these arguments as totally beside the point. The PO’s only goal is shipping something on-time that meets the business requirements, and making the King happy. Your guess is that the PO will be thinking:

    • I do not want to do ANYTHING that adds risk to the schedule. It’s already tight, and we have fixed scope, and a hard end date. It’s also too late to recruit and train anyone, at least for this release, so we have a fixed team size.
    • The King may be pleased that we used our initiative and showed him a new approach that lets him one-up his fellow Monarchs. I—and the team—may get rewarded for this.
    • On the other hand the King may think we wasted his time and money even thinking about this, let alone doing anything about it. He hasn’t asked us for it. If it costs very much we could even get fired for doing it, if he doesn’t like it. It’s very high risk.
    • If I don’t say anything and some other King gets it, he will think we’re a bunch of idiots for not thinking of it first. He may fire us all. He’ll certainly fire me (or worse) as Product Owner for not keeping the product current.
    • If I ask the King for permission before we have anything to show him—while it’s still just an idea on a napkin—he will (the PO secretly suspects) have no idea what we’re talking about. The idea is too abstract and technical. If we are to communicate the concept at all, we would need some sort of working model or prototype to make it concrete.

    In sum, you realize the Product Owner also sees a risk either way, though in his case the safest course is probably to do nothing. On the other hand, if there was some low-risk way to develop Nick’s model, the PO might go for it because there’s upside for him and the project as well—if it works. You can’t think of what such a low-risk course might be, however. That seems like the key to this whole dilemma—how to take out the risk.

    You don’t need to wonder what Nick Copernicus is thinking because he told you at lunch the other day.

    “You know, I’ve been thinking about the refactored architecture” he said. “In fact, I can’t stopthinking about it.”

    “What are you thinking, Nick?” you replied.

    “I’m really convinced this is the right thing to do. I mean, I’m really convinced. In fact…” he hesitated.

    “In fact?” you prompt.

    Nick took a deep breath. “In fact, I’ve been thinking that if we don’t do this… Well, if we don’t do this—I’m going to move to another kingdom and start my own shop.”

    You gasp “Nick, nobody quits this Monarch! And how do you know you’ll even get funded in a new kingdom? Or even get a new job! Times are really tough, especially for job-hoppers.”

    “Yeah, I know” Nick replied, looking worried but resolute. “I would hate to do it. I really love this place. But if that’s the only way I can get this new architecture built, that’s what I’ll have to do.”

    Leaving that conversation, you are really conflicted. Nick is one of your best guys, and you’d hate to lose him. You are also genuinely concerned about his future. He’s a great kid, and the odds against successfully launching a new workshop in a new kingdom and being in a position to build his heliocentric model are, well, truly astronomical. You have thought about it for several days, talked over the pros and cons with your spouse, and now you’ve made your decision. You pull Nick aside and say:

    “Nick, I know how much this refactoring means to you. I’m willing to support you—back you all the way. But I want you to agree that if I do it, win or lose, you will wait at least until the end of this project before you even think about leaving. Will you promise that?”

    Making this offer, you figure that if you get shot down—again—then at least this will buy time for him to cool down and for you to try to change his mind.

    Taking a deep breath, Nick says: “OK.”

    The die is cast—you and Nick will once again approach the product owner and try to sell the idea of a major architectural refactoring, moving from a geocentric armillary sphere to a heliocentric model. The two of you talk long after the shop has closed about your options and your approach, until you at last come up with an alternative you think the PO just might be willing to endorse. You leave the workshop late in the evening, with a handshake and a vow to speak with the product owner tomorrow.

    To be continued…