Senior Full-Stack Engineer | Technical Lead | Remote

You're not hiring a resume. You're hiring the person who shows up when things get messy.

I've inherited a legacy Kafka platform with a two-day handover, launched a mobile product solo when the runway depended on it, and shipped for clients in two languages. Ten-plus years of doing this remotely, from a timezone that matches yours.

Remote credibility

Remote isn't an accommodation I'm requesting. It's how I already deliver.

I've been working remotely with distributed teams and US-based clients since 2015, most of that time from Cuenca, Ecuador. The habits that make remote work actually work aren't aspirations for me — they're the default.

Async communication is a deliverable

At Thoughtworks I produce documentation, architecture notes, blogs, and screen recordings as part of the work, not after it. Decisions get written down so the next person doesn't have to re-derive them in a meeting.

US-hours overlap, by geography

Ecuador sits at UTC-5 year-round — aligned with Eastern Time, never more than an hour off during DST. I run standups, demos, and ad-hoc troubleshooting sessions live with US stakeholders every week.

Trusted with production, unsupervised

Remote work fails when someone needs constant direction. My track record is the opposite: legacy systems handed over in days, greenfield products built solo, and cross-functional groups kept aligned without a manager in the room.

Stable setup, deliberate life

Cuenca is home — not a stop on a nomad circuit. Reliable fiber, a settled routine, and years of experience handling the practical side of working internationally: contracts, invoicing, and availability you can plan around.

Case studies

Five situations that tell you how I'll perform on your team.

Ask me about any of these in an interview. Each one started with ambiguity, missing context, or pressure — the conditions real work actually happens under.

InCuencaEcuador.com | Independent product | Live

Designed and built a data-driven transit platform — pipeline, public maps, and QA tooling — solo.

Cuenca's transit data lives in disagreeing PDFs, municipal datasets, shapefiles, and GTFS exports. I built a Node pipeline that parses, normalizes, and matches those sources while preserving provenance, plus three product surfaces: a public bus map, a map-led city Atlas, and a private review workspace that makes data uncertainty visible instead of hiding it. The current dataset spans 38 bus lines, 428 canonical stops, and 1,237 tracked aliases. This is the best sample of my unsupervised judgment — read the full case study.

React | TypeScript | Vite | MapLibre | PMTiles | Node | Data pipelines

38 bus lines, 76 directions, and 3,501 rendered stop records generated from inconsistent sources. Explicit uncertainty model: provenance, warnings, and a 412-item human review queue instead of false confidence. Deterministic, checked-in data payloads — the frontend builds from a clean checkout.

TrailKit — Trail Running Ecuador | Independent product | Active

Built a geospatial publishing platform where the hard part was trust, not maps.

TrailKit transforms GPX tracks, race records, and field media into reviewed, privacy-safe public content. A Python processing pipeline feeds six FastAPI admin services with React map workbenches, PostgreSQL/PostGIS authoring, and a static Astro site — with a strict boundary between source evidence, internal review state, public-safe projections, and site output. Publication isn't a boolean here: access, safety, attribution, media privacy, and geometry visibility are separate gated decisions. The system spans 119 Python modules and 68 test files — read the full case study.

Python | FastAPI | PostGIS | Astro | React | TypeScript | MapLibre | PMTiles

Four-tier data boundary keeps GPS metadata, private notes, and unpublished geometry out of public builds. 74 races, 179 courses, and 1,859 scanned media files under governed review workflows. Deterministic rebuilds with artifact manifests, checksums, and public-boundary QA scans in CI.

Thoughtworks | 2022 - Present

Inherited a legacy Kafka reporting platform with a two-day handover.

The previous team left days after handing over a streams platform moving hundreds of thousands of messages a week. Nobody fully understood the data flow, and silent correctness issues were eroding trust in downstream reporting. I mapped the system, found and repaired the missing data, and added DataDog distributed tracing so the next engineer would inherit a map instead of a mystery. Later, I helped drive a six-month cross-team effort to launch a greenfield Task API and Kafka Streams processor for the mobile app's end users.

Kafka | Kotlin | Spring Boot | Kubernetes | Helm | AWS | DataDog | PostgreSQL

Repaired and validated 200,000+ rows of reporting data that had been quietly degrading downstream trust. Launched a new API and event processor across multiple teams in six months. Left behind tracing, docs, and runbooks — the handover I never got.

60Hertz Energy | 2019 - 2021

Built a cross-platform mobile product solo, from zero to launch — then kept it alive.

A startup serving remote energy operations needed a field app that worked offline, on any device, in places where connectivity is an assumption you can't make. I developed the Flutter application by myself from nothing to launch. When my boss announced the app was ready and then quit, I handled the cleanup, support, and every release after. My direct manager later said the company couldn't have continued without the app shipping — they were running short on runway.

Flutter | Dart | TypeScript | Vue | Node.js | Docker | Elasticsearch | Sentry | MongoDB

Sole developer from zero to launched product on iOS and Android. Offline-first workflows and form building for field crews in remote environments. Kept the product supported through diagnostics across Sentry, Kibana, and cloud logs.

Freelance | 2015 - 2021

Turned messy client workflows into software that ran their businesses.

Six years of client work means six years of scoping, proposals, estimates, and delivery with no one to escalate to. The representative project: a WordPress order and invoicing plugin that automated billing for over 100 client accounts, collapsing a multi-day monthly manual process into a short workflow. Other projects spanned SaaS MVPs with auth, payments, and deployment; geospatial tools; and dashboards — for clients in both English and Spanish.

JavaScript | PHP | WordPress | APIs | Elasticsearch | Deployment | DNS | SSL

Billing automation for 100+ client accounts — days of manual work eliminated monthly. End-to-end ownership: proposal, build, deploy, document, hand off. Client work delivered across two languages and multiple business domains.

Technical breadth

Depth where your systems live. Range where your roadmap goes.

I'm not a specialist you'll need to route around. Whatever layer the problem is in — UI, API, stream, cluster, or phone — I've shipped production work there.

Frontend & Product

React, TypeScript, JavaScript, Vue, admin workflows, data-heavy interfaces, and the product judgment to know what to cut.

Proof: MVPs, internal tools, and the interactive projects on this site.

Backend & Events

Node.js, Kotlin, Spring Boot, Kafka streams, API design, PostgreSQL, MongoDB, and event-driven architectures at production volume.

Proof: hundreds of thousands of Kafka messages weekly, kept correct.

Cloud & Delivery

AWS, Kubernetes, Helm, Docker, GitHub Actions, GitLab CI/CD, Linux, NGINX — from pipeline to production and back when it breaks.

Proof: owned deploys end-to-end at every role since 2015.

Mobile & Field

Flutter and Dart with offline-first sync, form building, and the discipline of software that must work without a signal.

Proof: solo-built field app for remote energy operations.

Observability

DataDog distributed tracing, Sentry, Kibana, runtime metrics, and structured logging — because remote engineers debug with evidence, not proximity.

Proof: tracing I added is how that domain gets debugged today.

Leadership

Requirements shaping, user stories, demos, retros, unblocking teammates, and stakeholder communication — the glue work that keeps delivery moving.

Proof: technical lead responsibilities at Thoughtworks.

Next step

If your team has ambiguous, high-ownership work, we should talk.

I'm available now for senior full-stack and technical lead roles — full-time or contract. Bring your hardest open question to the first call; I'd rather earn the role than recite for it.

Cuenca, Ecuador | UTC-5 | Remote travis.pence@gmail.com linkedin.com/in/travis-pence