Back to the Carter-Cash experience

Carter-Cash

Reliability & Operations

01 / 4

RISK ANTICIPATION & DESIGN

Addressing a risk before it became an incident

Resolving a structural limit before it could block the creation of new orders

Order, shipment, and product references were derived from part of their global identifiers. As volume increased, this mechanism could reuse an earlier value and create a collision. A temporary fix had delayed the problem without removing its cause.

After the risk was raised during a daily meeting, I analyzed the existing mechanism and the many components that depended on these references. I compared several strategies, presented their tradeoffs, and recommended an architecture based on dedicated counters by store, use case, and period. Once the approach was approved, I implemented it with the protections required for concurrent creation.

  • Risk analysis
  • Solution design
  • Concurrency

02 / 4

PREVENTIVE MAINTENANCE

Maintaining data before it accumulates

Removing data that no longer serves a purpose before its accumulation becomes a problem

I noticed that many obsolete carts remained in the database indefinitely. I raised the issue, then proposed and designed their cleanup without an initial client request. I later designed a similar process for a recurring need involving old redirects.

Both processes distinguish data that is still useful from data that can be removed, then work in batches to limit their impact. Locks, maximum runtimes, logs, execution histories, and email summaries make each run traceable, while scheduled execution maintains the cleanup over time.

  • Data lifecycle
  • Batch processing
  • Proactivity

03 / 4

QUALITY & TESTING

Treating regression prevention as part of the job

Protecting each change with tests that reflect the real risks in the customer journey

On an e-commerce platform, a regression can prevent a search, sign-in, or order from completing. Because many rules were interconnected, verifying behavior was an integral part of my development work.

I prepared detailed test plans, ran functional acceptance tests, and added PHPUnit coverage for sensitive services and business rules. Together with Vincent, I also helped create a Cypress project covering many end-to-end journeys. The project was run manually when needed; it was not yet a systematic or fully automated test pipeline.

  • PHPUnit
  • Test plans
  • Cypress

04 / 4

TECHNICAL IMPLEMENTATION

Under the hood of reliability

This card details the implementation of two reliability initiatives: the new order-reference generation mechanism and the automated maintenance of obsolete data

  • Symfony
  • Doctrine
  • PHPUnit

Reference generation

To replace the earlier mechanism based on part of the global identifiers, I created a shared generation service for orders, shipments, and ordered products. Each store has its own counters, separated by reference type and period.

Concurrent creation

Doctrine guarantees the uniqueness of each counter. When simultaneous requests attempt to use the same value, optimistic locking detects that the counter has already changed. The service reloads it and retries generation with the next number.

Data cleanup

Obsolete carts and redirects are removed through Symfony Console commands. The processes use DBAL to work in batches, locks to prevent concurrent runs, and maximum runtimes to limit database impact.

Monitoring and operations

Logs, alerts, and email summaries make each execution traceable. A Sonata interface exposes counter usage, while a dedicated command prepares references for a new period or initializes them for a new store.

Testing and tooling

PHPUnit covers reference generation, concurrent creation, and redirect cleanup, among other cases. Data-generation commands also support high-volume acceptance testing outside production.

  • Symfony Console
  • Doctrine ORM
  • DBAL
  • Optimistic locking
  • Sonata Admin
  • Monolog
  • Cron
  • PHPUnit