Overview
Acebook is a full-stack web application built with the MERN stack that aims to replicate some of the core features and functionality of the popular social media platform, Facebook.
This project provides users with a platform where they can connect with friends, share posts, photos and react to other users' content, just like on Facebook. The application has been developed using modern web development technologies and best practices, making it a robust and scalable solution for anyone interested in building a similar social networking application.
Acebook was built by a team of six developers who utilize Agile methodologies and a Git workflow to collaborate efficiently and deliver high-quality code on time. This is one of the group projects during Makers coding bootcamp.
Tech stacks
ReactJS, MongoDB, ExpressJS, TailwindCSS, Cypress, Jest, Agile methodology
Task
Given a back-end ExpressJS server with several routes to generate authentication tokens, our task is to continue on this given code base to complete this full stack application.
User stories
- User should be able to create a post with text
- User should be able to log in, sign up, log out
- User should be able to upload a photo to a post
- User should be able to like and dislike a post
- User should be able to see others' posts
Challenge
New to agile methodology As a team, we were new to the agile methodology and had to learn and implement it during the project. This required us to understand the different roles and ceremonies, such as daily standups, sprint planning, retrospectives, and backlog grooming. We also had to ensure that we were working collaboratively and communicating effectively to stay on track and meet our goals each sprint.
New to Git workflow Additionally, many of us were new to the Git workflow and had to learn how to use Git and Github effectively as a team. This required us to understand branching, merging, pull requests, and code reviews. We also had to ensure that our codebase was always up-to-date and that we were properly resolving any merge conflicts.
Not starting from scretch One of the challenges we faced was starting from an existing codebase rather than starting from scratch. We had to familiarize ourselves with the codebase, understand how it worked, and identify any bugs or issues. We also had to ensure that our changes did not break existing functionality.
Short sprint periods Another challenge we faced was the short sprint periods of one week. We had to be very efficient with our time and prioritize the most important features to work on each week. We also had to ensure that we were properly testing our code and catching any bugs or issues early on in the development process.
With different skillset levels Finally, we had team members with different skill levels, which required us to work collaboratively and share knowledge. We often pair-programmed and held code reviews to ensure that everyone was on the same page and understood the codebase and any changes we made. We also provided support and guidance to team members who needed it.
Approach
Prototype as a guide To ensure we were all on the same page, we started by creating a prototype in Figma that served as a guide for the design and functionality of the application. This allowed us to have a clear understanding of what we were building and helped us to stay on track throughout the development process.
Stand-up and retro everyday We held daily stand-up meetings to update each other on our progress, discuss any issues, and plan our tasks for the day. We also held retrospectives at the end of each week to reflect on what went well and what we could improve on for the next week.
Communication is the key We emphasized the importance of communication throughout the project. We regularly checked in with each other, shared our ideas and concerns, and asked for help when needed. We also made sure to give each other constructive feedback to ensure that everyone was working towards the same goal.
Trello board We used a Trello board to keep track of our tasks and progress. This allowed us to prioritize our work, assign tasks to team members, and ensure that everyone was aware of what needed to be done.
Showtime and workshops We held regular "showtime" sessions where team members could demo their work and receive feedback from the rest of the team. We also held workshops to share knowledge and help team members improve their skills. This allowed us to collaborate effectively and learn from each other throughout the project.
Result
We successfully finished this full-stack app in 2 weeks. All features have been implemented to the MVP.
What I've learnt
Planning is 40% of the project Through this project, I learned that planning is an essential part of any project. It helps to ensure that everyone is on the same page and that the project is being executed in a timely and efficient manner. By spending adequate time planning, we were able to identify potential issues and mitigate them before they became major problems.
Sharing is caring Another important lesson I learned is the value of sharing. By sharing our knowledge, experiences, and ideas, we were able to develop a better understanding of the project and work together more effectively. Additionally, by being open to feedback and criticism, we were able to identify areas where we could improve and grow as developers.
Work as a team but not individually During the project, we learned that working as a team is critical to the success of any project. While individual contributions are important, it is essential to collaborate and communicate effectively with other team members. By working together, we were able to leverage each other's strengths and overcome any obstacles we encountered.