Our development journey
Firstly, I learned about agile practices and software architecture/design Furthermore, working with other people's code and also to actually use git for a big project. I also need taught myself to use cloud services to implement some of our features. Lastly, I think the most important takeaway for me is to always do test-driven development.
Throughout this project, I learned a lot about android development concepts. For instance, how to manage the android dependencies, modifying the build and configuration files, and also working with XML files to make user interfaces in android studio. In addition to that, I also learned to work with databases and to integrate it with the logic/business layer, and using version control for a large scale project.
From this project, I learned how to create an android application from start to finish. Especially, how to structure the system and making different parts of the system, like database and logic layer, to work together. As well as knowing to use XML as layout for the application and how that works with the Java code. I also learned how to develop a project as a team and how to manage different responsibilities and make sure our documentation files, issues, and milestones are updated.
Throughout this project, I have learnt about the fundamental concept of working in a group. Moreover, I learnt many development skills regarding creating an app. For instance, having learnt how to work with android studio which would greatly contribute to my work in the future.
I learned to debug a big android application and also, to find and fix code smells. Furthermore, I learned how to use git for developing a big project with other people, and I will definitely use version control for future projects.
Since for most of us this is the first time developing an application
as a team, there are definitely some issues that arose during the
process. For instance, we see that communication is a major issue for
the last two iteration. But, as we move on to iteration 3, we become
more active on Slack and keeping each other on the same page.
Other issue is that, for iteration 1 and 2, we usually wait until the
last two weeks of the iteration and cram a lot of works for one week.
We realize that this is not ideal. Therefore, we start our
development very early for iteration 3 and we manage to accomplish a
lot of milestones.
We also identified improvements for iteration 3. We think for this
iteration we manage to divide the workload equally among us. Also, we
properly documented our issues and merge request in a great detail.
Lastly, we finally picked up our momentum and shorten our development
time for some tasks.
Our initial vision was shifted throughout the iteration. Originally we
inteded to make a smart grocery assistant app with very complex
features such as displaying a route inside the store for a specific
item, having user accounts to create and share recipes, and a payment
system. During our first iteration we realized that our ideas are very
ambitious. Therefore, we changed some of our estimations and just
focused on features that we can complete in our sprints. Of course,
this lead to a lot of uncompleted features. So, it did not work out as
predicted.
We think this is also due to slow development time for our first
iterations since we were not that comfortable with android studio and
mobile development. At first glance, there were a lot of stuffs going
on (gradle, XML, RecylerView, Activity, Fragments, etc.). As we
progressed to the last iteration, we became more proficient with
android studio we managed to accomplish more tasks in our last
iteration.
In short, it is really difficult and we actually need to learn to work
as a team. We learn that it is difficult to communicate and coordinate
with many people, and it takes time to getting used to. Furthermore,
if we don't make the distribution of the tasks very clear, then there
will be a lot of merge conflicts. Lastly, don't push testing until the
very last minute.
When we have a large project in the future, we want to start planning
before every iteration, doing test-driven development, and code review
for merge requests.
We also will be keep making adjustment for our stories, tasks, and
estimations; To keep each other on the same page; and, updating our
milestone after every iterations.
Lastly, one thing that we should stop doing next time is that leaving
everything (especially testing) to the last minute.
We think we came with really great ideas but it's unfortunate we don't
have time to accomplish all of them.
Mobile development is a very challenging and it's a different
development routine. For instance, we need to tweak the build and
configuration files a lot. Also, from web dev perspective, to make
something work in mobile need a huge amount of code compared to web.
SOLID principle is very important. We will have a lot of technical
debts if we don't follow it. It is better to take a long and SOLID way
rather than the fast but leave us with a lot of techinical debts.
Retrospective is also very important as part of agile development.
It's a time when we can learn from our mistakes and improve ourself
for the next iteration.