Recently we discovered a communication disconnect between our Systems group and our Software engineering group. Shortly after one of the meetings, the Systems Engineer sent an e-mail to the Software group suggesting that we watch a certain episode of Star Trek. In the aforementioned episode, the alien beings speak in metaphor, forcing the crew to find a way to communicate with their new encounter. In much the same way, our Systems engineer felt that our discussions were missing something and that many times we were talking in metaphor and analogy. We needed a better way to communicate.

To fix the disconnect, we decided to revisit an idea that we had discussed at the beginning of the project. We had found IPython Notebook (herein Notebook) was a great way to work out algorithms and easily document the results. This software provides an interpretive form of the Python scripting language (IPython) with a web-based interface. It’s relatively easy to install and using it is straight forward. While it’s not the only tool designed to bridge the gap between designers and developers, it is a powerful, low-cost alternative.

From the Systems engineering perspective, Notebook is a design tool, with a close association to an actual paper notebook allowing the designer to sketch ideas. The designer can open several notebooks at a time and the “page” can be saved to a plain text file for later use or sharing with colleagues. It’s a combination execution and documentation environment where the designer can easily experiment with processes and include notes and other media to describe the process.

Notebook includes plotting software making it easy to visualize processes…

Plotting software code

Plotting software graph


Documenting equations is just as easy…

Documenting equations is easy


From the Software engineering perspective, Notebook is an interactive development environment. Cells can be populated with Python code, either straight functional calls or through defining classes (OO) and calling public functions. System requirements can be depicted with Notebook and the software engineer can easily tie in written code (C/C++/etc.) making it accessible from Notebook for verification purposes.

Importing C or C++ code is straight-forward.

Importing C or C++ code


Importing native code provides a bridge that allows the systems engineer to interact with the code developed by the software engineer. It also provides an excellent environment for testing software.

In summary, IPython Notebook is a powerful, easy to use tool that allows engineers from different disciplines to communicate concepts effectively. While this article barely scratches the surface of the features of Notebook, it illustrates the versatility of the software for both design and test, and shows how easy it is to communicate ideas between engineering groups. See for more detail.

—Jed Higgins – Director of Software Engineering, General Digital Corporation