← All work

Client delivery / Life sciences & scientific software

Modernizing scientific software while preserving downstream workflows

API refactoring, processing changes & integration documentation

Scientific software had become part of the organization's daily operations. Its code contained valuable domain knowledge, but API endpoints had accumulated responsibilities that made changes difficult to isolate. The work combined hands-on Django and Django REST Framework modernization with a careful account of what downstream processing expected from the platform.

What changed for the people using it

Before
API endpoints mixed validation, transformation, persistence, and side effects, with downstream assumptions embedded in the surrounding workflow.
After
Responsibilities were separated and integration expectations documented, giving engineers clearer places to change and check behavior.

The contribution at a glance

Our role
Domain analysis, Django and DRF implementation, API refactoring, and technical leadership.
Work delivered
Clearer API responsibilities, separated processing concerns, and documented downstream integration expectations.
Simplified view of the work
  1. 01

    Existing behavior

    Understand the scientific logic and the consumers that depend on it.

  2. 02

    Clearer API boundaries

    Separate validation, transformation, persistence, and side effects.

  3. 03

    Connected workflows

    Check changes against downstream processing expectations.

Scope & current status

Modernization of an existing scientific and operational platform, with changes assessed against connected workflows.

The challenge

Years of scientific and operational use had shaped the platform. Engineers needed to preserve the domain behavior people relied on while improving the structure around it. Closely coupled responsibilities made that difficult: a change intended for one behavior could affect several others.

The application also fed a downstream processing pipeline. Its consumers depended on details that were not always captured as an explicit API contract. Modernization therefore required understanding the people and systems affected by a change, alongside the code being refactored.

The approach

The engagement began with a review of API behavior, service responsibilities, and data flows. That identified overloaded endpoints, domain-critical processing, and dependencies that needed explicit validation during change.

The implementation introduced more consistent Django and DRF patterns and separated validation, transformation, persistence, and side effects. Processing changes were assessed against downstream expectations. Technical risks and validation needs were explained to stakeholders in terms of the operational workflows they could affect.

The work in detail

  1. 01

    Understand the behavior being preserved

    Trace API use and processing dependencies before choosing where to refactor. Treat existing domain knowledge as an input to modernization.

  2. 02

    Give APIs clearer responsibilities

    Refactor overloaded endpoints and apply consistent framework conventions, with explicit boundaries between validation, processing, and persistence.

  3. 03

    Account for downstream consumers

    Document assumptions in the connected processing pipeline and check the integration surface as behavior changes.

  4. 04

    Connect engineering decisions to operations

    Explain concentrated risks, testing needs, and deployment considerations so stakeholders can assess the next change.

The outcome

The platform gained clearer API responsibilities and better separation of processing concerns. Downstream integration expectations were documented, and stakeholders had a more explicit account of where future changes required validation. The result was a stronger foundation for continued maintenance and modernization of the existing scientific system.

Why it matters

Scientific software can become operational infrastructure gradually. Modernizing it requires an understanding of the domain behavior already encoded in the system and the workflows that have grown around it. Clearer boundaries help a team preserve that knowledge while making the platform easier to evolve.

Related work