Software and systems engineer in Ottawa
I am a systems deployment engineer at Hitachi Rail, where I integrate and debug safety-critical control systems in the field. I also evaluate and fix code written by language models for Cohere on a contract basis. I completed my BSc in Computer Science at the University of Ottawa in December 2025. Before university I ran a small software company for seven years, which I started at the age of 11.
The best way to reach me is by email at HamedTava@outlook.com. My code is on GitHub and my work history is on LinkedIn.
Most of my coursework focused on operating systems, computer architecture, databases and simulation. During that time I also started Elysium, a RISC-V kernel with its own scheduler, paging and system calls. Every commit is built and booted in QEMU through CI.
In 2023 my team won OVIN's 5G Connectivity for Cross-Border Challenge. Our prototype ran containerized services on simulated edge clusters. The main problem was keeping a session stable and fast while a device moved from one operator's network to another.
I was on the Dean's Honour List and received the Douglas L. Martin Physics Scholarship. I was also part of the development team for uOttaHack, the largest student hackathon in Canada, for three years and led the team in the final year.
I received a UOSU scholarship for student publications in 2024 and co-authored a telemedicine study in the URNCST Journal in 2023. I served one year on the board of the uOttawa Engineering Students' Society. In 2018 I won first place at Iran's national Robotic Cup.
I am looking for a full-time role in software development, systems integration, test automation or infrastructure. I am open to positions in Ottawa, hybrid positions and remote positions in Canada. I work in English and French and speak Persian at home.
Most of my work at Cohere is comparative evaluation of coding models. Two models receive the same task, and I decide which answer is better and explain why. I document every error in both answers and write a corrected solution when a reference is needed. The tasks include code editing, code explanation, data visualization 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))
If one request fails, gather raises an exception and the other 39 results are lost.
async with asyncio.TaskGroup() as tg:
ts = [tg.create_task(one(u))
for u in urls]
return [t.result() for t in ts]
TaskGroup is cleaner, but it cancels the remaining tasks after the first failure. The problem is the same.
Neither is correct. The fix keeps the structure of A, adds return_exceptions=True and returns the failures with the results so the caller can retry them.
I have completed a few hundred evaluation batches so far. More recent work focuses on agents. I review long multi-step agent runs one tool call at a time, verify data science solutions before they are used and test internal products before release to find where they fail.
parse_date().pytest -x and gets one failure. The time zone offset is wrong by one hour.parse_date() to use UTC. The test still fails.Rejected at step 4. The real bug was a daylight saving boundary in the step 3 change. The agent hid the problem instead of fixing it.
I integrate, test and commission safety-critical control systems in the field. Much of the testing happens on night shifts, and the work changes from week to week. One example was an intermittent link loss that had been attributed to wireless coverage. The packet captures showed a different pattern.
The cause was traffic sent without the QoS marking that the network prioritizes, so it was dropped first under load. Other problems sit deeper in the stack. In one case a driver occasionally passed corrupted frames to the application. The cause was the order of two memory reads in its receive path.
Some problems come from sizing rather than bugs. On one link the drops never appeared in the application. They only showed up in the counters of the network card.
Larger rings and adjusted interrupt coalescing removed the drops without any change to the application. Other regular work includes:
I started PanQ at 11 to sell small games I had written in C#. That year Tabnak named it the youngest startup in Iran. Over seven years it grew into a consultancy. The early work was Unity games and tools. Later projects were Go and Node backends on PostgreSQL with Docker and Kubernetes infrastructure. Clients included Microsoft and EA.