Charles Venshore

Areas of practice

Engineering choices that survive the original team

01

Compatibility across generations of banking software

I examine a change from the receiving application's perspective, including consumers that have not adopted the newest assumptions. An optional field can be harmless to one client and incompatible with another whose parser expects a fixed response shape. My team records that dependency before recommending a transition. In the seventy-two-consumer rehearsal, ten adaptations left two consumers on the older contract. I supported a defined coexistence period with ownership and retirement conditions, rather than call the contract change complete because most clients tolerated it. The engineering question includes how both versions will be tested and supported while they remain in use. Business owners still decide whether the resulting service is appropriate for their banking activity. A compatibility result supplies evidence for that decision; it does not transfer the decision to the interface designer.

02

Release artefacts with a traceable build account

I want another engineer to identify the inputs and process behind the executable the bank intends to run. Source control is necessary, but a repository revision alone may omit dependencies, build settings or the environment that produced the package. I organise the release account around the artefact itself and the evidence supporting its origin. In a thirty-six-artefact review, six incomplete histories were reconstructed while two stayed held. That result did not establish that every traceable release was free of defects or security weaknesses. It made a particular engineering question answerable: what do we know about how this package was made? I keep that question distinct from functional acceptance, vulnerability assessment and deployment authority, so a useful improvement in provenance is not mistaken for a universal assurance about the software.

03

Calculation behaviour at the difficult boundaries

I ask teams to make the business convention explicit before treating numerical agreement as a purely technical exercise. Ordinary examples can agree while midpoint rounding or a negative credit behaves differently. Our synthetic rehearsal contained eighteen thousand examples, including seventy-two disagreements that required examination with the authorised owners. Sixty were resolved and twelve remained held. No actual customer funds moved in that exercise, and I did not translate a test count into a monetary benefit. My contribution was to establish reproducible examples, isolate the implementation difference and preserve the decision about intended behaviour. The resulting record should help a future maintainer understand why the accepted rule was chosen. It should also identify the remaining uncertainty, rather than bury it inside a broad statement that the calculation engine has been tested.

04

Shared platforms with defensible exceptions

I judge an internal platform by the work it makes supportable and the obligations it can actually meet. Adoption is useful evidence when the participating teams fit the service. It becomes misleading when a specialist requirement is hidden to improve the percentage. In a twelve-team programme, nine adopted initially, two followed after support changes and one retained a separately governed route. The observed reduction in test-environment waiting concerned the original nine teams and was not extrapolated to production delivery. I ask platform owners to describe the cost of both the common service and its necessary exceptions. An exception should have an accountable owner and a reason that can be revisited; it need not be portrayed as a temporary failure when the shared offering does not yet support the required work.

How I lead

I want an engineering team to inherit a working explanation, not a dependency on the last person who remembers why the code behaves that way.

At scale

The responsibility, in figures

162

Engineering employees

Five direct reports; forty-two contractors separately

USD62 m

2026 authority

USD38 million platform engineering; USD24 million maintenance

34 years

Software career

Development, platforms and banking technology leadership

In practice

Decisions and their consequences

Case 01

Keeping two older consumers on a contract they could still interpret

In September 2024, a proposed banking-service response introduced an optional field. The producing team considered the addition compatible because clients could ignore a field they did not use. A rehearsal across seventy-two known consumers found sixty behaved as expected, but twelve depended on a rigid response shape. For those applications, the producer's definition of optional did not describe the receiving behaviour.

The product team wanted a single transition date to simplify the release. Application owners were concerned that changing every dependent client at once would compete with already committed work. I asked for a versioned transition, with the older contract retained for consumers whose readiness had not been demonstrated. That choice added support and testing work. It also prevented the convenience of a single release date from deciding how much uncertainty a receiving team had to accept.

We spent seven weeks and USD1.4 million examining the consumer behaviour, adapting ten of the twelve rigid clients and rehearsing both contracts. The result was seventy consumers compatible with the new response and two remaining on the older contract. Their owners retained an explicit migration task and support arrangement. We did not describe the two as technically migrated because traffic could still reach the service through the existing route.

The enterprise gained a more precise transition account. A producing team could see which consumers had demonstrated compatibility, and application owners could identify the version they were relying upon. The result did not establish that every banking workflow using those consumers had been accepted for every possible change. It addressed the response contract examined in the rehearsal.

I accepted the cost of coexistence and asked for a reviewable exit condition, rather than treat indefinite dual support as the answer. Looking back, I would inventory actual parsing behaviour when proposing the interface change, before the word optional creates an expectation that receiving applications have no work to do.

Case 02

Holding two release artefacts whose build histories remained incomplete

In February 2025, we examined thirty-six release artefacts from a defined banking-application portfolio. Twenty-eight had a traceable account connecting the package to the relevant source, dependencies and build process. Eight did not: five lacked sufficient build records and three had incomplete dependency information. Access to the repositories did not resolve those gaps. The question concerned the package presented for release, not merely whether some related source code existed.

Delivery managers wanted to avoid holding releases whose functional tests were otherwise satisfactory. Engineering colleagues argued that accepting an unexplained package would leave future maintenance and investigation dependent on individual recollection. I supported a hold on the affected artefacts while the teams reconstructed the evidence. Functional testing remained necessary, but it did not answer how the executable had been produced.

The five-week programme cost USD620,000. We worked with the producing teams to recover build inputs, examine dependency records and document the relationship to the reviewed packages. Six histories became traceable. Thirty-four of the original thirty-six artefacts therefore had an adequate build account for this review, while two remained held. We did not silently replace the original inventory with only the packages that were easiest to explain.

The immediate change was a release discussion anchored to identifiable artefacts and their supporting records. It was not a finding that the thirty-four packages were defect-free, secure in every respect or authorised for every deployment. Those questions retained their own examinations and decision owners. My report included the cost of the reconstruction and the remaining two holds.

I wanted the next maintainer to be able to begin from an engineering record rather than a search for the colleague who remembered the build. For a similar portfolio, I would agree the required build evidence when the delivery route is established, instead of discovering at release review which parts of that history were never retained.

Case 03

Leaving twelve synthetic rounding examples outside an accepted calculation set

In June 2025, a calculation-engine rehearsal compared eighteen thousand synthetic examples with the intended banking conventions. The first run matched in 17,928 cases and differed in seventy-two. Forty-eight differences concerned midpoint treatment and twenty-four concerned negative credits. No actual customer funds moved in this exercise. A high overall agreement rate could still conceal a meaningful disagreement about the rule being implemented.

The engineering team could explain the numerical behaviour, but it could not independently choose the commercial convention. Operating colleagues wanted the unresolved examples examined before a broader acceptance recommendation. The schedule sponsor asked whether the small exception population could be handled later. I supported holding those cases and preserving the distinction between an implementation defect and a convention that required an authorised business decision.

Over six weeks, at USD780,000, engineers produced reproducible examples, compared the relevant behaviours and worked with the responsible owners on intended treatment. Sixty of the seventy-two differences were resolved in the rehearsal. The reviewed set then contained 17,988 consistent examples and twelve still held. The latter remained outside the accepted set rather than being assigned the most convenient technical answer.

We retained the original test population, the agreed convention and the explanation for each resolved group. That made the next change review more useful: another engineer could understand why the behaviour was expected, not simply observe that a test had become green. The evidence did not establish a monetary saving, a customer-remediation result or universal correctness beyond the examined conditions.

I regarded the remaining twelve as part of the delivery account. Their presence identified a decision still owed, while the resolved sixty demonstrated specific progress. My improvement next time would be to include midpoint and negative-credit examples when the calculation contract is first discussed, before ordinary cases create confidence that the convention has already been understood.

Case 04

Preventing eleven unrelated services from inheriting a dependency stall in a rehearsal

In November 2025, we ran a controlled failure exercise across twenty services. Three depended directly on the component being stalled. Under the initial shared worker-pool arrangement, the stall also blocked eleven otherwise unrelated services. Fourteen were affected and six remained responsive. The direct dependency was known; the spread through a shared execution resource had not been adequately represented in the service account.

A fully separate resource allocation for every service would have increased operating complexity and capacity overhead. The platform team preferred a common pool for its administrative simplicity. Application owners wanted a clearer boundary around the consequence of one slow dependency. I asked the teams to isolate the relevant work and test the resulting behaviour rather than choose either unrestricted sharing or universal separation as an architectural principle.

The eight-week programme cost USD980,000, including engineering and the test arrangement. In the repeated exercise at 250 requests per second for thirty minutes, three directly dependent services remained affected while seventeen stayed responsive. The eleven unrelated services no longer inherited the stall under those conditions. We recorded the load, duration and failure scenario beside the counts.

That was a useful improvement in the tested failure boundary. It did not establish performance under every traffic pattern or prove that the three dependent services had become available. Nor did it measure a realised reduction in customer loss. Operating and application owners still needed to decide how their services should respond when their own dependency was unavailable.

The enterprise account became more specific about where sharing was acceptable and what support it required. I accepted the additional resource management because it addressed the propagation we had actually observed. On another platform change, I would examine shared execution limits alongside the dependency map at design review, before a diagram of direct calls encourages confidence about failures that can spread through a different route.

Case 05

Supporting eleven teams on a common route while preserving one justified exception

In April 2026, twelve application teams were considered for a common developer platform. Nine could adopt the initial service. Three had requirements it did not yet support. The platform sponsor wanted one standard route across the whole group; specialist teams were concerned that adoption would be measured before the service could support their work. I asked for an explicit account of those requirements before setting the adoption objective.

The decision was to fund selected support changes while retaining a governed specialist route where the common offering remained unsuitable. That reduced the simplicity of the operating model and meant the platform could not claim universal coverage. I accepted the continuing exception because forcing a team onto an incomplete service would transfer hidden support work rather than remove it.

Ten weeks and USD1.8 million of work enabled two further teams to adopt. Eleven used the common route and one retained the specialist arrangement with an accountable owner. For the original nine adopters, observed median time from approved request to a usable test environment fell from 4.2 to 2.1 days across the comparison periods. We kept that same cohort separate from the two later arrivals.

The observation concerned a particular preparation stage. It did not establish that production releases became twice as fast, that all other changes were controlled for, or that staff could be removed. The result supported a narrower conclusion: the common route was useful for the examined teams and the specified waiting interval, with further operating evidence still needed.

I asked the platform owner to retain the cost and rationale of the remaining exception in subsequent reviews. Its presence should be revisited when either the requirement or the common service changes, not hidden behind an adoption percentage. I would begin the next platform proposal with a fit assessment across representative teams, before the desire for a single route becomes a substitute for understanding the work it must serve.