Senior Software Engineer - LIMS Modernization
Role details
Job location
Tech stack
Job description
-
Produce module-level documentation: purpose, inputs and outputs, dependencies, data models and known technical debt.
-
Build data-flow diagrams for the sample lifecycle, Workday integration, billing and invoicing triggers, instrument interfaces and user authentication and authorization.
-
Contribute to the integration inventory and technical-debt register, triaging components as Fix Now, Doc and Defer or Accept Risk.
Contribute to architecture and cloud readiness
-
Help shape CT LIMS placement within our Azure landing zone and environment tiers (production, non-production, sandbox).
-
Contribute to high-availability and hybrid on-prem design, including the instrument-integration constraints that require a local network presence.
-
Partner with the Staff Engineer, the cloud and landing-zone owner and the platform architects so the modernization aligns with adjacent Onterris platforms rather than duplicating them.
-
Develop reference implementations and prototypes that de-risk the architecture choice while it is still being made.
-
Help the team move from "ready to start" to "shipping" without a standing start if the modernization is approved.
What success looks like...
-
A senior engineer with no prior CT LIMS exposure can navigate the system from your documentation alone, and it holds up under structured review.
-
Spec-Driven and Test-Driven Development is simply how you work. Specs and tests precede code, and it shows in the quality of what ships.
-
The legacy components you've touched are documented, diagrammed in Mermaid and committed to Git. No tribal knowledge, no binary files.
-
AI-assisted workflows you've helped build are reused across the team, not one-off.
-
Reference implementations exist for the riskiest parts of the target architecture and rests on evidence, not opinion.
Requirements
These requirements reflect the knowledge, skills and abilities that help you do your best work here.
-
7+ years of professional software engineering experience.
-
Strong cloud-native engineering fundamentals (Azure preferred; AWS or GCP equivalent acceptable).
-
Demonstrated practice with Spec-Driven and Test-Driven Development, clean architecture and domain-driven design.
-
Hands-on experience with AI-assisted development tools (Cursor, Claude Code, GitHub Copilot or similar).
-
Ability to read, reverse-engineer and reason about an unfamiliar or legacy codebase you did not write.
-
Comfortable producing documentation and diagrams as code (Markdown, Mermaid.js) versioned in Git.
-
Strong communication. You can explain the "why" to experienced engineers and partner effectively across teams.
-
You respectfully challenge your peers, and welcome the opportunity when others challenge you.
-
You are flexible, resilient and curious.
-
You understand prior art but are compelled to iterate beyond it.
Preferred experience
-
Experience reverse-engineering or maintaining systems written in Perl or another long-lived legacy language.
-
Background in LIMS, scientific or other regulated and compliance-driven software (EPA reporting, chain-of-custody, lab accreditation).
-
Experience with Oracle, and with evaluating database migrations (for example, toward PostgreSQL and or Snowflake).
-
Familiarity with containerization (Podman or Docker) and hybrid on-prem and cloud deployment patterns.
-
Exposure to enterprise integrations such as Workday.
-
Familiarity with prompt engineering and AI workflow optimization.
Benefits & conditions
The compensation range for this role is $200,000 - $210,000 USD, commensurate with experience, skills, and geographic location.
To thrive in this role, you'll be comfortable taking ownership of the following responsibilities:
Build through Spec-Driven Development (SDD)
-
Work "Blueprints Before Bricks": the design is clarified in a Markdown specification before code is written.
-
Author specifications and architecture-as-code in Markdown and Mermaid.js, committed to Git alongside the code.
-
Help establish the templates and review habits that make spec-first development the default.
Deliver test-first development (TDD)
-
Build the automated test coverage that lets the team move fast with confidence.
-
Hold the line on coverage standards, particularly for AI-generated code.
-
Implement architectural guardrails that keep modular boundaries from eroding back into a monolith.
Use AI as a force multiplier
-
Use Cursor and Claude Code as primary instruments for codebase archaeology, documentation and prototyping.
-
Contribute to the .cursorrules and prompt libraries that encode our architectural standards.
-
Apply judgment about when AI accelerates (boilerplate, syntax, archaeology), when to collaborate (domain logic) and when to write manually (data integrity, edge cases).