\chapter{Software and Source Code Design} The source code of many published papers is either not available or seems like an afterthought: it is poorly documented, difficult to integrate into your own work, and often does not follow common software development best practices. Moreover, with Tensorflow, PyTorch, and Caffe there are at least three machine learning frameworks. Every research team seems to prefer another framework and sometimes even develops their own; this makes it difficult to combine the work of different authors. In addition to all this, most papers do not contain proper information regarding the implementation details, making it difficult to accurately replicate them if their source code is not available. Therefore, it was clear to me: I will release my source code and make it available as Python package on the PyPi package index. This makes it possible for other researchers to simply install a package and use the API to interact with my code. Additionally, the code has been designed to be future proof and work with the announced Tensorflow 2.0 by supporting eager mode. Furthermore, it is configurable, well documented, and conforms to the clean code guidelines: evolvability and extendability among others. %Unit tests are part of the code as well to identify common %issues early on, saving time in the process. % TODO: Unit tests (!) The code was designed to be modular: One module creates the command line interface (main.py), another implements the actions chosen in the CLI (cli.py), the MS COCO to SceneNet RGB-D mapping can be found in the definitions.py module, preparation of the data sets and retrieval of data is grouped in the data.py module, evaluation metrics have their separate module (evaluation.py), the configuration is accessed and handled by the config.py module, debug-only code can be found in debug.py, and the ssd.py module contains code to train the SSD and later predict with it. All code relating to the auto-encoder can be found in its own sub directory. Lastly, the SSD implementation from a third party repository has been modified to work inside a Python package architecture and with eager mode. It is stored as a Git submodule inside the package repository.