1 week ago I decided to take a challenge for myself that focuses on learning and building in public. Itās time to reflect on what Iāve achieved.
Starting from the blank canvas
This week Iāve been mostly working on the business logic of my app. Fortunately, since the day when I got the idea of it, Iāve collected enough information to know what I want to build now. I analyzed similar apps, wrote down emerging ideas, and even thought about the design.
But even so, I feel like Iām starting from a blank canvas. š Thatās because, when I think about how to actually implement those features, I realize that there are still lots of things to consider.
However, I really enjoy designing and building something that will certainly help me and is likely to help many people in the future. Here is the Github repo, BTW.
Speaking about design, I donāt use any design tool like Figma. All the UI is currently in my head and other apps I use for references š Thatās because I tried using design tools and discovered that it really takes time. I think, Iām a lot better off just drawing sketches on paper and writing the UI programmatically at once (but weāll see).
Trying to be a lazy developer
My app development started with a challenge. I started with writing UI cause Iād passed a codelab about the framework and wanted to practice a bit. In my appās design, I imagined a collapsing toolbar with an image. But the matter is that the framework does contain built-in functionality for collapsing toolbar, but doesnāt allow putting custom content such as an image into it.
I spent a lot of time figuring out a way how to do that and eventually found one. Here is an example layout for you to understand ā¬ļø
The problem was not only in the image. I was not sure whether the title should be collapsible too. This is a disadvantage of not using a design tool, BTW.
Spend time figuring that out as well. But you know what? I eventually realized that the effort was not necessary because I could simply make it nicely appear on the toolbar when a user scrolls down. Moreover, I recently came up with a more nice and modern design solution that actually does not require a collapsing toolbar at all!
For sure, I gained knowledge and experience, but next time Iāll try to be as lazy as possible. And Iāll think twice when Iām about to start something difficult Iām not sure about.
Exploring other peopleās projects
I thought it was a great idea to find out how certain features are implemented in other peopleās projects. I know two open-source apps that are similar to what I want to build: uhabits and tasks.org.
But I discovered that finding the correct implementation takes lots of time cause the codebases are complex. You should jump through those classes and to actually understand how something is done there, you need to understand the whole structure. In addition, although these apps are native Android, people use different technologies that may be not suitable in my case.
So I decided not to waste time for now.
A bit of technical stuff
My app is going to heavily use some API that deals with time. So this week, I decided to learn kotlinx-datetime
library. I hadnāt known how to work with LocalDate
s, Instant
s, and other things so I met these concepts for the first time.
I found out that whatās very important in dealing with time is to store the time of events scheduled for the future in LocalDateTime
instead of Instant
s. Thatās because otherwise if some country decides to suddenly change their timezone (e.g. decides to introduce/revoke DST), my appās notifications will tell the user the wrong time of the event. I even made a Github Gist with some notes on this library.
Why kotlinx-datetime
when there is java.time
? I want to first develop my app on Android and then expand it to iOS with the help of Kotlin Multiplatform. Even though kotlinx-datetime
is yet alpha, I decided to use it, cause there currently is no other option.
My progress
Alright, itās about time I summarized my performance this week.
My challenge
ā 6/5 tweets
ā 1/1 article (this one)
VCās Healthy Habits challenge
āļø Make my app: worked for 44 hours (goal = at least 40h)
āļø Household: did at least 1 household chore 6 days a week
š¬ Physical activity: 4/5 activities
āļø Rest: had at least 1h each day
āļø Learn English: learned 42/42 new words
Iām late for 2 days š¬
I shouldāve published this post on Thursday or Friday but while writing it, I came up with an idea of a simple learning app, which is not connected to the main one. Started working, and thatās what I was unexpectedly doing during these two extra days cause I initially thought it would take 1 hour at most š .
Taking into account that my performance was OK, Iām gonna start over as if the 2nd week started now. I think I may do that (I hope so š).
This is also a great thing about this weekly challenge type. Though Iāve messed up on the previous week, I have a perception that Iām starting over on the next one, which gives me a bit more motivation.
Made a simple program for tracking my progress
So here is that program that took me two days (damn).
I like to visualize my progress with progress bars. Thatās what this app is about. It allows users to enter a name of a routine and its progress, and displays it in a nice way. So here is how I roughly estimate mine for now:
So, while I worked even more than planned, I didnāt do much actually. š I set a goal to make my app with basic functionality in two months but I think my pace is currently too slow. Yet Iām happy that I already know about 40% of what I need to build this (not the whole Android, of course).
And getting back to the app, while making this simple layout is indeed not so difficult, I also decided to make it work properly and introduce the āadd routineā functionality, which was a challenge for me. I will improve it later, making the code more optimized and adding a database cause now the data gets lost when you close the app. The code is available in this GitHub repo.
Anyway, making such projects are my favourite learning style. I watch tutorials and then apply that knowledge in practice right away while creating something that is actually useful to me and other people.
Improvements
So there are some improvements to be made in both my work and life.
First, I noticed that I donāt have a strict plan of what I should be doing at a time. So I just continue what I was doing the day before or come up with an idea and start working. This isnāt very productive in my experience. Iād better create a plan.
I canāt really make a plan for building my app because Iām doing it for the first time and vaguely imagine the next thing Iāll have to deal with. But luckily, thatās not true for learning. So Iāve collected the necessary resources for the next two weeks or so and defined how much time I should spend on each. Iāll also try to apply the gained knowledge right away in my project so I do have some kind of a plan for building my app either.
Second, I initially planned to do tasks in specific time blocks and not exceed the time of each. The challenge is that we usually have some distracting things that break our schedule. I found a solution to simply change the order of these tasks, which I call routines, and at the end, spend the planned amount of time on each. Honestly, I've completely failed with this one. Itās quite challenging but I think this can significantly increase productivity so I tweaked my schedule and Iāll try again.
Also allotted some time for daily review, reading, and writing articles, cause I now have 160 only in my DEV reading list.
Measuring time, not work
With all these improvements, Iāll remember that Iām not a superman to achieve everything.
Here is one productivity tip that works for me:
Measure how many hours you worked, not how much work you did.
Thatās because, at first glance, you may appear not to have done much, but, in fact, this 20% that youāve done contribute to 80% of the overall amount. Itās especially relevant to programming, where you usually have to spend lots of time fixing a bug or reading code and not appear to be very productive.
BTW, thatās why I donāt really understand people who advise to apply the Pareto Principle, cause if this law exists, you canāt avoid it whatever you did.
Of course, one may get distracted all the time and indeed not do much. Then this trick wonāt work. But Iām sure thatās not true about me.
Ending
Anyway, the takeaway from this week will be that contributing to learning and building in public is indeed helpful for me. I enjoy it and see the increase in productivity. Thatās because if I didnāt share my progress, I wouldāve quit the challenge in a couple of days. Thatās how it used to be.
Alright, thanks for reading this article, good luck with your projects and see you later. š
Top comments (0)