I did not manage to get an idea for another, third, project, so I have to choose from those two that I described before. The choice wasn’t easy because both of these projects would be fun to do. Some of you advised me already on which one of these two do, even though I’m sure that you guys would not use it ;). And I have my own preferences in terms of which app I would use daily. But let’s look at this from another perspective.
As a developer, I have to learn all the time. Learn new technologies, updates to the old ones, I have to keep up and broaden my knowledge. To have some time left for living, I should do it effectively, and not waste time. With both of these projects, I would learn something new and useful in terms of my professional skills. But if you think about this like that, it boils down to learning Firebase or learning Neo4j and Cloud. And for me, as a backend developer, the choice should be simple, take Neo4j and Cloud. I think that I could easily learn Firebase later, whenever I’ll need it, as it’s a really simple concept.
And this is what I have chosen. I will try to create the second project, the public transport app, and I will call it "Commutee" 🙂
To create this app successfully I should have a plan or else It will fail for sure. I won’t be using any gantt charts, or complex project management tools, with these it would not be fun, it would just transform in another job. I think, that I will simply use Todoist, to somehow organize my tasks that I have to do. Unfortunately, Todoist doesn’t have ordered lists or an ability to plan few weeks ahead (at least in free version), but it has an ability to create subtasks! So I think that I will create a task for each week, and as a subtask, I will add things to do in that week to them. Something like that:
That should work, somehow 🙂 I will just have to remember to set deadlines for the tasks in the week at its beginning.
So, what’s the rough plan?
The first thing that I just have to do as a top priority, is to get at least basic knowledge of Neo4j, how it works, how to define data in it, how to define relationships and how to query it. That’s the most important thing. If I get it wrong here, I will surely fail, or at least I will have a lot of problems down the road. Remember guys, the way you store and query your data is really important. It can cripple your whole application, no matter how good and cool technology you use. It is always really hard to get around of bad domain model problem. Most of the time, the best solution in that situation is to change the domain model, but that’s is not always possible, unfortunately. Knowing how Neo4j works, will let me design the way to store all required data in a way that let me easily find connections between bus stops etc.
With this figured out, I should take care of parsing timetables of Warsaw public transport, it is a pretty simple, just plain text format with some dictionaries defined – should be easy, but it may have some weird stuff inside. So that should be done at the beginning too, as this may affect my data model greatly. I probably should read the documentation at least once, before even trying to design the domain model in Neo4j.
Parsing is one thing, writing it down into the database is another. That’s the next thing to do.
Now would be a good time to wrap it all up into a service, with Rest API, with an ability to query all the needed stuff. Well, at least basic functionality, like finding a connection from here to there.
And here is the moment, when I should start Android development. Not earlier. I have to have a working backend service first. Of course, android development starts with environment setup, preparing project structure, adding all necessary dependencies and configuring it all to make it work. But that shouldn’t take long. Still, it involves learning Dagger, Butterknife and using RxJava on mobile, that may somehow complicate things. But hey, that’s the challenge, that’s the fun. With this out of a way, all that will be left will be just finishing an android app, adding activities, layouts, adding maps and overlaying route over them, and stuff like that… when you think about it, that’s a lot of things to do 🙁
Oh, I almost forgot. When I’ll be done with things above, first, I will try to learn some stuff about cloud deployments. For sure I’ll dockerize my backend service and try to deploy it to some cloud, I don’t know yet to which one, but we will see. Also, there still is a plan for a web app for this, written in Angular 2, which I also do not know yet 🙂
Let’s do this!
As you see, that’s a lot of work to do and a lot of fun things to learn. That will be a really fun experience for me, so stay tuned. For now, there’s not much to look at, only an empty GitHub repository https://github.com/lmonkiewicz/commutee but I promise to fill it up with interesting stuff 🙂