Skip to content
Blog

If you put your name on the application, you're signing off on its quality.

A look inside Nutworkz's delivery process, from nightly builds through dev and UAT to production, with automated checks and SAST built into the journey.

6 min read Nutworkz Engineering
A CI/CD release path from Nightly through Dev and UAT to Production, with a SAST security checkpoint before acceptance.

All Guts and Glory, Where Quality Comes From

Quality is easy to claim and harder to deliver. It is not a badge at the end of a project, a successful demo, or a green light from one test. Quality is the result of the decisions a team makes every day: how it reviews code, how it tests changes, how it handles security, and how carefully it moves software towards the people who depend on it.

At Nutworkz, we treat delivery as a chain of responsibility. A change does not leap from a developer's laptop straight into production. It moves through environments that give us increasingly meaningful chances to inspect it, challenge it and improve it.

There is a simple idea behind the whole process: if you put your name on the application, you are signing off on its quality.

Start small: nightly builds

The first shared proving ground is nightly. When a change is ready to be seen beyond a developer's machine, a feature branch can trigger a build and deployment to the nightly environment.

That gives the team a real application to work with early. We can check whether the change behaves as expected, whether it fits with the rest of the system, and whether something that looked fine in isolation has caused a surprise elsewhere. Nightly is not the place to declare a feature finished. It is the place to find out what we have missed while the cost of changing it is still low.

The build itself matters, too. We package the application as a Docker image, then run that image and check that it starts and serves the expected content before it is pushed to the registry. If it cannot become ready, or a basic page check fails, the pipeline stops there. A broken image should not travel onward just because the source code compiled.

Dev: make the change work with the product

Once a change is ready to join the shared development line, it moves into dev. This is where we look beyond "does my feature work?" and ask "does it work with the application?"

That distinction is important. A feature can behave perfectly on its own and still fail when it meets existing routes, styling, configuration or integrations. Dev gives the team a common place to see those interactions, exercise the workflow and correct problems before asking others to evaluate the result.

The application is built and smoke-tested here as well. We do not assume that a successful nightly build guarantees a successful dev build. Each step should provide evidence about the version moving through it.

UAT: let the intended users challenge it

UAT, or user acceptance testing, is where a candidate is tested against the reason it was built in the first place. Does it support the real workflow? Are the important cases covered? Can the people who will use it understand what to do and trust what happens next?

This is not a ceremonial click-through. It is a chance for stakeholders and users to challenge assumptions that can be invisible to the team building the feature. They may uncover a confusing step, an overlooked edge case or a mismatch between the requested outcome and the delivered experience.

Findings here are useful, not embarrassing. A discovery in UAT is a contribution to quality. The point of having an environment before production is to make room for that discovery while we can still respond deliberately.

Security belongs in the same conversation

A working feature is not automatically a safe feature. That is why static application security testing, or SAST, belongs in the delivery process. SAST examines source code for patterns that may indicate security weaknesses, giving engineers a chance to investigate potential problems before a release reaches production.

A scan is not a substitute for good design, careful review or deeper security testing. It is another source of evidence, and its findings need human judgement. By placing that evidence in the pipeline, security becomes part of ordinary engineering work rather than a last-minute exercise. Findings can be understood in the context of the change, fixed by the people closest to it, and checked again before release.

The goal is not to make a report look clean at any cost. The goal is to understand the risks we are accepting and address the ones we should not.

Production: release with accountability

Production is where software becomes a promise to customers. By the time a change reaches it, the team should have more than confidence. It should have a trail of checks and decisions that explains why this version is ready.

Our deployment process builds a production image, checks that it starts and serves the expected content, and records it with a commit-specific image tag as well as the current production tag. That commit reference matters: if we need to investigate or roll back, we can identify a known build rather than guessing which source produced a moving tag.

After deployment, the pipeline checks that the application responds. That final check does not prove everything is perfect, but it catches an important class of failure: the release may have built successfully and still not be serving traffic correctly.

The guts are the work

A pipeline is valuable because it gives a team repeatable feedback. It does not take responsibility away from the people who write and review the software.

Automation can tell us that an image starts, a page responds, or a scanner has found a pattern worth examining. People still need to decide whether the behaviour is right, whether the finding matters, whether the change is maintainable and whether the release is ready.

That is where the "guts and glory" part lives. In the unglamorous review. In the test that catches the awkward edge case. In the conversation that pauses a release until a concern is understood. In the engineer who fixes the root cause instead of explaining it away.

Every environment is another opportunity to make a better decision. Nightly makes changes visible early. Dev tests how they fit together. UAT challenges them against real use. SAST brings security concerns into the workflow. Production receives a version that has earned its way there.

And every person who contributes to that journey puts their name on the result. That is not a demand for perfection. It is a commitment to care about the quality of what we build, to be honest about what we know, and to keep improving it after release.

That is where quality comes from.

Questions about this?

We'll walk you through what it means for your deployment — architecture, timeline and a number.