Learning history for participating in team application development in Python ~ Think a little about requirement definition ~

Introduction

This time, when participating in the project, the planner

Requirements definition-Articles that can be human resources who can design systems

I will use this article as a reference to deepen my own knowledge of requirement definition.

What is requirement definition?

→ ** Specific advance promise that can be agreed upon by both the customer and the development side at the time of delivery ** (The process by which the development side clarifies what the customer should make in response to the customer's request)

Requirements definition process

1. Idea (request)

Most of the customers and users are not familiar with the system and development, so we will listen to the idea stage.

2. Request

After hearing the idea to some extent, we will consider it in consideration of the skills of the development side and various delivery dates, and propose to the idea where it can be roughly realized as a function.

3. Requirements

We will finally agree on the functions to be implemented as a system and the implementation method.

Process subdivision

As a rough example, I thought about the following example. Perhaps it's not really that loose, but I hope you'll forgive me for checking the process in detail.

After the examination, it will be the actual business process, so this time I will omit only the items from the original article as to what to do. By the way, it is technically impossible now, but it is based on the concept of the application that I want to make in the future, so please be aware that we will not consider the feasibility and details this time.

Request

1. Clarify the customer's current issues (motivation for creating systems and apps)

ex. I own some rental studios and free spaces in the prefecture, but the usage is not good and I want to improve it.

2. Clarify goals for tasks

ex. 30% increase in utilization rate compared to last year

3. Gap between current status and goals (= list of issues to be solved)

・ The business model of a rental studio is a passive business with customers who want to use it, and in many cases, securing a place and securing the number of people is a bottleneck for customers.

・ The existing registration system is not easy for customers to use.

request

Background of the project

1. Overview of the system required to solve problems

・ For registration, prepare a calendar and time schedule so that the current reservation status can be seen at a glance for each studio or free space.

・ For the passive business part, we will add matching functions and bulletin board / SNS functions to propose a means to provide customers with a place and eliminate the trouble of gathering personnel.

In other words, I think this is a scene where we are discussing what kind of systems and services we should have to solve the gap between the current situation and our goals. In fact, when we ask companies for interviews and hear about the content of their work, the development side naturally takes an approach of how to solve the gap from the system side, but in recent years, in addition to that, the actual service, that is, I heard that we are in an era where we have to approach from the business side as well, and maybe if we can not do that, the probability of becoming a burning project will increase (a gap will be created in the goal between the customer and the development side). I feel. Please point out if it is off the mark.

2. List of functions you want to implement concretely

-Date selection function in the calendar UI

・ A function that allows you to visualize the reservation status of the day when you select the date and facility to use, and to make a reservation by selecting the time zone.

・ CRUD function associated with registration

・ A function to calculate the final usage fee according to the application based on the usage fee in the selected time zone and usage plan

・ Member registration function (social login) to use the matching function

・ Matching function (including bulletin board function for recruiting members)

……etc

Examination: Consider the feasibility of the request

Is it technically feasible?

How much budget do you need?

When will the delivery date be?

Proposal: Return the result of consideration to the orderer (developer task)

Functions that can be implemented

Amount to be charged

Delivery date

Requirement: Final confirmation of decisions agreed by both parties (orderer / developer discusses and decides)

List of functions implemented in the system

Matters decided by requirement definition

Organize by Why / What / How

Why: Purpose of system development (request)

Current issues

Goal (what it should be)

Gap between current situation and goal (problems to be solved)

→ Refer to the above item for the above.

What: How to solve the problem

1. Creation of business flow after system introduction

・ What is the business flow in the first place?

A visualization of the flow of the entire business as a flowchart. Used in large-scale system development such as in-house systems. On the horizontal axis, prepare columns for departments that use the system and business details, and use these as lanes. Then, which function of the system is used by which department and in what order is described in each lane. Finally, the numbers assigned in advance in the work details column are linked as an index, and the details of the work in each work are described. After that, it is completed by linking the business regulations and function manuals to the lane.

By the way, I set up a toC service as an example this time, and since it is not a large-scale system, I felt that it was desirable to create a use case diagram instead.

・ What to make → Business flow diagram, use case diagram

2. Clarify functional requirements

・ What are functional requirements?

→ Requirements for functions to be implemented (= list of functions to be installed in the system)

This time, I recommend talking with the body of implementing all the parts revealed in the process subdivision.

3. Clarify non-functional requirements

・ What are non-functional requirements?

→ Performance parts other than the main purpose of the system such as processing speed and security. In other words, it is a requirement for the system other than the function to be implemented.

For example, it is said that customers want to implement a function to clarify the reservation status of the facility by schedule search (functional requirements). The search time (non-functional requirements) is not required, so it cannot be said to be the main purpose of the system. Therefore, I felt that the development side had to think about how to convince the customer of the following categories at their own discretion while comparing it with the delivery date.

Non-functional requirements grade

·availability

→ Requests such as backup system and recovery method in the event of a failure. The perspective of how the system can be made available.

** ・ Performance and expandability **

→ Requests for dealing with peak load and increased workload. For example, from the perspective of how much we can respond to when the number of system users increases, changes in the amount of work required for the system, or the addition of hardware.

** ・ Operation and maintainability **

→ Requests regarding the operating rate during system operation and the response when problems occur. In contrast to the perspective of how to reduce the time when a system that was available for availability goes down and becomes unavailable. This is the perspective of how to keep the system available. This includes monitoring system usage, creating and expanding operation manuals, and maintenance.

** ・ Migration **

→ Requests for installing the created system or migrating from the old system. Formulate plans such as schedule adjustment and rehearsal implementation until the transition.

·Security

→ Security requirements such as user restrictions and unauthorized access. Access restrictions ・ Prepare functions for monitoring and detecting unauthorized users and manuals for security education for customers.

** ・ System environment **

→ Requirements for system installation environment and energy consumption. Consider the selection of equipment suitable for the equipment and the system configuration to reduce the environmental load.

Precautions for non-functional requirements

・ What to do after the examination of functional requirements is completed → If the function changes, the requirements for operation and maintenance will also change, so it makes no sense to consider it unless the function is decided.

・ Proposals are made from the development side → As mentioned above, most customers have little knowledge about systems and development.

・ Hearing the reason for setting requirements

→ To be able to present alternatives.

Quote [How to write functional / non-functional requirements sample available

It is important to note the reason for the requirement and make a note of it. Example) Reason for operating hours from 6:00 to 22:00 ・ Because there are people who go to work at the first train ・ Because the overtime end time is 22:00 If you do not make a note of the reason for the requirement, you will have to adopt the requirement stated by the customer and you will not be able to offer an alternative. In addition, some customers respond with their own ideas, so it's best to ask why.

Quoted again from the same article

For non-functional requirements, the required cost varies depending on the requirements. For example. ① System with operating hours from 6:00 to 22:00 ② 24-hour full operation system → Of course, ② is more expensive. ・ Data backup ・ Necessity of tool development ・ Increased burden of operation and maintenance It is natural to think that "the better the quality, the better". However, let's make customers aware that the more non-functional requirements are enriched, the higher the cost will be, and select the requirements.

In other words, if it is said that a system that operates at full capacity 24 hours a day is good at first and the reason is not heard, there is a possibility that development will be useless. It may also put a burden on the customer who operates it. However, if you ask the reason when considering it and you do not feel a certain need for it, you can search for a lean compromise from the development side in terms of development and actual operation costs.

How: Specific usability and mounting method (basic design)

It is roughly classified into the following three points.

1. Screen design (UI design)

Once the function has been decided, we have to think about how to use the function. And it must not lack the perspective of making the service system more accessible to users. In that sense, UI design should be done first.

When I actually created the portfolio, I designed the minimum UI that the function works → operation test → UI clean copy, but if it is not full stack in the actual field, there is a designer or front end person in charge In some cases, in that case, will it be in the form of consulting with such people?

・ What to make

→ Screen transition diagram

2. Functional design

Quote

Please understand that functional design is the phase that defines "processing to be executed behind the scenes, necessary data". (Omitted) By doing this, anyone can imagine what kind of program should be written. Since the parts composition that makes up the system is also clarified, the division of roles within the team becomes easy.

For example, membership registration, for example, acquisition of reservation information, and communication with the DB, whether it is a system or an application, are absolutely inevitable. So, if you briefly summarize the following 3 points for each function as a set with the UI, you can do it at the time of implementation.

Quote

Backside processing (function name and processing content) Data required for processing, data acquisition source (input from screen, acquisition from DB, etc.) Delivery destination of processed data (screen display, save to DB, etc.)

I wasn't really aware of this when I actually created the portfolio, and as a result of neglecting this, when I exchanged reservation information, I had to review it once from the DB design. Because it was supposed to be I felt it was very important.

・ What to make

→ GUI blueprint, etc.

3. Data design

Quote

There are three things to decide. Specific contents of data Database design Data flow (data flow)

It is the last item to be done in the design, and it is the part that should not be overtaken. I had little knowledge of this part, so I had to roll back from the middle of production, and above all, I had a bitter experience of spending a lot of time just designing this part. As mentioned above, no matter what you do, there is interaction with the DB, so if you do not decide here properly, you will not be able to implement the subsequent processing properly.

First, the contents of the data. In the source

What you should be aware of here is that there are four types of data. Design how these four types of data flow in the system. Data (argument) to be "input" to the program Data entered by the user from the web screen Data read from the database Data "returned" from the program (return value) Data to be displayed on the web screen Data to be stored in the database

it is written like this. It's a snake, but if you add words for personal confirmation

-Value that should be the argument of processing

Data entered by the user from the web screen (ex. Name and email address of membership registration form)

Data read from the database (ex. Facility reservation status)

The above two are data for executing processing with that value as an argument. In the former ex., It is conceivable that those values are used as arguments to collate the DB and the login judgment is performed, and in the latter ex., The values returned by searching the DB are used as arguments for further processing.

Data to be the return value

Data to be displayed on the web screen (ex. My reservation information)

Data to be stored in the database

Will this be the case? While being aware of these four data, we will decide the content and type of the data concretely and try to normalize it.

Next, the database is designed.

There are three tasks required in database design. Divide the role of the table into "master" and "history" Organize reference relationships between tables Transcribe the reference relationship to the ER diagram

Table relations are probably the most confusing part of designing for the first time. I was really confused. However, if the relation is not properly established, you will stumble at the implementation stage, so don't neglect it.

It seems that there are various names for relations, such as parent-child relationships and master and history at the citation source, but when thinking about it, it is easy to understand that it is better to classify first depending on whether it is referenced or not.

Here is the ER diagram that I actually made (the design is not so good in the first place, but for the time being)

ER図.png

For example, as you can see, the user table here is a table that manages user registration information, while the reservation information table is a table that manages reservation information. So, for example, if you look at both tables from the perspective of "who's reservation information", you can see that the reservation information table refers to the user table using user_id. Therefore,

・ For parent-child relationships

→ Parent user table Child reservation information table

・ For master and history

→ Master user table History reservation information table

・ Refer to, if referred

→ Reference reservation information table Referenced user table

It turns out that. Create and define as many tables as necessary according to the function of such relationships. Once again, if this is not the case in system application production, everything will be destroyed. Therefore, if any of the same beginners are reading this article, we recommend that you check the table design again with the citation source or books.

・ What to make → ER diagram (It is also ant to show the reference relationship of the table with a simple diagram before writing) Data flow diagram (processing diagram)

Afterword

As mentioned above, based on the reference article, I tried to solidify my knowledge about requirement definition again. It's a confusing thing, but when I created the portfolio, I defined the requirements, but when I try this, I still have to be aware of it. I reconfirmed that I had a lot of knowledge that I couldn't do in my actual work, and I felt that I still had a lot to do. I will never lead the requirement definition in development planning, and although I am not even a PG in the first place, there is also the teaching of the ancestors that engineers can only call themselves so if they can even define the requirements and design. There is Above all, I don't know anything as long as I'm involved in the project, so I'm glad I could confirm it again this time.

Reference site

Requirements definition-Articles that can be human resources who can design systems Can you explain it easily? Functional and non-functional requirements [Easy in 3 steps! ] How to make a business flow manual

Recommended Posts

Learning history for participating in team application development in Python ~ Think a little about requirement definition ~
Learning history for participating in team application development in Python ~ Index page ~
Learning history for participating in team app development in Python ~ Django Tutorial 5 ~
Learning history for participating in team app development in Python ~ Django Tutorial 4 ~
Learning history for participating in team app development in Python ~ Django Tutorial 1, 2, 3 ~
Learning history for participating in team app development in Python ~ Django Tutorial 6 ~
Learning history for participating in team app development in Python ~ Django Tutorial 7 ~
Learning history for participating in team application development in Python ~ Supplement of basic items and construction of jupyterLab environment ~
Learning history to participate in team application development in Python ~ After finishing "Introduction to Python 3" of paiza learning ~
How about Anaconda for building a machine learning environment in Python?
Learning history to participate in team application development with Python ~ Build Docker / Django / Nginx / MariaDB environment ~
Think about building a Python 3 environment in a Mac environment
Build a machine learning application development environment with Python
Think about architecture in python
Building a development environment for Android apps-creating Android apps in Python
About "for _ in range ():" in python
Web application development memo in python
Write a short property definition in Python
Get a token for conoha in python
[Python] Web application design for machine learning
Building a Python development environment for AI development
Creating a development environment for machine learning
Think about depth-priority and width-priority searches in Python
A memo about writing merge sort in Python
Steps to develop a web application in Python
Data analysis in Python: A note about line_profiler
[Implementation for learning] Implement Stratified Sampling in Python (1)
The concept of reference in Python collapsed for a moment, so I experimented a little.