Essays and questions / Essay

Emergent Software Development

People often discover what software needs to do by using a version that does not quite do it yet. The missing exception becomes obvious. A field turns out to mean something different to the person entering it. A useful result reveals another question worth asking.

That learning can begin early. A person who knows the job and someone who can help build can start with real material, make something useful and improve it together. They do not need to settle the whole future of the system before trying the first part.

A retro photographic collage of people following worn paths across a grassy commons. The landscape curls upward into a huge sheet of drafting paper whose lines follow those paths. Two colleagues study the plan beside an oversized pencil.
Follow the work The paths people take become the plan.

The first version is part of discovery

A workbench keeps the instructions, tools and examples for a piece of work together. It belongs with the customer and can be used with the AI tools they already have. Its first job is to produce something a person can inspect and use.

The starting question is small: which part of this job would be worth improving? We need enough understanding to try it sensibly. The first version then gives the people involved something to correct.

Those corrections are valuable requirements. They can show that a rule applies only in certain circumstances, that a source is unreliable or that a decision depends on knowledge the instructions have not captured. The person doing the work can explain the distinction while the example is in front of everyone.

A failed run can be informative. It may reveal a missing input, an unnecessary feature or a task better left to a person. We should be willing to change the proposed system as a result, rather than treating every surprise as an obstacle to delivering the original plan.

Contribution can begin in the person’s own language

The business owner does not need to write code to improve a workbench. They can mark an incorrect assumption in an output, bring an example that behaves differently or explain why a suggested action would be wrong.

We can help turn that contribution into a change to the instructions or tools, then try the next run together. Over time, the person may want to make more of those changes themselves. Working alongside them can build that ability. An invitation to open a repository does not teach it.

Other colleagues can contribute in the same way. An engineer can improve a connection to another system. Someone receiving the output can explain what they actually need from it. A new user can expose assumptions the original author has stopped noticing.

The result is a practical conversation carried by the work. People have something specific to point to, and their corrections can change what happens next.

A workbench can be the useful end state

Some workbenches serve one person or a small team. Someone runs them when needed, checks the result and changes them as the job changes. That can be a good arrangement for as long as it remains useful.

A tool should not have to become a product to justify its existence. Nor does another team’s interest automatically mean the original needs to become a company-wide standard. It might be more useful to share the pattern and let the other team adapt it.

When dependence grows, the arrangement can grow with it. More people may need an easier interface. Repeatedly moving the same information may justify connecting to its source. A process that must keep going while its original author is away needs someone else who understands it and can help.

Those are concrete reasons to invest. They are more informative than a generic ambition to make everything production-ready.

Real use gives engineers something substantial to work with

When a workbench does need to become a durable service, engineering starts with more than a description of what people might want. There are actual inputs, working tools, corrected outputs and examples of where the process breaks down.

The people involved can explain which choices are stable and which remain unsettled. They can show what they do manually, where that judgment matters and where they would welcome a more dependable mechanism. The workbench provides a way to exercise those questions while the underlying software changes.

This does not eliminate architecture. It gives architecture a better subject. A database, queue, interface or shared service can answer a need that has become visible. The engineers and the people doing the job can decide together how much structure the next version deserves.

The same discipline applies to shared engineering work. A common way to access data or deploy a service can save several teams from solving the same problem. Its usefulness comes from the teams it helps, not from how comprehensive the platform looks before they arrive.

Keep the direction open

A first version creates possibilities, including the possibility that the idea does not deserve more work. It may be useful as it stands. It may expose a better use of an existing tool. It may justify a more substantial build.

Leaders can make those choices with people who have tried the work. What changed? Who found it useful? What are they still doing around it? Would more investment improve the job, and who wants to carry it forward?

This is how software can emerge through use without making everyone responsible for an accidental system. The decisions remain explicit, while the people doing the work have a meaningful part in shaping them.

Our approach to building follows that pattern: get close to the job, contribute something useful and help people become able to continue. The software is part of what we leave behind. So is their ability to change it.