I joined the R&D area due to my interest in software engineering. In particular, in joined one of the teams that was working on a muxponder to eventually commercialize at scale. The project was constantly delayed due to a lack of guidance in the software area, mostly because the staff at the company did not specialize in software development per se.
The team that I joined was tasked with provisioning the muxponder device with a computer that would control all the peripheral devices (e.g. temperature and humidity sensors, Tx/Rx interfaces, etc.), provide an interface for development and maintenance purposes, update configuration settings, etc. In order to achieve these goals in a timely manner and given the resource constraints that the nature of the project imposed, I led the re-architecture of our development platform to leverage virtual memory and simplify the software development cycle, since this approach meant that we could use modern tooling and software development processes, and also reutilize open source software that was already available.
Some of these improvements were:
- Switch our entire codebase from C to C++ to clean up the code and apply design patterns when appropriate
- Implementation of unit tests to ensure that we didn’t introduce any regressions during our development cycle
- Reconfigure the embedded Nios II CPU architecture to make use of the MMU and simplify the software development process