Ways of Writing Code
There are approaches to writing code that are structurally appropriate for the task, and make it easier push beyond the boundaries of what's possible.This is a growing project.
There are ways of working that lend themselves to large, complex systems like software development. These ways of working overlap in some amount with the ideas presented in agile methods. This is not a surprise – any group of experts who have experienced making good work well will probably describe methods that are similar to each other. Structures have outcomes that are easier within that structure; similar outcomes will suggest similar structures.
Keller Easterling calls these ways of working “Medium Design”, Nim Daghlian calls this “Conceptual Labor”. Christopher Alexander calls this “Unfolding Wholeness” and “Structure Preserving Transformations”. Fundamentally all of these ideas are built around the idea of paying close attention to the way things are, thinking about what you think your trying to do, doing some work in a way to get you closer to where you think you want to go, reevaulating the success of that change, and repeating the process because potentially everything is different now.
This is sort of Scrum shaped! This is a similar shape to the Scrum loop - look at the work that needs to be done, do a small amount of that work, reflect, and repeat. The difference lies in what Easterling identifies in
privileg[ing] declarations, right answers, universals, and elementary particles. It is captivated by circular logics and modernist scripts that celebrate freedom and transcendent newness—narrative arcs that bend toward a utopian or dystopian ultimate.
In focusing so intently on narrowing it’s scope to valuing “Working software over comprehensive documentation” or following a principle of ”[the] highest priority is to satisfy the customer through early and continuous delivery of valuable software”, agile methodologies explicitly elide what Easterling describes as as “undeclared dispositions”.
Beyond declared ideologies, here is a matrix or medium of activities and latent potentials—the undeclared dispositions that are something like culture’s muscle memory … The disposition of any organization makes some things possible and some things impossible.
By focusing on the entire system, by looking for feeling and human flourishing, and working towards increasing the liveliness of that system, one cannot ignore the structural latencies and unstated dispositions of that system. Navigating the entangled relationships – and context - of the work becomes a core part of the work itself as Daghlian writes, even if it’s work we don’t want to be doing because it is very, very hard.
Its almost like the useful and good ways to make software are not ideas that agile can claim, so agile built a lot of weird cruft around those ideas to call itself special but cant actually define that weird cruft. I’m not sure that “agile” brings anything special to the table of what could be considered “ways of working well and making something good”. Like yes; keep assumptions open for as short as possible, ship to prod as often and small as possible, iterate on everything, be aware that the work you think will doing will change, your plans must be dynamic. What value does agile bring to the table? What’s the value prop with “agile” and “scrum” if they don’t actually proscribe anything or suggest ways of working? Is the core idea “be okay with ambiguity” because thats also known as “working”.
- At any given moment in a process, we have a certain partially evolved state of a structure. This state is described by the wholeness: the system of centers, and their relative nesting and degrees of life. A. In a software project, the structure is the complete system that runs, and the humans who run and interact with the inputs and outputs. Centers are localities of coherence within this structure – behaviors, code modules, etc etc.
- We pay attention as profoundly as possible to this wholeness—its global, large-scale order, both actual and latent. A. Understanding the entire experience of your system, how its working and how it could be working.
- We try to identify the sense in which this structure is weakest as a whole, weakest in its coherence as a whole, most deeply lacking in feeling.
- We look for the latent centers in the whole. These are not those centers which are robust and exist strongly already; rather, they are centers which are dimly present in a weak form, but which seem to us to contribute to or cause the current absence of life in the whole.
- We then choose one of these latent centers to work on. It may be a large center, or middle-sized, or small.
- We use one or more of the fifteen structure-preserving transformations, singly or in combination, to differentiate and strengthen the structure in its wholeness.
- As a result of the differentiation which occurs, new centers are born. The extent of the fifteen properties which accompany creation of new centers will also take place.
- In particular we shall have increased the strength of certain larger centers; we shall also have increased the strength of parallel centers; and we shall also have increased the strength of smaller centers. As a whole, the structure will now, as a result of this differentiation, be stronger and have more coherence and definition as a living structure.
- We test to make sure that this is actually so, and that the presumed increase of life has actually taken place.
- We also test that what we have done is the simplest differentiation possible, to accomplish this goal in respect of the center that is under development.
- When complete, we go back to the beginning of the cycle, and apply the same process again.