Collabwire
// BUILD SLOTS

Engineering Without the Bullshit

By Alex Zmuda·21 May 2026·7 min read

Most software waste starts before implementation: in unclear ownership, wrong abstractions, process theatre and systems designed around meetings instead of operational reality.

System summary

Field note on how Collabwire cuts software waste before code - ownership, anti-theatre, clear architecture and systems built for operational reality, not Jira motion.

Most software waste starts before implementation.

It starts in the moment a business problem is translated too quickly into a feature request, a backlog item, a workshop output, a roadmap promise or a Jira ticket. From that point on, the organisation often begins optimising the delivery of something it has not properly understood.

Code is rarely the first failure. Code is usually where earlier failures become expensive.

The first failure is usually ownership. Nobody can clearly say who owns the workflow, who owns the data, who owns the exception path, who owns the operational result or who pays the cost when the system behaves incorrectly. Instead, the work is pushed into process. The ticket becomes the unit of truth. The meeting becomes the unit of alignment. The backlog becomes a substitute for a model of the system.

This is where software projects start to rot quietly.

Jira is not the problem by itself. Jira is a database. It can be useful when the underlying thinking is clear. The problem begins when teams use process tooling to avoid making architectural and operational decisions. A badly understood workflow does not become clearer because it has been split into epics. A weak product assumption does not become stronger because it has acceptance criteria. A broken business process does not become sane because a developer can now automate it.

Below the ticket layer

The work has to begin below the ticket layer.

Before we decide what to build, we need to understand what the system is supposed to carry. That means identifying the operational state, the source of truth, the failure modes, the users who actually depend on it and the cost of getting it wrong. It also means asking whether software is the right answer at all. Many requested features are not product needs. They are symptoms of unclear ownership, fragmented data, manual coordination or internal politics expressed as interface requirements.

We do not start from screens

This is why we do not start from screens.

Screens are important, but they are not the system. A screen is only a surface over decisions, state and behaviour. If those are weak, the interface becomes decoration over disorder. The product may look better, but the organisation still has to compensate manually for what the architecture failed to encode.

A serious build starts by finding the real operating model. What enters the system? What changes state? What needs to be trusted? What can fail? What must be traceable? What should be deterministic? Where is human judgement required? Which parts of the workflow are stable enough to automate, and which parts still need to remain explicit and observable?

Those questions matter more than the initial technology choice.

The fashionable answer in 2026 is often to add agents, vector stores and orchestration layers before the underlying process is even clean. That can produce impressive demos, but it often produces fragile systems. If nobody can explain who is responsible when the output is wrong, what data the agent is allowed to trust, how decisions are audited or where a human can override the system, then the automation is not architecture. It is theatre.

Good automation is not magic. It is disciplined reduction of manual work. Sometimes that means an LLM-assisted workflow. Sometimes it means a deterministic pipeline, a queue, a rules engine, a clean admin surface and a well-defined data model. The boring answer is often better because it is easier to inspect, easier to test, easier to operate and easier to reason about under pressure.

This is one of the differences in how Collabwire works.

We are not interested in adding technical surface area just to make a project look more advanced. Complexity has a carrying cost. Every service, integration, queue, agent, permission model, background worker and deployment path becomes part of the operational burden. If it does not create leverage, it is debt with better branding.

Architecture is not the number of boxes on a diagram. Architecture is the set of decisions that allows the system to change without collapsing into fear. It defines the boundaries of responsibility, the flow of data, the ownership of state, the way failures surface and the cost of future change. A system with fewer components and clearer boundaries is usually stronger than a system that copies the shape of enterprise architecture without the organisational pressure that justifies it.

Refuse architecture cosplay

This is why we refuse architecture cosplay.

Microservices do not make a product serious. Event-driven flows do not make a workflow coherent. Kubernetes does not fix a confused domain model. AI agents do not remove the need for deterministic logic where correctness matters. A large backlog does not prove the product is mature. It may only prove that nobody has had the courage to reduce the problem.

Reduction is an engineering skill.

A good technical partner should remove unnecessary scope before writing code. That does not mean shrinking ambition. It means protecting the system from noise. The most expensive parts of software are often the parts that should never have existed: features built to satisfy a temporary conversation, abstractions created before the domain was understood, integrations added without ownership, dashboards built because nobody trusted the underlying data.

Body-leasing is not ownership

This is where agency and body-leasing models often fail the client.

A vendor paid to consume tickets has little incentive to challenge the premise. Ambiguity creates hours. Scope creates hours. Process creates hours. If the client asks for a complex system, the vendor can produce a complex system. If the organisation wants motion, the delivery machine can provide motion. Everyone looks busy, but the software may still be moving in the wrong direction.

That is not engineering ownership. That is production of output.

Ownership changes the incentives. When we build a system, we care about whether it can be operated, maintained, extended and trusted after launch. That forces different decisions. It becomes harder to hide behind vague requirements. It becomes harder to accept a bad abstraction because the first version is faster. It becomes harder to ship something that looks finished but has no operational spine.

Durability, clarity, ownership, leverage

This is why durability, clarity, ownership and leverage are not decorative values for us. They are filters.

Durability means the system must tolerate change. Requirements will move, users will create edge cases, external systems will fail and the business will eventually ask for something that contradicts an early assumption. The architecture should not treat that as a surprise.

Clarity means the software should make the business easier to understand. A system that introduces more ambiguity than it removes is not a platform. It is a liability with a user interface.

Ownership means the build cannot be split into isolated task consumption. Someone has to care about the whole organism: domain, backend, frontend, infrastructure, deployment, operations and the long-term shape of the product.

Leverage means the system should reduce operational drag. The result should be fewer manual handovers, fewer shadow spreadsheets, fewer repeated decisions held in people's heads and more work moving through clear structure.

If a proposed build does not improve at least some of those dimensions, the technical solution is probably compensating for an unresolved business problem.

This is why the early phase of a project should feel slightly uncomfortable. The goal is not to validate every request. The goal is to expose weak assumptions before they become implementation cost. It is cheaper to kill a feature in a conversation than to maintain it for three years. It is cheaper to simplify a workflow before it reaches code than to automate the wrong process and then call the resulting complexity "legacy".

Match structure to pressure

The same applies to technology choices.

Rust is excellent when concurrency, throughput, long-running workers, memory safety or resource control are real concerns. It is unnecessary for many simple business systems. TypeScript is productive when interface and application velocity matter. Go can be a clean answer for services and infrastructure. Laravel can be a strong answer for business software when speed, clarity and maintainability matter more than fashionable architecture. The question is never which technology sounds most serious. The question is which failure mode the system actually has.

Engineering judgement is the ability to match structure to pressure.

Overengineering is not professionalism. Underengineering is not pragmatism. Both are failures of calibration. A simple system should remain simple. A critical system should be treated as critical. A prototype should not pretend to be a production platform, and a production platform should not be built like a disposable prototype.

Most companies know this in theory. In practice, social pressure distorts the work. Stakeholders want visible progress and managers want reporting artefacts; teams want task clarity and vendors want scope. Underneath all of it, everyone wants the comfort of a process that appears controlled.

But software does not care how controlled the process looked.

Production only cares whether the system works.

It cares whether the data is coherent, whether failures are observable, whether deployments are safe, whether operators can act, whether integrations recover, whether edge cases are handled and whether the next change requires confidence or fear.

This is why we prefer fewer abstractions, stronger boundaries and more explicit ownership. It is also why we are suspicious of delivery environments where everyone can explain the workflow in Jira but nobody can explain the system in production.

Anti-theatre, not anti-process

Engineering without the bullshit is not anti-process. It is anti-theatre.

Good process should clarify decisions, reduce ambiguity and help the team move through complexity. Bad process creates the appearance of control while moving uncertainty deeper into the system. The distinction is visible in the software that comes out of it. Systems built from theatre usually need people to compensate for them. Systems built from clear ownership reduce the need for compensation.

That is the value, and it has nothing to do with louder marketing, more elaborate ceremonies or a bigger stack. It is not the comfort of pretending every problem needs a platform.

The value is in building software that carries real operational weight without turning into a maintenance trap. Software with a clear data model, explicit failure paths, understandable boundaries, observable behaviour and enough discipline not to become a museum of every conversation that happened during delivery.

Every line of code earns its place. Every architecture decision has a reason. Every deployment has to survive contact with the real world.

That is not glamorous.

It is simply the difference between software that looks delivered and software that can actually be operated.
Share
AZ
Written by
Alex Zmuda
CEO / Software Architect

System design, architecture, technical direction.