
How I got here
I dropped out of college, watched YouTube tutorials on software development, and somehow got here.
That is the short version, and it is genuinely how it happened. The longer version has more grief in it than a portfolio usually admits to. If you only want the work, all of it is filed under the record. This page is the other thing.
Almost everything I build now turns out to be a ledger of some kind: business permits, barangay records, attribution pipelines, disk usage on a machine you own. I spent three years studying accountancy before I left, so I understood what those things were for well before I could write the code that keeps them.
Accountancy, and then trucks
Before any of the code there were three years of accountancy at the University of San Carlos, and I was good at it. Not interested in it. Good at it. Philippine grades run backwards, 1.0 at the top and 5.0 at the bottom. I got 1.0s in most things, and I got them on purpose.
They were for my father.
A 1.0 was a thing I could put in front of him, and for a while that worked. I can still remember exactly what it felt like when it worked. Then one semester I put another one down and watched it land like a receipt, and understood that the currency had been quietly devalued while I was still busy printing it. He had stopped celebrating. I had not stopped paying.
That is the whole of my academic career, if I am honest about it. I was not chasing a profession. I was chasing one man's attention, in the only currency I had, and I kept minting it long after it stopped buying anything.
So in third year I stopped. The tuition was high and the trucks were right there, and I have never been able to say honestly which of those two was the reason.
My father built Amity Logistics Express. When I left school he handed it to me and I renamed it Transwift Logistics, and I have turned that trade over for years since: the thing I could not get out of him with a transcript arrived anyway, in a set of keys. He never said the sentence I had been working for. He just gave me his company.
Most days I have decided that this was the sentence.
Then he died, and the question closed with him still holding the answer. I do not know how to write that part gracefully, so I am going to leave it sitting here, which is roughly where it sits.
We ran freight across the Visayas and Mindanao, for clients including Virginia Foods and Pacifica Agrivet Supplies: one of them makes the hotdogs, the other sells the feed and the veterinary supplies that get the pig as far as the plant. Dispatch turns out to be a ledger as well. A truck, a route, a cost, a date, and the question of whether those four agree with one another. I learned more about how a business actually works in two years of that than in three years of being lectured about it.
It went well. I was in my early twenties, running my father's company, and I thought I was going to be fine.


Then 2020
I have no dramatic pandemic story, which is its own kind of insult. Freight stopped. The receivables stopped behind it. A logistics company without a capital buffer is a set of fixed costs with wheels on, and payroll does not pause because nobody is shipping.
So I closed it.
I want to be accurate about that sentence, because it is three words and it took months. I signed things. I sold things. I let go of people with families and I said it to their faces. And the company I was winding up was not mine, it was his, and he was not there to be told, and there was no version of that conversation where I came out of it having done well by him.
I came out of it in my early twenties with no degree, no company, no father, and an unusually detailed understanding of diesel prices.
For a while after that I sold COVID test kits to hospitals. It paid, in the narrow sense that money arrived. It was obviously not a career and I knew it was not a career the entire time I was doing it, which is a specific kind of tiring: work that keeps the lights on and answers nothing.
The list
The answer came out of a search box.
I typed top 10 highest paying jobs, the way you do at two in the morning when you have run out of better ideas, and read what came back. Software developer was third.
That is the whole origin. There was no calling, no aptitude anybody had spotted, no moment of clarity. There was a list, a number beside the third entry, and a man with nothing else on his calendar.
I started with game development, which lasted exactly as long as it took to discover that an Intel Core 2 Duo will not run Unity. So I moved to the web, where the requirements were a browser and a text editor and I already owned both. Friends from school who had actually studied computer engineering told me to learn C, or Java, and to do it properly. I ignored them, on the grounds that I did not need to become a good programmer. I needed a stranger to look at a screen and see a thing that worked. JavaScript was the shortest distance to a screen.
Every day: tutorials, notes, a project, then another project. I once asked Stack
Overflow how array.map worked, because I did not know, and somebody I will
never meet answered me, and that answer is the only reason the charts in my
first real project ever rendered. I hope their life is going well. I am not
being cute about that. I think about them.
And every day I posted what I had built into Philippine IT groups on Facebook, which I would like you to sit with for a second, because it is not a networking strategy. It is a bottle in the sea. You put a CRUD app in front of four thousand strangers and you hope one of them is hiring.
Every night I prayed the same short thing.
Not for a job. For a chance, one, and I would take care of the rest. I am aware of how that reads to some people. I am also aware that I said it out loud, alone, for months, in a house where the money was running out, and that I meant it more than I have meant most things since.
September 2020
One of the bottles came back.
I had built a stock-market simulator for the Philippine Stock Exchange, because finance was the one domain I already understood, and enough people in the group actually tried it that Etousoft hired me off the back of it.
I cannot really convey what it was like to be paid for code the first time. I had been writing it for free, in the dark, on nothing but the assumption that it would eventually count for something. Then somebody put a number on it.
It lasted a month. We worked out together that live PSEi data cost considerably more than the thing could ever earn, and the owner let me go. It was the right call and I have never held it against him. He took the meeting in the first place, which is more than anybody else had done.
The next one lasted two months: an e-commerce app in Flutter for Tienda PH.
I was writing about what I was learning while I was learning it, badly and in public, which is why my blog is called Misadventures of a self-taught developer. The second post I ever published offered three management tips, from someone who had managed exactly no one. It is still one of the most-read things I have written. I have decided this is funny rather than embarrassing.
One in the morning
Then a message from a headhunter. His name was Marco. I have not forgotten it and I do not expect to.
He sent over a job description with the words data pipelines, containerization, ETL jobs and data warehousing in it. I read it twice and told him, honestly, that I was not qualified for this, because I was not. He told me to take the interview anyway.
So at one in the morning I sat in front of two Americans and answered questions about a subject I did not have. My laptop had no webcam and I could not afford one, so I was propped up on my phone. They asked whether I knew Docker. I knew the word. I had heard it said in YouTube videos, the way you know the name of a city you have never been to.
Nobody had told me who I was talking to. It was the CEO and the CTO.
You cannot bluff an engineer and I did not seriously try. What I did instead was open the stock-market simulator and show them something I had built, in React, that worked. Then I went to bed and assumed that was the end of it. I had assumed that a lot of times by then.
On 4 January 2021 the offer came. ₱80,000 a month.
I had been eating pancit canton every day for months because it was what I could afford. I want to be precise about why that is on this page. It is not there for sympathy. It is there because a number on a screen means nothing to you unless you know what I was eating on the day I read it.
I cried. Not politely, and not briefly. I sat there and cried, because it was proof in writing that the gamble had been worth taking, and because I had asked for exactly one chance and this was it arriving, and because the only person I had ever really wanted to hand a piece of paper to had been dead for years.
Then I accepted.
Five years at MediaJel
That was the chance.
I have had better years since and longer titles since, but that is the one that answered the thing I had been asking for. A Bay Area company decided that somebody in Cebu with three months of paid experience and no degree could be trusted with their integrations, and then left the door open long enough for me to get all the way through it.
It is also where I actually learned to build systems.
MediaJel sells programmatic advertising into industries the mainstream ad networks refuse: cannabis, alcohol, gaming, politics. Attribution there is a compliance problem before it is an engineering one. I started as a Solutions Specialist in January 2021 and built MediaJel Tracker, an open-source event tracking framework that ended up instrumenting over nine million users and carrying a seven-figure revenue line.
That took me to Solutions Director, then to engineering manager in 2023, and to Director of Integrations in July 2025. Along the way it took me to the work I am proudest of there: breaking a monolith into services, keeping a Snowplow pipeline alive on Kubernetes, and moving our data pipelines off Snowflake onto ClickHouse, which cut the cloud bill by ninety percent and made ingestion faster at the same time. Queries that used to run for five minutes now come back in milliseconds.
I am going to say the next part plainly, because I have spent most of this page being careful. I am second only to the CTO now. I got there by out-working everyone in the room for five years, and I am proud of it, and I think I have earned the right to write that down somewhere.
Three years in, by which point I knew them both well enough to ask, I asked why they had hired me. Dana, the CTO, had failed my interview. He was right to. Jake, the CEO, overruled him, on the grounds that I was funny.
I have turned that over more than is healthy. It is not a story about being underestimated, because the assessment was accurate. I could not do that job on the day they interviewed me. It is a story about a man overruling his own CTO, on almost no evidence, for a reason that had nothing to do with engineering. Somebody decided to take a chance on me. I have spent five years making sure he never had to explain why.
In 2026 they named me Outstanding Team Member of the Year. I was the first person ever to receive it.
I watched the citation come up on the company all-hands and thought about a kitchen in Cebu, and instant noodles, and a man praying every night for one chance to prove himself.
I am still there.


And then, in September 2025, Zentech
A friend I have known since childhood and I started a company to build software for Philippine local government.
The premise is unglamorous and very specific. There are around 42,000 barangays in this country, and the certificate you need to open a bank account, take a job, or register a business is issued by one of them. In person, during office hours, often twice, because the first trip was wasted. In 2018 the government passed RA 11032 requiring every LGU to run an electronic one-stop shop for business permits. By 2022, nineteen were fully compliant.
So we built BarangayOS and BPLS OS. They are live in Barangay Balud in Samar, Barangay Banilad in Negros Oriental, and for business permits in Ipil, Zamboanga Sibugay and Dumaguete City. BarangayOS is free for barangays permanently, because a procurement process is a wall most civic software never gets over, and the cheapest way past a wall is to not build one.
I am the CTO. I also still write the code, which is the part I would not trade.
There is something I did not expect about this work. My father spent his life moving other people's goods around these islands on a schedule nobody thanked him for. I now spend mine cutting the queue at a counter that people take a day off work to stand in. I did not plan that rhyme. I noticed it late, and I am glad of it.

24 August 2026, Miami
A third seat, and the second one I took without leaving Cebu. Sphere is a vertically integrated healthcare company in Miami, and I joined as its AI Native Tech Ops Lead. The title was a mouthful and it meant one specific thing: the software is expected to do the step and a person is expected to approve it, rather than the other way round.
Two systems. SphereOS is the operations platform the healthcare verticals run on, the thing the people inside the company work in all day. Compass is the outbound machine on the family office side: it finds the companies worth talking to, runs the cadences at them, and routes every reply into one inbox so that nobody has to hand-carry a step. I was the build lead on that one.
It ended on 16 September 2026. Sphere introduced an exclusivity agreement, and accepting it would have meant giving up Zentech and MediaJel. I did not accept it, and I resigned.
I am not going to put figures from either on this page. Both are private, and a number nobody can check is not evidence.
Outside that
I run a Kubernetes cluster in my house under GitOps, mostly so that I break things somewhere that does not matter first. I build desktop and developer tools: Pachtop, a system monitor in Rust and Tauri downloaded 228,724, source times, and a handful of libraries people still install years after I stopped touching them. Right now I am building Songstress, a self-hosted music suite, because I wanted my own FLACs on my own server on every device I own.
The boring part
People ask what the trick was, and the honest answer disappoints them every time, because there was no trick. I was not gifted and I did not move quickly. I turned up, every day, and tried to be about one percent better than I had been the day before. I stopped measuring myself against other people early on, because that comparison is always available and has never once been useful, and started measuring against yesterday, which is a much harder opponent to lie to.
I did not have a degree, a network, a plan, or a working webcam. What I had was the ability to keep going for longer than the situation could.
Water gets through rock. Not by hitting it hard.
If you are reading this from inside your own version of 2020, with the money running out and no real idea what you are doing: I do not have advice that will sound like enough. I only have the fact that it happened to somebody with fewer advantages than you probably have, and that the thing that did it was showing up again the next day, and then again the day after that.
My father never saw any of it. That is the one part I do not get to fix, and it sits underneath everything on this website, including the parts that look like engineering.
I live in Cebu.

Recognition

MediaJel · February 2026
Outstanding Team Member of the Year
For your passion, teamwork, and extraordinary commitment that inspires others and drives our success. Thank you for making a lasting impact.
The first person to receive it. Announced on the company all-hands, which is where the frame comes from.
The announcement
MediaJel · 2025
Five Years of Dedicated Service
A true architect and innovator, Pach drives technical direction and solves critical challenges. His leadership, insight, and positive spirit have made a significant impact on the team.
Attested
Whether it's tag integrations, pipelines, or architectural design, he seems to have expert-level insight across the board. It's rare to find someone who can jump between disciplines so seamlessly and still execute with such precision and confidence.
Edward Zuñiga, Level 2 Software Engineer at MediaJelHe's extremely meticulous when it comes to type safety, clean architecture, and writing code that not only works, but is also robust, maintainable, and scalable. He sets the standard for technical excellence, and his code reviews always leave you learning something new.
Sean Rizarre Reyes, Level 2 Software Engineer at MediaJelHe communicates complex technical ideas clearly and is always open to feedback. His proactive problem-solving, reliability, and dedication make him an invaluable part of any engineering team.
Jesus Crisologo Dimazana, Junior Software Engineer at MediaJelWhatever problems you wanted to be resolved, Pach was always the guy you HAVE to go to. He craves really hard problems and comes up with solutions on the daily.
Vance Richiel Baritugo, Lead Full Stack Engineer at Radiant LogisticsThough I may frequently jump across teams, I witnessed Pacholo's dedication to his work, producing quality code, his willingness to learn and improve everyday.
Alvin James Bellero, Senior Software Engineer at Neurones IT Asia
What I work in
- Languages
- TypeScript first. Rust for anything that has to be small and fast, Go where a single static binary is the whole point, Python for data work, and enough Dart to have shipped Flutter apps.
- Systems & backend
- Distributed systems, event pipelines, and the storage underneath them: Node, NestJS, Convex, PostgreSQL, MongoDB, Snowflake, ClickHouse. Six years of it at ad-tech volume.
- Infrastructure
- Kubernetes and k3s under GitOps with FluxCD, Terraform and Ansible for provisioning, Docker everywhere, Prometheus and Grafana for knowing whether any of it works. I run a production-shaped cluster at home on purpose.
- Product surfaces
- React and Next.js on the web, React Native and Expo on phones, Tauri on the desktop. One product often needs all three, and keeping their state honest is the actual work.
What I run
A production-shaped Kubernetes cluster lives in my house. That is not a personality trait so much as a rehearsal space, I would rather break something here than in a barangay hall.
Hardware
One laptop, six virtual machines and a storage box. Everything except the laptop is something I can rebuild from a repository.
- MacBook Pro, M2 Pro
- 12 cores, 16 GB. The only machine here I would be annoyed to lose.
- Dell U3421WE
- 34 inches at 3440 by 1440. One window of code, one of logs, no switching.
- 75 percent keyboard
- Which is why tmux is bound to Ctrl-A and nothing useful lives on a function row.
- Six cluster nodes
- Ubuntu 22.04 virtual machines on Proxmox. Three control plane, three workers.
- TrueNAS box
- 16 cores and 62 GB of RAM. Storage, media, and the Mac's Time Machine target.
Editor & shell
A terminal I have spent too long configuring, on a laptop I did not expect to end up using. I wrote Linux dotfiles for years; the cluster took over that job and the desk got quieter.
- Neovim
- On LazyVim, configured in Lua. The config is in git like everything else.
- zsh + tmux
- Prefix rebound to Ctrl-A, splits on comma and full stop. Muscle memory, not taste.
- Warp
- The terminal. Helix and VS Code are both installed and both keep losing.
- Bun
- Package manager and runtime for most new work.
- reclaim
- A CLI I wrote in Bun to recursively find and clear dev cache directories.
- OrbStack
- Containers on the laptop. Faster than the alternative and quieter about it.
- Tailscale
- Eight devices on one flat network, which is how the cluster is reachable at all.
- k9s + lazygit
- Two terminal UIs I reach for more than the tools they wrap.
- bat, btop, dust, ripgrep, fzf
- The small replacements. Each one saves a second, several hundred times a day.
The cluster
A production-shaped Kubernetes cluster running in my house, on top of a hypervisor. Everything is declared in git and applied by Flux, because anything I configured by hand is something I cannot rebuild.
- Proxmox VE
- The hypervisor underneath all six nodes. One box, named atlas.
- Packer
- Builds the Ubuntu cloud-init template the nodes are cut from. No node is hand-made.
- k3s
- Six nodes, three of them control plane with embedded etcd. Up for over two years.
- FluxCD 2
- Polls git, reconciles the cluster. The only way changes get in.
- Longhorn
- Replicated block storage, built by the people behind k3s.
- Sealed Secrets + SOPS
- Secrets encrypted in the repository rather than passed around out of band.
- Cloudflared + ingress-nginx
- Tunnel pods on separate nodes, so exposure survives losing one.
- Netdata + Beszel
- Metrics and uptime. This replaced a Prometheus and Grafana stack that cost more to run than to read.
- kured + descheduler
- Reboots nodes when a kernel patch lands, then rebalances what was on them.
- Renovate
- Keeps Helm charts and images from quietly rotting.
- Vaultwarden + Pocket ID
- Passwords, and the OIDC provider that signs me in to everything else.
- n8n + Uptime Kuma
- Automation and status monitoring. I maintain a theme collection for the latter.
The NAS
The other half, and the older one. Things that want disks more than they want orchestration live here in containers instead: media, photographs, and the services I would otherwise be paying for monthly.
- TrueNAS SCALE
- ZFS underneath, Docker on top, SMB out the front. Also where the laptop backs itself up.
- Jellyfin + the arr stack
- Sonarr, Radarr, Prowlarr, Bazarr and the download clients, all behind a VPN container.
- Immich
- Photographs, with machine learning for search. The reason I stopped paying for storage.
- Navidrome
- The music server Songstress is built on top of.
- Songstress
- My own, running from its own container image against that Navidrome.
- Huly
- Self-hosted project tracking. About twenty containers to avoid one subscription.
- Chatwoot
- Customer conversations, self-hosted.
- Cloudreve
- File sharing with real search behind it.
- Gotify
- Push notifications from everything above, to a phone, without a third party in between.
