Weekly Report #1 — Beginning — Irfan
Software Engineering Class
This semester, I have to take Software Engineering course and I decided to join the partnership class. The partnership class is a new concept, and is very different from the original classes. In the partnership class, the students will be partnering with a tech company to work on their project. The aim of this new concept is to lessen the gap between academia and the industry, in which there are many concepts and practices that differs between them.
And after several days of going back and forth deciding which team to join, I finally landed at HappyFresh along with Muhammad Firza Pratama, Shylla É. Pramadhani, Teresa Pranyoto, Ken Nabila Setya, and Muhammad Iddad. HappyFresh is an online grocery delivery app that has already ran in several countries in South East Asia, and currently based in Jakarta. The problem that we will be solving is out of stock management. So it seems that HappyFresh has a problem in handling out of stock items in their business process. Actually we don’t have particular reason on why we chose this problem. It seems easy — But we’ve never been so wrong.
Because this class will be team-focused, we will need to be very effective in working with the other team members. We need to choose the right tools and the right workflow to be used in our team. Based on my previous experiences, there will be several aspects that require specific tools and workflow. There are many choices that needs to be tried and examined before deciding to use them in our team, such as:
It’s trivial to choose a process model since we don’t have a solid plan for the project (we don’t even know what we will do in this project). So, we won’t use Waterfal or Incremental model, and that leaves us with Agile development. The most popular Agile development framework right now is Scrum, and the Faculty also provided us with a two-day Scrum training for one person in every team. I happened to be the one from my team to attend the training last month.
To make our project manageable and easy distribute tasks, we need a project management tool. The one that comes to my mind is Trello, JIRA, and Asana. At first we chose JIRA because it’s the most powerful among them, but it’s complex and takes time to learn. And later we chose Trello because it’s very straightforward to use and everyone in our team has experience in using it.
Source Code Hosting
We wanted to use GitHub for organization to host our codes, but unfortunately it’s very expensive and applying for student discount is very tedious. Actually we can use it for free if we open source our code, but we need to make our repositories private. And then we tried BitBucket, because it gives us unlimited private repositories, but I later realized that it has team size limit of 5 people, and we are 6 people. So we’re stuck in hosting our repositories on our personal GitHub account. Luckily, Mr. Ade pointed out that GitLab has a hosted version with unlimited private repositories and unlimited team members, Yay!
In my previous experiences I tried several development workflow and concepts, such as code review, unit testing, and continuous integration. I found out that they are really useful, and I can’t imagine developing something without them. So I decided to apply them in this project.
There are some tools that we consider, such as ReviewBoard, Phabricator’s Differential, and Gerrit. We chose ReviewBoard because it is intuitive to use and it has a hosted version so that we don’t have to install it manually on our server. But later we decided to utilize another method for reviewing codes: pair programming and pull-requests review.
Some branching model that we consider are: Git Flow, GitHub Flow, and Feature/Topic Branching. We chose Feature Branching because it’s very simple and I have use it the most. We can simply create a new branch for every feature that we want to work on, notify our peers to review our codes, and merge it to master when one of our peer approved our codes. But later we switched to simplified GitHub Flow, because we ditched the code review with ReviewBoard method.
The options are WordPress, Tumblr, GitHub Pages, and Medium. At first we decided to use GitHub Pages, because it will forces us to use Git more often. But later I think it can make our daily workflow more complicated. So we went for the easiest platform: Medium. Medium has a beautiful user-interface and a powerful collaboration platform. For our project, I created a Publication and invited all members to post their stories individually.
Last Thursday, we held a Git Version Control tutorial session. We learned Git from its basic commands to how to manage branches. We also planned to have a code review tutorial, but we ran out of time. And next we will substitute it with Pull Requests tutorial.
We came to HappyFresh office for the first time last Friday. We were introduced to our mentors and we discussed for three hours about the problem that they are facing. Turns out that out-of-stock items is a very serious problem right now, and it would be very greatly impacting their business if we can solve it. They also told us about their technology stack, in their development they use:
- SpreeCommerce and Ruby on Rails for the backends
- PostgreSQL for the database
- NodeJS, ReactJS for serving the front end
- Chef for deployment automation
- Redis and Memcached for caching
- BitBucket for source code hosting
- AWS for cloud server
- Don’t just use the best tools, but use the most suitable tools for your team
- Challenging project will require close-knit teamwork
Next, me and Muhammad Firza will have a discussion on best way to do Scrum with Trello. I will prepare PR tutorials, and gather some resources on the technical side. And we will brainstorm ideas to solve the core problem.