Software and systems engineer in Ottawa
I work at Hitachi Rail, where I integrate and debug safety-critical control systems in the field, and on contract with Cohere, where I evaluate and fix code written by language models. I finished a BSc in Computer Science at uOttawa in December 2025. Before that I spent seven years running a small software company that I started when I was eleven.
You can reach me at HamedTava@outlook.com. My code is on GitHub and the rest is on LinkedIn.
Operating systems, architecture, databases and simulation got most of my time, and I started writing a RISC-V kernel along the way. Elysium has its own scheduler, paging and syscalls, and every commit boots in QEMU on CI.
My team won OVIN's 5G Connectivity for Cross-Border Challenge in 2023. The prototype ran containerised services on simulated edge clusters, so the interesting part was keeping a session alive and fast while a device crossed from one operator's network into another's:
I made the Dean's Honour List and received the Douglas L. Martin Physics Scholarship. I was also on the dev team for uOttaHack, Canada's largest student hackathon, for three years, the last one as team lead.
A scholarship for student publications from UOSU (2024), co-author on a telemedicine study in the URNCST Journal (2023), a year on the board of uOttawa's Engineering Students' Society, and first place at Iran's national Robotic Cup back in 2018.
A full-time role in software, systems integration, test automation or infrastructure, in Ottawa, hybrid, or remote in Canada. I work in English and French, and speak Persian at home.
Most of my work here is head-to-head evaluation of coding models. Two models get the same task, I decide which answer is better and why, write down everything each one got wrong, and fix it where a correct reference is needed. The tasks cover editing existing code, explaining unfamiliar code, writing data visualisations and building programs from scratch, mostly in Python, TypeScript and Go.
sem = asyncio.Semaphore(8)
async def one(u):
async with sem:
return await get(u, timeout=5)
return await asyncio.gather(*map(one, urls))
One 404 raises, and the other thirty-nine results are thrown away with it.
async with asyncio.TaskGroup() as tg:
ts = [tg.create_task(one(u))
for u in urls]
return [t.result() for t in ts]
Reads cleaner, but TaskGroup cancels every sibling on the first failure. Same bug, louder.
Neither. Keep A's shape, pass return_exceptions=True, and return failures next to the results so the caller can retry just those.
That's been a few hundred batches so far. More recently it's shifted toward agents: reviewing long multi-step runs tool call by tool call, verifying data-science solutions before they're used, and trying internal products before they ship to find where they break.
parse_date(). Fair start.pytest -x: one failure, timezone offset off by an hour.parse_date() to use UTC. Test still red.Rejected at step 4. The real bug was a DST boundary in step 3's fix; the model hid it instead of finding it.
I integrate, test and commission safety-critical control systems in the field. Much of the testing happens at night, and no two weeks look the same. One of the more satisfying ones was an intermittent link loss that everybody had blamed on wireless coverage, until the gaps in the captures lined up:
The cause was traffic going out without the QoS marking the network prioritizes, so it was the first thing dropped under load. Other weeks go deeper into the stack. A driver that occasionally handed the application corrupted frames came down to the order of two reads in its receive path:
And sometimes nothing is broken except the sizing. On one link the drops never showed up in the application at all, only in the NIC's own counters:
Bigger rings and adjusted interrupt coalescing made the drops go away without touching the application. The rest of the job is a mix of:
I started PanQ at eleven to sell small games I'd written in C#, and Tabnak listed it as the youngest startup in Iran that year. Over seven years it became a consultancy: Unity games and tools first, then Go and Node backends on PostgreSQL and the Docker and Kubernetes setups under them, for clients including Microsoft and EA.