This is an assignment from the RMIT Software Element of Processing subject (if you're interested in what is covered in the subject, check out my notes). This was a very interesting project where I learned a lot about teamwork, Scrum, Cloud technology and CI & CD.
My team of 4 people were given a broken start-up code in Spring Boot and ReactJS to-do list that had failure with authentication.
With the given tech stack, I want a fully functional social media with CI & CD and Cloud in 10 weeks.
Homy - RMIT Head Tutor
TechStack | Github | Demo |
---|---|---|
Maven | Repository | View site |
Spring Boot | ||
ReactJS | ||
TravisCI | ||
Google Cloud | ||
MySQL | ||
JWT | ||
Websocket | ||
JUnit | ||
Jest | ||
WebdriverIO | ||
Docker |
The purpose was to make a full-stack application from scratch with CI & CD on Cloud. Using Scrum methodology, my team was required to have standup meetings weekly. In each standup meeting, we talked about numerous things including what we had done for the previous sprint, planning for the next one and updated the sprint backlog for next week.
After the end of each month, we had to do a sprint retrospective meeting where we each considered our behaviour for the duration of the sprint. We also had sprint review meetings with our tutor to review our feature demo. He was able to offer further insight into our work due to his experience as a product manager.
Planning is the most important thing, we rotated our Scrum Master for each sprint. Scrum Master had the responsibility to decide which feature was going to be implemented for the sprint. On one of the very last sprints, I was assigned as the Scrum Master
After being assigned the project, the first thing I did was to set up CI & CD pipeline. With the CI & CD set up beforehand, we had a faster development environment compared to other teams.
For learning purposes, we agreed to switch roles so every had a chance to participate and gain experience.
The first process was to prototype the web app using Figma. At the same time, relational database, Cloud environment, and API were set up and developed.
We had 3 main roles in the team that were interchanged between members: front end, back end, and Cloud DevOps.
For every feature, an issue was created on Github for task tracking and discussion. The task of that feature was then moved from Sprint Backlog to In progress. A separate branch was created from dev_branch
namely issueNumber_feature_name
. If a feature was too complicated, we divided it into multiple sub-features with sub-issues and sub-branches.
When a feature was completed, we created a pull request into dev_branch
and labeled the feature under In Review on Trello. Features needs to be tested both front end (WebdriverIO, JEST) and back end (JUnit) and needed to have at least 2 people to review the code and accept before merging it into dev_branch
.
We did have a hot_fix
branch when necessary. When everything was complete, we merged from dev_branch
to master
. We then released the product with currently known bugs, etc, under release
branch with a tag
.
The tech stacks were pretty new for us. None of us had eer worked with Spring Boot before, and half of the team was unfamiliar with ReactJS and Docker.
Since we were not familiar with Scrum, we tended to underestimate the task. This meant that ultimately we overestimated the features that we were capable of delivering
The project was initially developed using H2 Memory database, meaning that moving the application to Cloud took a bit of time to configure.
Scrum and software development lifecycle was the biggest thing I learned after the project. It was a fun experience to be a Scrum Master and to work with the team under Scrum methodology.
I also learned SpringBoot, which was very interesting. Knowing how to implement Docker and CI & CD is a very helpful skill which will greatly benefit me in the next projects I work on.
The main process and issues was created in a Private RMIT repository that we are not allowed to fork it out. Our repository is just a clone of it. However you can still see some of the process under Network
↩