In the preceding chapter, we covered the broad strokes of a code foundation. Focusing on breaking up complex structure by utilizing refactoring and basic software-engineering best practices was important to pave the way for further discussion of the more detailed aspects of software development for ML. Without laying the foundation of basic best-practices, the code architecture and design elements that follow simply don’t matter.
Early in anyone’s career in software development (ML or otherwise), the ability to identify potential issues with an implementation is effectively nonexistent. This is understandable, as the wisdom of knowing what works and what doesn’t comes directly from experience. Everyone who works in developing software eventually learns that just because you can do something doesn’t mean that you should do it in code. These lessons are typically gained by messing things up a great deal.