Building a project alone is not difficult for an experienced developer, but doing it in a group of three people is a different story.

After the project specifications and mock-ups were reviewed by the team, we planned to start our work but faced many unknown challenges. For example:

  • What tech stack should we choose?
  • How should we manage our code?
  • How can we organize our work process?
  • Which cloud provider should we use?

To deal with these messy issues, I did a brainstorming session with the team and we came up with solutions. Some of the solutions were ones I had used in my previous company, which made me feel confident because I believe they are golden rules.

Tech level standard

  • Tech stack
    We planned to use Vue.js and Python Django to build the product. Vue.js is a common frontend framework in New Zealand, along with React. Python with Django makes it easier to build RESTful APIs.
  • Code management
    We created a GitHub repository to store our code, commits, and issues. It is undoubtedly a great place for collaboration. For branch management, we decided to use a feature branch + main branch model. Each issue is handled in a separate feature branch and merged into the main branch after the code is reviewed and tested without bugs.
  • Public cloud deployment
    We chose AWS because it is the most popular cloud provider in the world. We evaluated EC2, RDS, and S3, which we found suitable to achieve the goals of our project.
  • Security
    Since our product design involved user registration and login, we had to consider security issues, such as how to securely store encrypted passwords (not in plain text), how to prevent brute-force login attempts, and how to avoid man-in-the-middle attacks during login. We decided to use HTTPS, PBKDF2, Google reCAPTCHA, and cookies to address these concerns.

Team level standard

  • Task management
    To manage tasks more effectively, I preferred using the agile methodology. So, I created a Kanban board on GitHub. Our team members could create a card for each task and move it across different swimlanes to show the current status. Using the Kanban board was very important for us because we often worked asynchronously, as everyone was busy with academic responsibilities.
  • Weekly sync-Up
    Unlike people working in a company, it was not easy for us to organize daily stand-up meetings to review progress. Instead, we set up a weekly sync-up meeting. This was also helpful because we usually discussed blocking issues through instant messaging, and then talked about more challenging problems or gave demos during the regular meetings.