Software engineering — established practice
Software built with restraint.
DOG AND JONES LTD is a software engineering practice. We design, build and maintain custom applications and business systems for organisations that need software to behave predictably over a long period of time.
Our work is deliberately unglamorous. We favour clear requirements, small increments, readable code and systems that can be understood by the people who inherit them. Every engagement begins with a written conversation about what the software has to do, who depends on it and what has to remain true after we hand it over.

01 / Overview
What the company does
We work as an engineering partner rather than a supplier of finished products. That means we take responsibility for the technical shape of a system: how it is structured, how data moves through it, how it is tested, how it is deployed and how it will be changed once it is in use.
Engagements typically involve building something that does not yet exist, replacing something that has become difficult to maintain, or connecting systems that were never designed to speak to each other. In each case the work is scoped in writing before implementation begins, and the scope is revisited whenever the understanding of the problem changes.
We do not position ourselves as a substitute for an organisation's own judgement about its business. We contribute engineering judgement: what is feasible, what it will cost in complexity, and what the long-term consequences of a given technical decision are likely to be.
02 / Expertise
Areas of engineering focus
The practice concentrates on a small number of areas rather than claiming general coverage of every technology in circulation.
- Application engineering
- Server-rendered and client-side web applications, including the data layer, authentication flows, background processing and the administrative interfaces that support them.
- Systems and data flow
- Designing how records move between services: message handling, scheduled synchronisation, idempotent processing and reconciliation when two systems disagree.
- Interface implementation
- Translating designs into accessible, responsive interfaces with predictable behaviour across screen sizes, input methods and assistive technologies.
- Operational readiness
- Build pipelines, environment configuration, logging, error reporting and the routine mechanics that determine whether a release can be made calmly.
03 / Business challenges
The problems that usually bring people here.
A system works, but only one person understands it. A process that used to take minutes now takes a day because three tools hold three versions of the same record. A product has grown by accretion and every change now carries an unpredictable risk.
These are engineering problems with commercial consequences. They are rarely solved by adding more software; they are solved by clarifying what the software is supposed to guarantee and then removing everything that gets in the way of that guarantee.
- Manual work that should be automatic
- Repeated data entry, spreadsheet reconciliation and copy-paste between tools.
- Systems that cannot be changed safely
- Absent tests, unclear ownership and deployment procedures nobody wants to run.
- Information that disagrees with itself
- The same customer, order or record represented differently in each system.
- Knowledge held in one head
- Undocumented behaviour that becomes a risk the moment someone is unavailable.

04 / Services
An overview of the work
The services listed here are described in more detail on the Services page at dogjonesco.com/services. In summary, the practice covers the full span of a software system's life: deciding what to build, building it, connecting it to what already exists, and keeping it healthy afterwards.
- Custom software development
- Applications shaped around a specific operational process rather than adapted from a generic product.
- Web application development
- Browser-based systems with attention to accessibility, performance and behaviour on constrained connections.
- Integration work
- Interfaces between systems, including the error handling and retry behaviour that integrations usually lack.
- Modernisation and maintenance
- Incremental improvement of systems already in production, prioritising the changes that reduce risk first.
05 / Technology
How technology is chosen
Technology choices are made in service of the problem, not the other way round. We prefer widely used, well-documented tools with long support histories over newer alternatives that would require the organisation to depend on our continued involvement.
Before a dependency is added, we ask what happens if it stops being maintained, whether the same result could be achieved with what is already in the project, and whether the next engineer would recognise it. A smaller dependency surface is easier to secure, easier to upgrade and easier to reason about during an incident.
Where a client already has an established stack, we work within it. A rewrite is proposed only when the existing foundation genuinely prevents the outcome being asked for, and the reasoning is set out in writing so it can be challenged.
06 / Delivery
How a piece of work moves from question to release.
Step 01
Framing
We establish what the software is meant to change, who is affected and what would count as the work being finished. Assumptions are written down rather than carried in conversation.
Step 02
Technical shaping
The problem is broken into parts that can be built and verified independently. Interfaces between the parts are defined early, because they are the hardest things to change later.
Step 03
Increments
Work is delivered in small, reviewable pieces. Each increment is intended to be demonstrable, so that direction can be corrected while correction is still inexpensive.
Step 04
Verification
Automated checks cover the behaviour that matters most, and manual review covers the parts where judgement is required. Failures are investigated before new work is started.
Step 05
Release
Changes reach production through a repeatable procedure with a known way back. Releases are deliberately unremarkable events.
Step 06
Handover
Documentation, environment details and open questions are transferred in a form that lets another engineer continue without us.
07 / Quality
Quality and reliability principles
Reliability is a property of how a system is built, not a claim made about it afterwards. The practices below are the ones we apply consistently, and they are the standard we ask to be held to.
- Behaviour is verified, not assumed
- The parts of a system that would cause real harm if they broke are covered by automated tests written alongside the implementation.
- Failure is designed for
- Network calls time out, disks fill and third parties return unexpected responses. Handling those paths is part of the feature, not a later addition.
- Code is written to be read
- Naming, structure and comments are chosen for the person who will next open the file, who may have no context at all.
- Changes are reviewed
- Work is examined by someone other than its author before it reaches production, and review comments are treated as part of the deliverable.
08 / Security
Security and privacy approach
Security is treated as an ordinary engineering concern rather than a separate stage. Input is validated at the boundary, access is checked on the server for every request, secrets are kept out of source control and dependencies are reviewed when they are introduced and when they are updated.
Personal data is handled on the principle of collecting as little as the function requires and keeping it no longer than the purpose justifies. Where a feature would involve personal data, we ask what the lawful basis is, who needs access to it and how it will eventually be deleted, before the schema is written.
Our own handling of information relating to this website is described in the Privacy Policy published at dogjonesco.com/privacy-policy.

09 / Collaboration
How we work alongside a client team.
Engagements are arranged around a single point of contact on each side and a written record of decisions. Written communication is preferred for anything that changes scope, because it can be re-read months later by people who were not in the room.
Progress is reported in terms of what now works rather than hours consumed. When something takes longer than expected, we say so at the point we notice, together with the revised understanding that caused the change.
We are comfortable working as the sole engineering resource on a project, as an addition to an existing team, or as a reviewer of work carried out elsewhere. In each arrangement the aim is the same: to leave the client team more capable of maintaining their own systems, not less.
10 / Contexts
Business contexts the work suits
Rather than claim experience in named industries, it is more honest to describe the kinds of situations where this approach tends to be useful. The characteristics below matter more than the sector a business happens to operate in.
- Process-heavy operations
- Organisations whose day-to-day work follows defined steps that are currently held together by spreadsheets, email and habit.
- Multiple systems of record
- Environments where several tools each hold part of the truth and someone spends time keeping them aligned by hand.
- Long-lived internal software
- Applications that are expected to run for years and be maintained by people who did not write them.
- Small teams with real constraints
- Situations where there is no capacity to absorb an unreliable system, so the cost of a defect is felt immediately.
11 / Contact
Enquiries are handled by email.
DOG AND JONES LTD accepts written enquiries at the address below. A short description of the problem, the systems currently involved and the outcome you are hoping for is enough to begin a useful conversation. Full contact guidance is published at dogjonesco.com/contacts.
- Entity
- DOG AND JONES LTD
- jacobholmes1971@gmail.com
- Domain
- dogjonesco.com
