[JAVA] I want to do team development remotely

Introduction

This article is the first day article of Advent Calendar of Valtech Co., Ltd..
I am a 4th year engineer and use Java for business.

The reason why I chose "I want to do team development remotely" as the theme is as follows. ・ I want to create a team outside of work ・ I want to find friends who are interested in team development

The following is a summary this time. ・ [Team development image and deliverables in the process](#Team development image and deliverables in the process) ・ [Tools to assist team development](#Tools to assist team development) ・ [Tool to accelerate team development](#Tool to accelerate team development)

What individual teammates need when developing a team

・ Internet environment ・ PC (SmartPhone, Tablet not available)

If you don't mind

"Situations like this are assumed" "There is such a tool" "I am excellent" If you have any questions, please follow or comment! This article will be maintained after the Advent calendar.

About team development

Susume

First, let's list the benefits of team development starting at home.

Benefits Remarks
Ideas of 10 people and 10 colors New ideas
Conducting mutual reviews Reviewer experience
Sharing know-how Absorption of knowledge other than the person

About restrictions

Restrictions Remarks
Differences in machine specifications Tools may or may not be supported due to differences in OS
Time Securing Issues There is no guarantee that everyone will have time on weekdays
Handling of paid tools Most of the free tools can be replaced

Restrictions I recommend

  1. Make sure to make minutes and accumulate remarks and ideas
    When rework occurs, it leads to lack of motivation of teammates.
  2. Do not leave unnecessary information as a correction comment
    If you are operating version control, include a comment in the commit message.

About technology selection

The developed product is assumed to have the following configuration. I wish I could rent a rental server and release some kind of web application.

Application Server
Java9
Linux
RDB(MySql 8.0)

If you have a strict server-side and client-side separation of your web application It seems that it is a recent fashion to exchange information from the client to the server via json.

Team development image and deliverables in the process

Rough process enumeration

Actually, there was a time when two people were developing in Baltec after the fixed time. There is a history of failure due to restrictions such as inconvenience to each other and the inability to take out materials within the company. .. .. Based on the above experience, this is my best practice for the schedule process.

Assumption: Waterfall until initial release, then agile

  1. Requirement definition
  2. Requirements definition
  3. Overview design
  4. Detailed design
  5. Development
  6. Exam
  7. Operation (hereinafter, 1 to 7 are repeated)

Waterfall: Even if there is an omission in the design document of the previous process, do not overwrite the file anyway. Create a diff, write it there, merge it at the end and give one minor version. Agile: We will revise the design document from time to time and give one minor version after release.

1. Requirement definition

Deliverable: Requirement definition

We will roughly discuss what you want to make within the team and the technology you want to implement. As a means of discussion, you can meet face-to-face at a cafe or have a web conference, If there is no output part, it will be extremely difficult to unify the overall consciousness. Example: Whiteboard in a conference room, drawing in Excel

2. Requirements definition

Deliverables: Requirement definition document, man-hour table for outline design

We will investigate and summarize the technical specifications for operating what you want to make.

At the time of initial release, only the minimum configuration will be used, and rich functions will be compatible with the next release. (Because it is difficult to maintain motivation if you do not make a horn and move it)

Clarify in which process common processes and agreements (covenants) will be discussed if they are on the agenda.

3. Outline design

Deliverables: screen definition document, interface definition document, database definition document, detailed design man-hour table

I have field experience with RESTFul API and Client <-> I have experience with Swagger (described later) as an interface definition document between servers. Swagger is recommended as the RESTFul API documentation.

On the client side, I think it is necessary to leave the html-based mock as a deliverable. (Since Spring Boot creates screens based on html) In addition, it is necessary to cover the screen transition diagram and the screen pattern at the time of normal / abnormal occurrence.

4. Detailed design

Deliverables: Program design document, test design document, message definition document, development man-hour table

Create a program design document and a test design document as a set. When implementing a test design, be sure to identify patterns that can be implemented in common. The format of the detailed design document in Japan seems to be Excel. However, Excel is charged, so I would like to use a different format. I have no experience with it, but I want to use Sphinx (described later).

Identify error messages and various messages, and manage them so that there are no duplicate contents.

5. Development

Deliverables: Product code, test code, test man-hour table

Rabbits must commit and push the deliverables of the day

Coding standards that can be shared, static analysis rules, etc. should be stored in shared storage.

Link and set version control & build tools, and perform [Continuous integration](https://ja.wikipedia.org/wiki/Continuous integration) behind the scenes.

In this process, the production of the program and the production of the test source (unit test) are completed.

6. Exam

Deliverables: test specifications, test code, bug tracking table

Tests that cannot be performed in the development process are performed in this process. Manual tests from a browser, inter-functional integration tests, etc. ..

Be sure to add "Tags" to the source before and after the start of the test. In addition, create a bug management table to accumulate knowledge of recognition discrepancies during team development and get a feel for it.

7. Operation

Release the source to the production server and tap various functions lightly from the screen. (You may automate the operation check items that must be performed at each release and check them later.)

Shift to agile, repeat testing from requirement definition, and repeat development for a short period of time.

Tools to assist team development

Chat tool

Necessary items
1: Can speak with N
A log of remarks remains, you can search the log
The flow to speak is not a detour
It doesn't take much time to increase the number of staff
Not heavy

-> Slack

reference -What is business chat "Slack"? Explain the features and how to get started in Japanese!

Web conferencing

Necessary items
1: Can be executed with N
Can make both voice calls and send messages
Screen sharing is possible

-> Skype, Google Hangouts

reference -Zero travel time! Start your meeting now with Skype screen sharing!

Document storage

Necessary items
Not eavesdropped by a third party
It doesn't take much time to increase the number of staff

-> Online storage (Google Drive)

reference -There is no doubt that it will lead to business improvement! The Perfect Guide to Google Drive for Everyone

Problem management

Necessary items
It is clear who drafted
5W1H is expressed by default on the format
Can generate Gantt chart

-> Ticket management (Redmine)

reference -Redmine operation rules that should be decided

Tools to accelerate team development

Document creation

Necessary items
Free to use
Easy difference comparison

-> Sphinx

reference -I want everyone to use Sphinx conveniently

Interface definition

Necessary items
Free to use
Major

-> Swagger

reference -Easy management of RESTful API with Swagger

version control

Necessary items
Construction is not a hassle
Major

-> GitHub

reference -Introduction to GitHub

Text editor

Necessary items
The operation is not heavy
Syntax highlighting works
Can be translated into Japanese

-> Visual Studio Code

reference -Impression and setting memo of switching from Atom to Visual Studio Code

Coding tools

Necessary items
Can work with version control
Self-solving
Can be translated into Japanese

-> Leave it to yourself

in conclusion

Challenges for this article

By the time this article was published, we couldn't include any visible issues in team development. Example) When developing remotely, you cannot grasp all the progress of your teammates. I would like to add it at the right time, or try risk analysis when the team is established.

SpecialThanx Prior to publishing the article, I asked my seniors, juniors, and wife to check the text. I would like to take this moment to say thank you.

Also, I'm looking for a remote team developer. Words include "Spring Boot", "Java 9", and so on.

Recommended Posts

I want to do team development remotely
I want to do something like "cls" in Java
I want to convert characters ...
[Swift] I want to do something like C's sprinftf
Swift: I want to chain arrays
I want to use FormObject well
I want to convert InputStream to String
I want to docker-compose up Next.js!
I really want to do "new T ()"! (And without inspection exceptions)
[Development log ⑮] I want to add an external link or PDF link
I want to develop a web application!
I want to write a nice build.gradle
I want to eliminate duplicate error messages
I want to make an ios.android app
I want to display background-ground-image on heroku.
I want to RSpec even at Jest!
I want to write a unit test!
I want to install PHP 7.2 on Ubuntu 20.04.
I want to stop Java updates altogether
I want to target static fields to @Autowired
I want to test Action Cable with RSpec test
I want to sort by tab delimited by ruby
I want to output the day of the week
Run R from Java I want to run rJava
[Swift] I want to draw grid lines (squares)
I want to send an email in Java.
I want to graduate from npm install properly [2020]
I want to use java8 forEach with index
I want to pass APP_HOME to logback in Gradle
I want to simply write a repeating string
Development memo ~ I want to display only the first image posted multiple times ~
I want to design a structured exception handling
rsync4j --I want to touch rsync in Java.
I want to create the strongest local development environment using VSCode Remote Containers
I want to play with Firestore from Rails
[Xcode] I want to manage images in folders
I want to be eventually even in kotlin
I want to write quickly from java to sqlite
I want to reduce simple mistakes. To command yourself.
I want to perform aggregation processing with spring-batch
[Rails] I want to load CSS with webpacker
I want to delete files managed by Git
I want to get the value in Ruby
I want to use Combine in UIKit as well.
I want to use Clojure's convenient functions in Kotlin
I want to call a method of another class
[Java] I want to calculate the difference from the date
I want to use NetBeans on Mac → I can use it!
I want to embed any TraceId in the log
Pointcut Expression I want to specify more than one
I want to use fish shell in Laradock too! !!
I want to use ES2015 in Java too! → (´ ・ ω ・ `)
I learned stream (I want to convert List to Map <Integer, List>)
I want to judge the range using the monthly degree
I want to use a little icon in Rails
What should I do to reload the updated Dockerfile?
I want to know the answer of the rock-paper-scissors app
I want to dark mode with the SWT app
I want to monitor a specific file with WatchService
I want to apply ContainerRelativeShape only to specific corners [SwiftUI]
I want to authenticate users to Rails with Devise + OmniAuth