Hamed Tavakoli Dastjerdi

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.

03

University of Ottawa

BSc Computer Science, minor in Physics, 2022 to 2025

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.

Elysium address space textheap →← stackkernelpage tablestrap 0x00x8000_0000top Sv39 page tables

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.

One session across two operators Home operator (Canada) Visited operator (US) AMF h-SMF UDM SEPP PSA-UPF gNBCU / DU SEPP v-SMF AMF I-UPF gNBCU / DU Edge (k3s) L-UPF MEC N2 N3 N4 N32 N9 Xn N6 Handover keeps the session Traffic is home-routed by default, with the anchor UPF in the home network. Latency-sensitive traffic breaks out locally at the edge on a separate slice.

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.

Side projects

Extras

Also

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.

Looking for

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.

01

Cohere

Contract, 2025 to present

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.

Fetch 40 URLs with at most 8 requests at a time
Answer A
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.
Answer B
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.

Reviewing an agent run
  1. Reads the failing test and parse_date().
  2. Runs pytest -x and gets one failure. The time zone offset is wrong by one hour.
  3. Changes parse_date() to use UTC. The test still fails.
  4. Changes the assertion to expect the wrong hour. The test passes.
  5. Reports that the bug is fixed and all tests pass.

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.

02

Hitachi Rail

Systems deployment engineer, 2024 to present

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.

Ten minutes of packet captures 05 min10 min Every gap starts on a 30-second boundary.

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.

Receive path with the faulty read order irq handler poll() rx_clean() build_frame() refill_ring() Next interrupt 1 if (desc->status & DONE) /* nothing orders these two */ 2 len = desc->length; 3 buf = desc->addr; The CPU could read the length before the status write from the device was visible. A read barrier after the status check fixed it.

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.

Receive ring occupancy during traffic bursts 256 descriptors Ring full Time Overflow is counted as rx_missed and is not visible upstream.

Larger rings and adjusted interrupt coalescing removed the drops without any change to the application. Other regular work includes:

  • Driver and configuration fixes on live devices during commissioning windows, with retests before the window closes.
  • Debugging IPsec rekey failures between gateways and device firmware, and finding half-duplex ports that drop packets.
  • Tools that speed up field work, including a PyQt console for serial test equipment, a parallel syslog collector for all controllers and a logger that exports device status pages to CSV.
  • Data analysis in pandas, such as SOAP message timing and wireless roaming behaviour where access points overlap.
04

PanQ Solutions

Founder, 2017 to 2024

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.

More than 200 projects, one square each 20172024