Senior Software Engineer

Felipe Ascari

15+ years in software engineering. Since 2022 building high-throughput distributed systems in Go, in environments where correctness and uptime matter.

Felipe Ascari

About me

Started with Dataflex, building ERP and logistics software for freight companies. A decade in Java, mostly in public accounting: municipal tax systems, fiscal documents, the kind of software that has to be right. Then logistics at Ambev, and high-volume shipment systems at Mercado Livre, building Go microservices for the delivery pipeline under tight latency. Now at McGraw Hill, building an offer pricing orchestrator that ties together the full pricing chain for products and services across one of the largest edtech e-commerce platforms in the US. 15+ years in, still finding new things to break and fix.

Tech stack

GoJavaSpring BootPostgreSQLRedisNATSgRPCEthereumDockerKubernetesGitHub ActionsAWS

Work experience

Senior Engineer @ McGraw Hill Educational

Sep 2024 - Present Current

Consolidated pricing rules from multiple internal sources into a single Go API, giving the commercial team one place to manage offer logic. Built with DDD and Clean Architecture. Designed serverless workflows on AWS (Lambda, Step Functions, SQS, SNS) to replace manual financial processes. Service runs at Apdex 0.98 with error rate under 0.5%. Also contributed to the Angular admin UI.

Senior Engineer @ Mercado Livre

Jan 2022 - Sep 2024

Built event-driven Go microservices for the logistics pipeline, operating under the squad's p99 budget of 100-200ms. Owned the package-vs-vehicle cost calculation for the daily delivery plan, optimizing carrier contract matching. Wrote a TypeScript BFF unifying multiple backend calls into a single mobile contract. Also worked on Mercado Pago's Meli Dolar (MUSD) and Mercado Coin stablecoin flows.

Software Architect / Senior Engineer @ Ambev Tech

Operated fiscal document issuance (CT-e, MDFe) for thousands of daily transportation events across AB InBev's nationwide distribution. A single outage once blocked an entire distribution center, queuing trucks until throughput recovered. Led migration from on-premises to Microsoft Azure. On-call for the issuance pipeline.

Software Architect / Senior Engineer @ Betha Systems

Migrated fiscal and tax systems serving 850+ municipalities and 3,000+ public agencies from J2EE monoliths on Oracle and Sybase to Spring Boot microservices on PostgreSQL, moving millions of records to a multi-tenant cloud architecture. Used Kafka for high-volume data migration. Built AngularJS and JavaScript frontends that replaced rigid legacy interfaces for public servants. Moved container orchestration from OpenShift to Kubernetes and operated AWS workloads.

Articles

Featured

Go Channels and Ownership
Go Channels and Ownership
Continuing my Go back-to-basics series, this time I'm covering channels, who owns close, and what a buffer actually changes. I went back through the topic with a small example and a few notes along the way.
Go Concurrency: Mutex, RWMutex, and sync.Once
Go Concurrency: Mutex, RWMutex, and sync.Once
Continuing my Go back-to-basics series, this time covering shared state with Mutex, RWMutex, and sync.Once, with a small example and a few notes along the way.
Goroutines + WaitGroup.Go
Goroutines + WaitGroup.Go
Five years into Go and back to basics, why wg.Add must happen before go, why loop variable capture broke concurrent loops before Go 1.22, and what WaitGroup.Go actually guarantees under the hood. First of a back-to-basics concurrency series.
One integration suite. Every Go service.
One integration suite. Every Go service.
Real database, real fixtures, no mocks. How to build an integration suite in Go that you can actually trust, with testcontainers and go-testfixtures.
Six consistency problems in a Go crypto backend
Six consistency problems in a Go crypto backend
Nonces, idempotency keys, replay protection, event ordering - six patterns for a consistent Go crypto backend. Visual notes from Part 1.
Green Tea: Understanding Go's Garbage Collector
Green Tea: Understanding Go's Garbage Collector
What happens when Go's GC runs, how tricolor mark-and-sweep works, and what changed in 1.26. Went deep on this one as a side project.

Get in touch

Inbox open. Drop me a line about Go, distributed systems, or just to say hi.