## 2 Data Science Project Organisation--Industry 'Best Practices'
### Software Architecture--Incorporation of 'Best Practices' for User-Friendliness  
The software we are developing is an aid for a small-scale medical research team. To borrow from the beforementioned concepts, we are developing software that helps with steps 2-5, with 3-4 essential parts of it. The focus is deliberately limited, it does not want to do more: it is simply a framework by which a team can gather all their research data, test various hypotheses and models with it, and report it automatically in a user-readable form. We feel that this scope fits with a few developers and new functions may be added as needed; in contrast with large software frameworks, where such incorporation may take a long time or workarounds.  
However, the CRISP-DM standard deliberately does not provide a guideline, how to actually implement the functionality required. This problem is as old as software development itself. Fortunately, industry 'best practices' are available. One of these is the widely popular 'Agile' methodology [6]. The 'Agile Manifesto' of software developers describes essential concepts and introduced the concept of 'user stories' [7]. With Agile and with 'user stories', the system is approached from outside, from the perspective of the users. Everything else is developed around the needs of the users, every user has a'story' with the software piece.  
In a small research project, we usually have four types of participants:  
1. Assistants, who usually have a narrow, well-defined scope of work.
2. Junior researchers (e.g., undergraduate students) and other personnel, who are strongly dependent on input in their work.
3. Senior researchers (e.g., postdocs), who are able to work independently with minimal input.
4. Principal investigator, who oversees the whole project and sets goals.  
To meet the requirements of data processing in such teams, we have devised a software toolkit, a data learning framework we named 'PyTanito'. The Py stands for 'Python', an increasingly popular, open-source, machine programming language [8], with a large following in the science field as of 2021. We have deliberately made this choice, so that our software may be extended by future researchers without'strings attached' or without potential large costs that come with proprietary systems managed by large corporations. A secondary benefit of this adoption is that an increasingly large amount of 'libraries' are available for it. These 'libraries' are pieces of independent programs performing specific tasks so that one can rely on the work of others. We do not need to program every function, especially data analysis or machine learning tasks, which are usually difficult to code.  
Illustrated in Figure 2, the system builds around the needs of four types of users. The respective four 'user stories' are as follows, roughly corresponding to the natural composition of a small medical research team:  
1. Software/database manager, who manages the software; may not need to be a research person; sets up environment and checks database and software function.
2. Data curator, the role of assistants and junior researchers; collects and inputs data into the system.
3. Simple data analyser, the role of more senior researchers; may perform simple analyses on certain selected data.
4. Complex model builder and analysis, the role of the most senior researchers; sets up different machine learning models.  
'PyTanito' incorporates another software development 'best practice': the layers only interact with the single layer below their level--or, at maximum, at their level. This key part is illustrated in Figure 2, which shows the direction of information flow. For example, it is not possible and not desirable for any user to interact directly with the database sitting in the centre. Simply use the 2 nd role functions that read and input data into it. Another advantage is that 3 rd and 4 th role users do not need to know where the data comes from, as they work with the database, where all data is unified.