# Product vision ## Mission (Add) Currently, Deep learning is a tough subject to master because it requires a mathematical background and programming experience. This means Software Engineers with no mathematical background or Data science researchers with no programming experience are hardly capable to work with common deep learning tools like TensorFlow and PyTorch. These frameworks assume that the user has that experience. So there is a gap between programmers and researchers, which is not addressed properly by common frameworks and libraries. Thus, fastai's mission is to make deep learning more accessible by bridging the gap between researchers and programmers. fastai is a deep learning library that provides users with high-level components that deliver "state of the art" results in common deep learning domains, such as image processing and speech recognition. Also, it offers low-level components for researchers who wish to gain finer control. The library aims to achieve both of these goals without making substantial compromises in ease of use, flexibility, or performance. This is made possible by making use of a carefully layered architecture, allowing to swap parts as needed. ## Stakeholders The use-cases are varied, just like the users. Therefore, four different stakeholders are identified: the students, the researchers, the contributors, and the founders. There is often overlap between the groups. {{<image file="Stakeholder_diagram.png" caption="Stakeholder groups">}} Rachel Thomas and Jeremy Howard are the founders of the non-profit fast.ai[^improv6] and its library. They decided to create a MOOC in 2016 called "Practical Deep Learning for Coders"[^improv5] to make deep learning more accessible. fastai was the first open-source machine learning programming library designed to be accessible for any person with at least a one-year programming background. Jeremy Howard was president of Kaggle and founder of Enlitic. While Rachel Thomas has made significant contributions in the field of data ethics and is director of the USF Center for Applied Data Ethics. Jeremy Howard is the only contributor to the library that evaluates pull requests. These pull requests can cover bugs, enhancements and feature extensions. However, only changes approved by the founder are accepted, even though the community might not always agree[^issue5]. Also, only the best practices empirically discovered by the founder are included. Given these two observations, means that we can conclude this library to be opinionated. Next, contributors help in the development of the project by extending the code base, helping solve issues like bugs, adding or modifying the documentation. A contributor can fix an issue and report an issue that requires a fix. The contribution process can start at the fastai forum or at the GitHub repository directly. Every fix should adhere to the fastai coding standards and abbreviation guide[^post]. Moreover, students use the framework to quickly start experimenting and learning Deep learning, without necessarily having a strong mathematics background. Lastly, researchers generally have a better understanding of deep learning and therefore are unlikely to use fastai to learn more about deep learning itself. However, they might choose fastai to quickly start prototyping or use it to set up a baseline for their research. ## Takeaways - Mission - Stakeholders - Use cases (Domain and capabilities) - fastai library has - Key Qualities: Flexibility, Modularity and simplicity. There exist a knowledge and expertise gap between researchers and programmers. fastai addresses it by providing an opinionated library that incorporates the best practices and standards empirically discovered by the founder. The fastai library incorporates the most common deep learning use cases. The key qualities of the library are reflected by the modularity and simplicity of its layered architecture. # Architecture ## Takeaways - Architectural style - Component view - Key quality trade offs - API Design principles fastai’s architectural choices are dictated by the mission and its mission is to help students understand, regardless of how adversely this might affect the architecture. This is explicitly shown by the creator of this project since using Jupyter Notebooks is currently a new and therefore challenging way of creating a new library. However, it shows much potential. fastai is an opinionated library that incorporates best practices and abstractions such to reduce boilerplate code and make it easier for the user to make a model quickly. This leads to a trade-off, the **simplicity** that fastai provides **can lead to a decreased performance** of the implemented machine learning model. Inherent design choices are abstracted away in the library. Uncovering these default design choices can make customization difficult. Thus for specialized use cases, this might not be ideal. # Conclusions slides So… to conclude, Fastai’s architectural choices are dictated by the mission. And its mission is to help students understand, regardless of how adversely this might affect the architecture. This is explicitly shown by the creator of this project since using jupyter notebooks is currently a new and unique way of creating a library, all with its own difficulties. However it shows much potential. Fastai, shows a promising new way to learn and get familiar with a library. It lets the user, when done correctly interact with each part of the library and show how it actually works instead of only showing static documentation examples There are multiple ways to make use of the fastai library. All these ways; Books, MOOCs and the library itself provide enough learning opportunities to be sufficient on its own and can act complementary to each other. Because the library makes use of notebooks to teach Deep Learning, it in a unique spot. It is harder to write tests because there are hardly any testing standards defined for Jupyter notebooks or Deep Learning. Another problem with the library is the use of abstractions; these abstractions allow for simplicity but add complexity when extended. Because what is preconfigured and what isn’t? Also the contributors around fastai are active and errors are quickly identified and fixed. This means that even though it makes use of this unique setup, which makes it harder to standardize and conform to common quality standards, the strength for evolution and quality lies with its contributors; not with the tooling. The first thing we observed in the selected issues, is that they do not adhere to the issue creation standards: [^issue1] [^issue2] [^issue3] [^issue6] [^issue7] [^issue8] [^issue9] [^issue10]. These issues are not reproducible. Even issues created by the founder of the library [^issue8] [^issue9] [^issue10], do not have a proper description of the issue at hand. Also, there does not seem to be proper discussions for these issues, since they were immediately closed. Additionally, the founder of the library Jeremy Howard is almost the only person accepting or rejecting merge requests. Thus, making it an opinionated library that has considerable knowledge risk. Even though these processes are not well respected, the team behind fastai has created many processes to ensure that a certain level of quality is maintained. The documentation of fastai is very complete. The issue reporting is very well structured and allows to assist the user on GitHub to make the reproducibility of a bug easy. There is a very extensive contribution guidelines. A forum concerning the fastai library has been created. Thus, users can have in-depth conversations about the development of the library. Moreover, automatic testing while requesting a pull request has been put in place to ensure that the modifications won't create bugs in the library.