19 Aug 2020
This is quite an embarrassing thing to discover after years of writing Java. I recently was writing some code that checks for a string having a certain format. This string may or may not include a new line character. Today I learned that .*
does not automatically cover line breaks in string. If you use String.matches()
then \\R
option can be used to cover this use case.

16 Aug 2020
I was reading a blog post where the author was talking about expiring vs permanent skills.
Expiring skills are skills that affect an organisation in a short-term. These skills usually diminish in value as technology trends change over time. Programming in COBOL may not be as lucrative as it was 20 years ago, for example. Android may not be relevant come 20 years in the future. These skills can be acquired, may it be by online tutorials, or through formal education. We usually call them hard-skills.
Permanent skills on the other hand are skills that are relevant during the industrial revolution, and will also be relevant in the years to come. These skills are harder to define and quantify. We usually call these soft-skills.
The author of the above blog post mentioned several examples of permanent skills. I wanted to add one which I thought would be great to be on the list.
Focusing on Impact
Oftentimes at work, we get presented with multiple tasks that all (hopefully) promotes a business impact to the organisations we work in. Being able to determine which of those tasks is most worthy of our time and effort is a very important skill to have. I think this is true for any industry, and I that doing this maximizes our time, and would often maximise our learning opportunities as well.
26 Jul 2020
One of the things I learned while taking the Software Product Management Specialization offered by Coursera, was on the topic of what makes great software products great. One of the key points discussed repeatedly is that: A great software product is one that has the right product, done right and managed right.
The right product
The right product answers a specific need (or want) from a customer. It addresses pain points that could be alleviated with the help of technology. As a tech-enthusiast, many times I’m attracted to the shiniest technologies, and implementing tools/systems on top of those technologies/platforns. This does not make the product I make ‘right’ in the sense that it does not necessarily solve a customer’s need. In product development, we always have to keep our end-users in mind, and how the product we build can bring a net-positive in their lives.
Done right
A lot of start-ups with promising products fail because of execution. I personally have experienced this first-hand in one of the start-ups I’ve been with in my career. It’s not enough to have that brilliant idea, the process is vital to success as well. This leads us to the third point…
Managed right
In order to execute effectively, the product should be managed correctly. Planning, team coordination, and effective leadership are key points in managing a software product correctly.
The courses in the specialization are sized just right, not too big to take most of your time, and not too small to be trivial. I appreciate the different peer-reviewed assignments as well, which really gives the learner some practical skills to apply what they learn. Learned so many things in this specialization, and if you’re a developer who wants to expand knowledge in product managent, then the course is definitely a good start.
18 Jul 2020
Today, wanted to explore some GCP tools out of interest. As we use mostly AWS solutions at work, I never really had the chance to test out Google’s offerings. I found this random course in Coursera: Building Scalable Java Microservices with Spring Boot and Spring Cloud.
What’s nice about this course is that the laboratory exercises are prepared by Qwiklabs and that the student is actually presented with a real hands-on GCP environment to play around with. I managed to go through all the labs in one day, while watching Hamilton movie and waiting for the GCP resources to finish loading. I wanted to highlight the things I liked and disliked about the course in this post.
Pros
- Covers a lot of ground for a short amount of time.
- Laboratories are very effective in making you familiar of the GCP console.
- Really easy to follow the laboratories. It’s practically copy-pasting stuff from guide to code.
Cons
- Some topics were too shallow, and that no links to further readings or entries were given.
- Kubernetes and Prometheus topics felt a bit rushed. Lacked discussions to drive points accross.
- A lot of waiting to load all of the resources when starting up a lab. For example, the base code used for the labs are generated in g3 when you start the exercise. This takes 5-10 minutes while waiting for the bucket to be built. I feel that having it hosted in Github might have been better for time-sensitive students.
Overall, it was a positive experience. I learned a lot about GCP, and it gave me more confidence to be able to deploy stuff in that platform when the time comes. There’s also a bonus certificate!
14 Jul 2020
Yesterday (2020/07/13), Github had a 5-hour-ish outage. Naturally, this caused a lot of frustrations for developers using the platform. I noticed the problem when certain changes I pushed to my Github branch was missing. Frustrating refreshes did not do the trick. This was important as our pipelines are programmed to create the artifacts, and release them to our staging environment. Otherwise, we’d have to do it manually, which was a pain.
Decided to wait it out, and see if Github recovers in several hours while working on other stuff. When Github recovered after 5-hours or so, I saw that my pushes were not reflected at all! So I wanted to bump my remote branch, just to trigger the pipeline. Saw this command from the interwebs:
> git commit --allow-empty -m "empty commit to trigger pipeline"
Just what I needed! No more modifying the README just to add arbitrary spaces!