Work Model: Hybrid (2or3 days / Week)
We're looking for a Senior Software Engineer to join the team building the Clinical Data Layer, a cloud-native platform that standardizes clinical trial data to the CDISC SDTM model at scale. You'll work across a Python/AWS backend and a React frontend, owning features end-to-end from data pipeline design through the analyst-facing spec authoring tool.
This is hands-on engineering work with meaningful domain impact: the data your code produces feeds regulatory submissions, safety analyses, and clinical trial outcomes.
What You'll Do
- Design and extend the SDTM transformation engine — AWS Step Functions orchestration, Lambda workers, and Databricks write paths
- Build and evolve the GraphQL/AppSync API and React frontend used by analysts to author mapping specifications
- Own infrastructure-as-code changes across service Terraform stacks and shared infrastructure
- Participate in code review, architecture discussions, and on-call rotation
- Mentor engineers newer to the stack or clinical data domain
What We're Looking For Must-Have
- 7+ years of professional software engineering experience
- 10+ years for Lead Developer role.
- Python proficiency — you're comfortable with Lambda Powertools, pytest/pytest-bdd, and writing clean, testable Python in a monorepo context
- AWS depth: Lambda, Step Functions, S3, DynamoDB, and IAM — you can reason about cost, latency, and failure modes, not just get things working
Strong Plus
- GraphQL / AppSync experience — schema design, resolvers, and consuming AppSync from a React client
- React + TypeScript — comfortable contributing to a Vite/Cloudscape SPA without being a frontend specialist
- Infrastructure as code with Terraform — reading, writing, and debugging multi-stack configurations
- Databricks or similar large-scale data processing platforms
- Clinical data standards (CDISC SDTM, ADaM) or regulated-industry software development experience (GxP, 21 CFR Part 11)
- A good grasp of event-driven and distributed system patterns — fan-out/fan-in, idempotency, at-least-once delivery
How You Work
- You write code that is easy to delete, not just easy to read — you don't over-engineer
- You're comfortable tracing a bug across Lambda logs, Step Functions execution history, and DynamoDB state without being told where to look
- You communicate clearly in async environments and leave PRs and architecture decisions well-documented for the people who follow you
- You can context-switch between a Python data pipeline and a TypeScript component without losing momentum
Compute: AWS Lambda, AWS Step Functions
Data: Databricks, Amazon DynamoDB, Amazon S3
API: AWS AppSync (GraphQL)
Search: Amazon OpenSearch
Frontend: React, TypeScript, Vite, AWS Cloudscape
Infrastructure: Terraform (per-service stacks + shared common)
CI/CD: GitHub Actions — lint, test, Bandit security scan, deploy
Python tooling: invoke, Black, Flake8, Pylint, pytest, Lambda Powertools
.png)

