Overview
Edward Viaene is the managing director of in4it and is based in Austin. He co-founded IN4IT in May 2015 and has served as its co-founder and managing director since March 2021.
Before that, he was a training instructor and developer at Big Data Partnership from April 2014 to May 2015. He spent two and a half years at JPMorgan Chase, joining as an information risk analyst in September 2011 and becoming VP information risk manager in September 2012. In 2010 he lectured at The Belgium Campus. He co-founded VibiT BVBA in September 2006, remaining until August 2011, and had earlier worked briefly as a system administrator and developer at Tigron in 2006. He founded Webware in August 2003 and stayed until October 2006.
Viaene studied applied computer science at Katholieke Hogeschool Leuven, completing a bachelor's degree in 2006, and took a Master of Science in economics and business at Hogeschool-Universiteit Brussel from 2009 to 2011. He followed this with postgraduate study in international business practice at St Mary's University College from 2011 to 2012.
Career history
Insights & ideas
The through-line
Across these sources, Edward Viaene is building a hardware-in-the-loop testing platform, BenchPod, and treating AI agents as active participants in that build rather than as code-completion tools. Early posts focus on getting the hardware itself right, chip selection, PCB bring-up fixes, cost tradeoffs, and by mid-2026 the emphasis shifts to letting Claude Code and MCP-connected agents actually flash firmware, configure ADC/DAC, drive the FPGA and run end-to-end hardware tests through BenchPod's own API [2][12]. The recurring preoccupation is repeatability: capturing real failure modes (a stalling step motor, a solar panel's I-V curve, a fault waveform) so they can be replayed and tested against firmware behavior on command [5][1][3].
Over time the framing hardens from "AI helps me code" toward "AI operates the bench": by July 2026 he logs 167 hours of Claude Code pairing directly with hardware, building the test device and then using it to test the device under test [2], and describes this explicitly as "Building The Machine That Builds Machines" [2].
On AI operating the hardware
Viaene's clearest claim is that agentic AI has moved past generating smarter test cases into physically controlling test equipment: "'AI-assisted testing' used to mean smarter test case generation. Now it means an agent that can physically control your device under test" [12]. BenchPod exists to make that possible, exposing "a hardware control API over MCP, which means any MCP-compatible agent (including Claude) can drive it directly" [12], and in his own account it "built the test device (BenchPod) and then used it to test the Device Under Test: flashing firmware, configuring the ADC/DAC, driving the FPGA, and running end-to-end hardware tests, all via tool calls" [2]. He is also candid that this isn't magic: a Claude MCP session on the v1 board "didn't finish in one go because I had to tell it not to use the NRST pin" [12].
He extends the same trust to AI for pure software problems outside hardware control, describing a Linux/GPIB driver failure where Claude Opus kept blaming the hardware until he asked it to write a fresh implementation instead: "20 minutes later, it started to read the measurements over USB from the Multimeter using pure Python and pyusb. Took me less time to write a driver than to get the actual driver working somehow" [7].
On repeatable failure-mode testing
A second theme is that hardware bugs are only useful if they can be captured and rerun. Talking through step-motor stalls, he asks "How fast can the software respond to a failure?" and notes that once a firmware fix exists, "we could now test whether the timing of the firmware was as expected, and whether it stays like that, by writing a CI test that covers this" [5]. Some failures are nearly invisible in the field: "a stall that only shows as a small current increase, but wasn't captured by the firmware," and his answer is to save and replay the capture [5]. This depends on hardware that can sample multiple domains on one clock and stay attached indefinitely: "digital + analog captured together, on hardware cheap enough to leave permanently wired to your target" [6], and BenchPod is pitched as running "DAC, ADC, and Logic Analyzer at the same time within ±20ns (with only a $100 BOM...)" [3].
On cost and tradeoffs in hardware design
Viaene repeatedly justifies component choices by total system cost rather than sticker price. Moving the orchestrator MCU, he writes: "The chip price looks like a big jump, but once you factor in the external flash, external crystal, SMPS inductor, and the W5500 you'd need for Ethernet, the real difference is smaller than it appears" [9]. On routing constraints from a large MCU package, he still concludes "To keep it affordable, it's still better than going to more layers or a bigger board, though" [11]. He's also self-critical about last-minute changes: "most of my mistakes come from quickly adding something just before sending it for manufacturing," citing a wrongly-oriented TVS diode and a boot button placed too close to SWD on the v2 board [8].
On simulating real-world inputs
For EPS testing he takes the position that if the right stimulus source doesn't exist, build it: "I don't have a current source, so I'm building one" [4], using an op-amp and MOSFET to emulate a solar panel's voltage and current behavior, including sunrise, clouds, and shadows [4]. He treats component failures in this rig as data, not just setbacks: "went through 2x OPA2192s, likely killed by feedback-loop spikes outside spec" before swapping to a TLV9151 [1], and frames the payoff as closing the loop entirely in software: "we now have enough to build an I-V control loop in software. We'll drop voltage as current approaches the I-V knee" [1].
From the stage
In the demo material, separate from the BenchPod/EmbeddedCI posts, Viaene teaches Go networking fundamentals rather than hardware testing. He walks through Go 1.22's net/http wildcard routing, showing that developers can now "extract wildcard values using request.PathValue()" without third-party packages like Gorilla Mux or Gin [13]. He also goes underneath the standard library entirely, building an HTTP server with net/http and then "constructing HTTP requests manually using raw TCP sockets to understand the underlying protocol mechanics," using telnet to craft a GET request by hand [14]. A third demo shows him using Go to launch containers directly via the containerd API on Lima [15], again favoring working with an API at a low level over reaching for a higher-level tool.
Takeaways
- BenchPod is built so pytest, ChatGPT, or Claude can control test hardware directly via API/MCP/SDK, not just generate test code [11][12].
- When agentic AI hits a wall (an unsupported GPIB driver), the fix that worked was asking it to reimplement the protocol from scratch in Python/pyusb rather than chase the vendor driver [7].
- Captured hardware failures (step-motor stalls, power loss events) should be saved and replayed so firmware timing can be checked repeatedly in CI [5].
- When picking an MCU, compare total system cost including external flash, crystal, and Ethernet chip, not just the chip's sticker price [9].
- Last-minute board changes before manufacturing are a recurring source of bugs (misoriented TVS diode, boot button placement) [8].
- To simulate real-world power sources for EPS testing, build the current source yourself with an op-amp/MOSFET feedback loop and monitor it with a shunt resistor and INA282 [4][1].
Media & appearances
- Edward ViaeneYouTubeThe new Golang 1.22 net/http package enables wildcard routing!Edward Viaene discusses Go 1.22's new routing enhancements to the net/http package, which now supports wildcard routing using syntax like `{id}` to capture path segments, whereas previous versions required third-party packages like Gorilla Mux or Gin for this functionality. He explains that developers can now extract wildcard values using `request.PathValue()` and demonstrates practical examples of how to implement simple wildcard routes without external dependencies.
- Edward ViaeneYouTubeGolang HTTP connections deep dive, using "net/http" package first, then using simple net socketsEdward Viaene demonstrates how to build HTTP servers and clients in Go, starting with the net/http package library and then showing how to construct HTTP requests manually using raw TCP sockets to understand the underlying protocol mechanics. He walks through examining the HTTP RFC specification, creating a basic Go HTTP server that listens on a port with request handlers, and then manually crafting HTTP GET requests using telnet to show how HTTP requests work at the protocol level.
- Edward ViaeneYouTubeUsing Golang to launch containers by using the containerd API on Lima.
In the news
- Quick update on the solar panel sim: went through 2x OPA2192s, likely killed by feedback-loop spikes outside spec. I swapped it to a TLV9151, and it's now working. In the picture, you can see that BenchPod's DAC feeds the op-amp the input voltage (the voltage our simulated solar panel would output), capped at 5V, so it can drive a solar-to-stable-voltage power module (like a DFRobot). The op-amp and MOSFET (with the heatsink in the picture) create a feedback loop that sources the current into a 5 Ω 10W load resistor (the
- My Claude Code log of the last 30 days: 167 hours pairing Claude Code directly with hardware. It built the test device (BenchPod) and then used it to test the Device Under Test: flashing firmware, configuring the ADC/DAC, driving the FPGA, and running end-to-end hardware tests, all via tool calls (BenchPod MCP and others). The only remaining manual step is wiring up the test device. #ClaudeCode #AgenticAI #AICoding #AIPairProgramming #EmbeddedSystems #BuildingTheMachineThatBuildsMachines
- BenchPod can run DAC, ADC, and Logic Analyzer at the same time within ±20ns (with only a $100 BOM, thanks to the iCE40 FPGA). 👇 Here's a demo of BenchPod checking how fast a Device Under Test reacts to a waveform fault (a step motor cutting off). BenchPod, your testing sidekick, captures a waveform and replays it in exact sync with the Logic Analyzer's capture start. #EmbeddedCIMakingOf #EmbeddedSystems #HardwareInTheLoop #FPGA #TestAutomation #FirmwareTesting
- Next up: simulating a Solar Panel for my next test, since we're going to work on EPS (Electrical Power System) testing with BenchPod. I don't have a current source, so I'm building one: the BenchPod DAC will output the captured/generated voltage (sunrise, clouds, shadows), and I'm using an op-amp + MOSFET to provide the current. Below the schematic and breadboard. For monitoring, the board also has a few shunt resistors (stacked in series to get the sense range I needed) and an INA282. The EPS will be our DUT (Device Under Test),
- Failure modes of a Step Motor: how can we test this? And how can we repeatably test this? 🔁 Here are a few captures of how a Step Motor can fail/stall, and what to do in the firmware when it fails. How fast can the software respond to a failure? 1. First capture shows a loss of power, no action by firmware (detection was off). You can see the continuation of step pulses in the Logic Analyzer output 2. The second capture shows a loss of power, with action taken by the firmware to monitor the coil. We could now test whether the
- One trigger, two domains: digital + analog captured together, on hardware cheap enough to leave permanently wired to your target. This screenshot shows how to verify the stepper motor timing on a Device Under Test (an STM32F446RE). Logic and analog are sampled off the same clock (using an iCE40 FPGA on the BenchPod). A UART command on the target device, "rotors step 1000", entered in the same web interface, starts a step motor. Our BenchPod monitors the coils (or 1 coil in this example) connected to its own ADC to monitor the
- I'm old enough to remember that if your Linux driver didn't work for your hardware, you were pretty much out of luck. Today, I had a similar issue with an Agilent 34401A Digital Multimeter connected with a GPIB-USB adapter to a Linux host. I tried to get it working with linux-gpib, but somehow it didn't. I queried Claude Opus 5.8 countless times; it kept blaming my hardware, there was no software fix, no MacOS support, and I should find a Windows machine to use the official driver. I then asked Claude whether we could somehow
- BenchPod v2.0.0 bring-up after the board arrived on Monday. It's now connecting nicely to our EmbeddedCI dashboard, but not before I had to fix a few silly issues. Turns out that most of my mistakes come from quickly adding something just before sending it for manufacturing, which in this case was an extra eFuse at the USB IN (too many capacitors on the board to be in spec), and a SMAJ5.0 TVS diode. After my PSU went into constant current mode, I had to investigate ... and ... the TVS diode was accidentally put the other way around.
This page shows public professional information only, each fact cited. Is this you? send a correction, or ask for removal within 24 hours, no questions asked.