Backend Python Engineer · Lima, Perú · Open to Remote
Backend Python Engineer
Lima, Perú · subliandev@gmail.com
I'm a Backend Python Engineer with 2+ years of professional experience across healthcare and enterprise systems — currently at Fiberlux, where I work on Odoo development and lead a full ERP migration from Odoo v13 to a Django-based microservices architecture.
My focus is on building scalable, maintainable architectures. I enjoy tackling performance bottlenecks head-on — profiling with cProfile, tuning queries with EXPLAIN ANALYZE, and applying design patterns (Singleton, Strategy, OCP) to turn monolithic code into modular, extensible systems.
At Clínica Santa Isabel, I built core healthcare systems including a Payroll module and an Electronic Health Records system using Django and FastAPI. I care deeply about test coverage, observability, and CI/CD practices that keep systems reliable in production.
When production systems fail silently — corrupt data, missing files, broken sync — I debug from first principles: reading packet captures, auditing XML configurations, writing targeted SQL, and building the tooling needed to recover. That mindset led to recovering 50,000 call recordings and 45 days of telephony data after an infrastructure incident that went undetected for weeks.
Currently deepening expertise in microservices architecture and AWS fundamentals. Languages: Spanish (Native) · English B2 (EFSet Certified) · Open to: Remote backend roles, Python infrastructure collaboration, mentorship.
ir.rule security framework — eliminated 100% of cross-team AccessError blocks, reducing access resolution from 2–4 hours to 0ms.ISIS_CSI — Payroll & HR System Reengineering
Hospital Management Web Ecosystem
Algorithms, data structures, software engineering, databases, computer networks, and mathematical modeling. Strong foundation for system design and performance analysis.
Comfortable in English-speaking teams, reading technical docs, participating in code reviews, and written/verbal communication in international environments.
Production-ready, reusable template for secure backend APIs. JWT authentication with refresh token rotation, role-based permissions (admin/staff/client), rate limiting, and fully containerized with Docker. Built as a foundation for SaaS products, mobile backends, or microservices.
Achieved 100% test coverage with 60+ tests including integration suites for auth flows, endpoint coverage, and permission scenarios. Factory Boy–based test data with advanced mocking patterns.
3-script toolkit that recovered 50,000 call recordings and 45 days of telephony data after an infrastructure incident. Scraper reuses browser session cookie; pipeline corrects file mtime from metadata; audit script verifies presence without downloading.
Async file processing (CSV/Excel) with Celery and Redis. Decouples requests from heavy jobs, with status dashboard for upload history and task tracking. Production-style retry patterns.
Medical data management backend handling ~1,000 new records/day across Hospitalización, Emergencias, Quirófano, and Neonatología. Secure JWT access control, structured data workflows, full digital replacement of paper forms.
Automated daily email delivery with multi-role accounts (free/premium), email confirmation, admin dashboard, retries, and cron scheduling. Deployed to production.
Deep-dive into professional testing: reusable fixtures, parametrized tests, mocking of HTTP/email services. Modern uv-based environment.
In December 2025, the call center telephony sync system began generating incomplete data. By January 2026 it had stopped entirely. No alert had fired. No error appeared in the logs. The failure was silent by nature — a public IP change by the infrastructure team, unnotified, had severed the connection to the data source.
Investigation required coordinating with the telephony provider and the NOC team to trace a change that had happened weeks earlier. Once found, the scope became clear: ~50,000 audio recordings and 45 days of CSV reports needed to be recovered from scratch.
The provider's portal had the data — but no bulk download API. Each recording was accessible only via individual button click. The CSV reports were available as master files covering multiple months, requiring segmentation into daily files matching the exact naming format the Odoo sync module expected.
Additional complication: downloaded audio files carried the download date as mtime, not the original call date — and the Odoo sync module used st_mtime to organize files. Uploading them directly would place all 50,000 recordings on a single incorrect date.
| Script | Purpose | Key technique |
|---|---|---|
five9_downloader.py |
Automated ~50,000 downloads over 3 days using browser session cookie injection | Atomic checkpoint via os.replace() — crash-safe progress, no restart from zero |
pipeline_fabric_five9.py |
4-phase ETL: upload to temp → correct mtime → deploy to production → archive locally | sftp.utime() sets correct call date from downloader's progress.json before deployment |
fabric_wav_audit.py |
Verified presence of specific recordings across all SFTP paths without downloading | sftp.stat() — existence check with zero data transfer; covers filename variants |
segmentador_five9.py |
Segmented master CSV files into 306 daily files with date range filter and TAC row removal | 2,875 corrupt TAC rows auto-discarded; YYYY_MM-DD naming format enforced for Odoo compatibility |
| Root cause | Evidence | Fix |
|---|---|---|
| IP change — unnotified | Complete data silence from Jan 2026 | Reconnected with new IP; added monitoring |
| CSV naming format bug | Odoo regex expected YYYY_MM-DD; script generated YYYYMMDD |
Fixed in normalizar_fecha(); returns tuple (fecha_id, date) |
TAC rows with embedded \n |
2,875 corrupt rows broke csv.DictReader in Odoo |
_sanitize_csv_content() patch in Odoo module + pre-filter in segmentador |
| 15 alias records only in DB | Created manually in Oct 2024, never in XML — reinstall would silently break everything | Formalized in file_type_values_csv_data.xml with external IDs |
| Audio mtime mismatch | Downloaded files showed download date, not call date | Pipeline reads progress.json and sets correct mtime via sftp.utime() before deploy |
Fiberlux's custom Odoo module synced telephony data (call recordings, transcripts, quality reports) from Five9's SFTP server into the ERP. The original implementation was fully synchronous — during large data loads, it blocked Odoo's worker processes company-wide, freezing CRM and invoicing operations simultaneously.
Additional issues: data inconsistencies between Five9 and Odoo, growing storage costs from unmanaged file accumulation (~1M files since 2023), and fragile SFTP connectivity with no retry logic.
Many2one foreign keys + PostgreSQL views reduced query cost on 40k+ record tables for high-performance reporting.days_to_sanitize with batch processing — auto-purges stale files on schedule, achieving 30% storage reduction.| Dimension | Legacy (Sync) | Async Architecture |
|---|---|---|
| ERP Impact | Company-wide Odoo freeze during sync | Zero perceived latency — fully decoupled |
| Data Consistency | Inconsistencies between Five9 and Odoo | 100% record-level consistency guaranteed |
| Storage | Unbounded accumulation (~1M files) | 30% reduction via auto-batch sanitization |
| Query Performance | Slow scans on 40k+ record tables | B-Tree indexed, view-optimized queries |
| SFTP Resilience | Hard failures on network issues | Auto-retry with hierarchical error handling |
| RAM Stability | Risk of OOM on 100k+ files | Flat memory footprint via batch-limit governor |
| Race Conditions | Possible data corruption under load | Eliminated via indexed thread-state flags |
Odoo's standard security model restricts CRM and Sales document ownership to a single Salesperson field. At Fiberlux, multiple executives — Postventa, Fidelización, and others — needed to operate on the same customer account simultaneously.
The result: critical AccessError blocks on every cross-team operation, invoicing bottlenecks, and manual admin intervention required every 2–4 hours.
create_level_ids inspects the operating uid and routes approvals to the correct team hierarchy.unlink AccessError by bridging: order_id.partner_id.linked_executive_ids.user_id — forcing an implicit JOIN at query time.| Dimension | Legacy (Standard Odoo) | EV Model (Implemented) |
|---|---|---|
| Ownership | Single salesperson | Owner + N linked executives |
| Access Control | Hard block via ir.rule | Dynamic access via relational domain |
| Approval Routing | Always to account owner's team | Branched by creator's actual role |
| Access Resolution | 2–4 hours (manual by admin) | 0 ms (fully automated) |
| Audit Trail | Salesperson only | Owner + executor logged independently |
Fiberlux's invoicing workflow ran entirely inside Odoo — generating a single electronic invoice took ~2 minutes, with no async support. During billing peaks, the process saturated Odoo workers and blocked the entire ERP.
| Dimension | Legacy (Odoo) | Django Engine |
|---|---|---|
| Throughput | 1 invoice / ~2 min | 50 invoices / 35s (~170× faster) |
| Concurrency | Single synchronous thread | 10 parallel async workers |
| ERP Impact | Saturated Odoo workers during peaks | Fully decoupled — zero ERP contention |
| Test Coverage | None | 100% (unit + integration) |
Fiberlux operates a critical production ERP on Odoo v13 managing mass invoicing, CRM, telephony integration, and customer contracts — all heavily customized. A v17 upgrade proved infeasible; deprecated APIs, large data volume, and billing continuity requirements drove the decision toward a full Django rewrite.
Critical Odoo and Django workflows exhibited unexplained latency under production load. Without systematic profiling, bottleneck identification was guesswork — developers were optimizing the wrong paths while true hotspots remained undetected.
select_related() and prefetch_related(), collapsing hundreds of queries into single optimized calls.From ~2 min/invoice in Odoo to 50 invoices in 35s in Django — 10 concurrent async workers. (Fiberlux)
~50,000 call recordings recovered via cookie-session scraper with atomic checkpoint — zero manual downloads. (Fiberlux)
306 daily CSV files regenerated from master reports; 2,875 corrupt TAC rows removed automatically. (Fiberlux)
Automated file sanitization with configurable batch processing on the Five9 SFTP sync module.
Open to remote backend roles, Python infrastructure collaboration, and mentorship opportunities.