COMP30022: IT Project Week 1-2 Checklist
===
###### tags: `COMP30022`
## Introduction
This document aims to help you get geared up with a great platform so life is a lot easier when uni gets more hectic.
To complete the checklist, have an appropriate tool/technology selected from each of the categories, set up and ready to go. Then also include all your choices along with your team document. Also please add me to your repository, Trello/Jira, communication tool and documentation tool.
### Topics
- Version Control
- Workflow Management
- Team Communication
- Documentation
- Technologies
- Team Document
- Bonus: CI/CD
## Quick List
Here's a quick list to keep track of what you need to have completed by end of week 2. These include my recommendations in () - please however use whatever you feel comfortable with out of the topics below.
- [ ] **Code Repository (Github)**
- [ ] **Communication (Slack)**
- [ ] **Workflow Board (Trello)**
- [ ] **Documentation (Google Docs)**
- [ ] **Technologies Picked (Express | React | MongoDB)**
- [ ] **Team Document**
- [ ] **Meeting Times**
## Version Control
Hopefully you have had a crack at git/svn/mecurial some time during uni - if not don't worry because you will use it so much that everyone will be a expert at the basic workflow by the end.
For this topic - it will be split into **local** and **remote** version control - with **remote** also including additional pull request, branching stuff.
Note that for the purposes of this subject, it is recommended that you use git and not mecurial or svn as they definitely don't fit our use case and have less support.
### Local
You have a choice between using a client (GUI) or just terminal with git (installed by default on most linux distributions). For my first entry into VC I liked GitKraken and Github Desktop but moved to just the terminal eventually as it became faster.
#### Clients
- [Linux/Mac/Windows](https://git-scm.com/download/gui/windows)
### Remote
[Github](https://github.com/), [Bitbucket](https://bitbucket.org/) or [Gitlab](https://about.gitlab.com/) are the only ones I would recommend. Out of those 90% of the time Github is the best option. All of them provide pull request, issues and CI/CD support. (note that bitbucket and gitlab have arguably better CI/CD but for this project Github will do more than enough)
### Standard Workflow
I want to work on a new feature so first I need to make my own branch called a feature branch (we will merge this branch back to master later on a pull request).
```
git fetch && git pull
git checkout -b "your_username/feature"
```
Note that I like the branch convention of using your git username then a delimeter with the feature name - this way its easy to see who's branch is doing what (also `git blame`)
After I've finished my feature, done some testing locally and think its ready for review I will add all my uncomitted changes (if you haven't been comitting incrementally) and push to remote
```
git add . (or if you've muddied ur work dir then add them individually)
git commit -m "what this commit does e.g. Add login button on main page"
git push -u origin "branch_name"
```
Cool then just hop over to the website, select the brancha and open a pull request for review. Your team mates can review this and you'll be good 2 go.
Also add me to the repo - `kvoli` is my github and bitbucket tag.
## Workflow Management
This is how your team tracks what work is being done, by who and when. If you're making something solo then usually it's still a good idea to break your work up into logical units and track your progress so you can reduce some mental overhead. In a team, unless you are psychics it's a must and for this subject it is also a requirement.
Most tools here follow a kanban board type look where each piece of work is broken up into tickets or cards. There you move those cards between columns which represent their stage in the development process.
Here's a standard board layout on Trello with a Backlog, Deveopment, Code Review, Testing and Done.

To set this up you can pick between either [Trello](https://trello.com/) or [Jira](https://www.atlassian.com/software/jira). I recommend Trello since its more lightweight however has great support for plugins. Use Jira if you have used it before or want to spend an extra 10 hours of your time... I say this as someone who wrote code for Jira last summer at Atlassian - it's just too big for our purposes.
**Make sure you use the board whenever your work is updated! It directly affects my perception of your teams progress**
## Team Communication
What will your team use for messages, notifications for pull requests, builds and deployments? Please **DO NOT USE:** `facebook messenger, email, telegram, whatsapp, wechat, hackchat, IRC, myspace`. Unless you can setup webhooks/bots for notification integrations.
### Options
**Slack:** What everyone uses, its free for under 10k messages and has every possible plugin and webhook support. This is a great choice.
**Discord:** Actually has pretty good support for what we're doing but probably need a good reason to justify this one.
**MSFT Teams:** idk why but it's certainly an option
### Plan
It is absolutely vital that your team sets out and agrees to how the channels should be used, when you will check it so everyone can set their expectations. e.g. I won't check your slack unless you @ me or when I want to see on how its all going. This should go in your Team Document.
## Documentation
For code docs, architecture diagrams, team meeting outcomes etc. It doesn't have to be massive but it should be there as requirements, architecture is a required item
note that strict UML for all your code is not only unecessary but not recommended by me - just make sure there are some overviews of whats going on. UML doesn't work great when you write your frontend using react hooks. Focus on the goal, which is conveying the general architecture / overview of your system.
I recommend HackMD, Confluence, Google Docs.
## Technologies
This is a CRUD app so a database, database wrapper (API/backend) and front end are required. I'll keep this brief because I'll cover it in Lecture 3.
### Database
I won't recommend NoSQL over SQL, just use whatever feels best for your team.
#### NoSQL
- MongoDB
- CouchDB
#### SQL
- Postgres
- MariaDB
### Backend
Usually a framework library is used ontop of a language. Any will work for this project as extreme speed / custom concurrency etc aren't a requirment (unless your client says they want 20ms 95% response times)
#### Python
- Flask
- Django
- Tornado
#### Java
- Spring
#### Go
- Don't need a framework here
#### Rust
- Rocket
- or raaw
#### Javascript
- Node
- Express
### Frontend
Javascript is really the only option unless you feel confident in writing all html with ajax queries
#### Frameworks
- React
- Angular
- Vue
## Team Document
A document that outlines who's in your team, what tools/technologies out of the above you plan on using and agreements around the expectations set by the team.
This could also be called a team contract. It tries to give some foundation to your teamwork as each memeber agrees on their preferred "role", where they will invest more time in than other areas. This usually aligns to each team members strengths, experience and interests. It sets out how you will communicate, set meeting times (outside of our standup) and anything else important your team agrees upon.
## Bonus: CI/CD
Please only do this if everything else is finished already in the checklist. Continuous Integration and Deployment is the process of how your code is tested, built and deployed (automatically). I'm not going to recommend anything here yet but eventually I would really like every time to have an automated integration testing, builds and deployment setup. It is what industry uses, it makes your life easier for a bit of upfront investment.
## Contact Info
Github: kvoli
Trello: amcclernon@student.unimelb.edu.au (I prefer my student over staff acc)
Slack: amcclernon@student.unimelb.edu.au
HackMD: @kvoli
Google Docs/Drive: amcclernon@student.unimelb.edu.au
Atlassian: amcclernon@student.unimelb.edu.au
### Zoom Standup Meeting
Join from PC, Mac, iOS or Android: https://unimelb.zoom.us/j/9441953155?pwd=RjNMRTBFZ3psamF2QmtLNjRYRXd2UT09
Password: 6GunCM