Redesigning Showtimes.my

Redesigning Showtimes.my

We have built quite a few apps over the years at Flexnode and Showtimes.my is one our favourites. It is also quite popular with around 200k hits monthly. Unfortunately, the 5 year old app broke and stop working recently, so John and I decided it is about time to rebuild it.

Since we are rebuilding the app, it is the perfect time to do some work on the dated design. Having used the app for years, we are quite familiar with the shortcomings. In this post, I'm going to walk you through some of our initial thought process we had when building the original app and what we are changing in the redesign.

The problem with problems

As a software engineer or developer, our main job is to solve problems. The solution may come in many forms like automation or abstraction but ultimately we are writing code, designing architectures and engineering solutions to solve problems.

Either because of our formal training or the engineering culture, we put too much emphasis on how we solve a problem than the problem itself. We are all on this quest to seek and ultimately build the holy grail solution. The solution that would end all problems.

Naturally, it is more exciting to talk about the solution of the problem rather than the problem itself. After all, we usually have more control over the solution compared to the problem. But in order to come up with a solution that works well, it is crucial for us to first understand what exactly we are trying to solve.

The first step towards solving a problem is not applying, designing or building solutions but to gather as much information you can about the problem. Only after you have a clear understanding of what you are trying to solve can you come up with a solution that works well.

The problem with problems is not the difficulty in solving them but rather the lack of understanding and clarity on what is it that we are trying to solve. If you can’t seem to wrap your head around the problem space, try asking some of these questions.

  1. Who are the stakeholders?
  2. Who is affected by this problem directly?
  3. What is the temporary measure for now if there’s any?
  4. How critical is the problem?
  5. How soon is the solution required?
  6. What are the edge cases of the problem?
  7. Is there any hidden requirements for the solution?
  8. If yes, can we drop some of them?
  9. If no, who can we talk to about those requirements?
  10. Is there a manual solution for this? 
  11. If yes, who’s doing it now?
  12. If no one is, should someone be doing it?

There’s a saying that the best line of code is the line not written. In this case, the best solution is the one not built. If you can render the problem obsolete simply by understanding it, you basically solved it without having to build anything. That is the real holy grail solution.

Timeboxing

This is a technique I learned over the years from project management gurus to manage time and boost productivity. Instead of letting a task or agenda take as long as it needs to be completed, you set a hard deadline or “time box” for it.

A simple example would be the time limit we have for our daily meetings where we time-boxed it to 10 minutes. This means the meeting can not last more than 10 minutes and if it does, we just end it right away. This is very useful to make sure we don't waste everyone’s time and get straight to the point.

The Pomodoro technique also employs this strategy by time-boxing your task into 25 minutes interval separated by short breaks. (e.g. 3-5 minutes) This teaches you to break tasks into small chunks that can be accomplished within each interval.

Timeboxing has been very useful in software development. The limit forces you to aim for some sort of deliverables when you approach the deadline. It prevents you from spending too much time on a particular task and affects the deliverability of others tasks in the pipeline. The notion of a sprint in Agile/Scrum is basically a timebox of 1-2 weeks.


Some examples of timeboxing we use when developing web applications.

  1. Keep meetings short by timeboxing them.

  2. Plan and schedule tasks that can be completed within a fixed time-frame (e.g. a sprint of 2 weeks)

  3. Prevent yourself from spending too much time on certain process. For example, timebox yourself to only spend X minutes updating status or writing reports.

This is not only useful for your work but also serves as a time management tool in your personal life. Start timeboxing your life and you may discover that you can get more things done.

Stop doing all the things

One of the biggest problem I had managing a team is delegating tasks to other team members. Working in a team of 2 for many years have conditioned us to do everything ourselves. Since we are building products and prototypes for startups, this meant we do everything from design, development to deployment.

But no matter how good we are at the job, there is no way we can tackle every single task ourselves. In order to do more, we had to have more people in our team and split the work. I have to admit that I was forced to delegate and it wasn’t easy.

Great things in business are never done by one person. They’re done by a team of people
— Steve Jobs

The first thing I had to understand was that in order to achieve more and have a bigger impact, delegating tasks to others is critical. This allows everyone to focus on parts they are good at and push the boundary of their work.

This also does not mean I’m losing control over the tasks and I have to trust the person I’m delegating to. Basically, I have to accept that things can be done differently and leverage unique skills of each individual. You can also take this opportunity to teach and mentor your team members.

At first, it may seem that things are moving slower than usual but have faith in your team members. Once your team gets the hang of it, productivity will increase and it will free you to focus on tasks that are important to you.


How to Delegate

  1. Start with small and simple tasks. This helps in getting yourself comfortable working with others.

  2. Make sure you pick the right person for the task and trust in their ability to complete it.

  3. Give clear instructions and a deadline for the task.

  4. Entrust them with the responsibility & authority and be there to defend and help them if required.
  5. Touch base with them regularly for progress updates and issues. You can do daily meetings with them.
  6. Give credit to their work publicly if possible.

If you feel your team is not as productive as they can be, the problem could be that the leader is not delegating tasks well enough. As a leader and entrepreneur, learning how to delegate tasks and responsibilities to others is one of the most important thing you can do. To do more, you have to stop doing all the things. 


Keeping in sync

Over the past year, our team have grown from 3 to 6 people. It is now much harder for me to keep track who's doing what and when. Couple with the fact that we are now handling more projects, things can get rather messy.

Luckily, we adopted the daily scrum meeting from Agile Development practices. It is also known as stand-up meeting or team huddle. It is a simple idea where the whole team get together everyday at the same time and place to update each other.


How to run a daily scrum meeting

  1. Same time, same place, everyday. Make this your team ritual.
  2. Keep things short. E.g. 1 min max per person.
  3. Decide who starts first. (Last to arrive, first to start or random)
  4. Each team members start by answering these 3 questions in order
    • What did I do yesterday?
    • What I am going to do today?
    • What is blocking me from completing my tasks?
  5. Deal with blocking issues AFTER the meeting

BENEFITS OF THE MEETING

 

Ritual to start the day

The meeting acts as a daily starting point for the team. Although we practice flexi-time at our company, we make it a point to get together everyday at 11AM for the meeting. This let us start the day with clarity and focus.

 

Focus

The 3 questions are designed to keep the focus on what's being done. It keeps you accountable to what you did yesterday and also forces you to plan your day. And if there's any thing that is blocking you, it can be rectified as soon as possible.

 

PROGRESS & STATUS

The meeting also serves as an efficient way to convey progress and status between team members. Everyone will have a rough idea what others are working on and can also offer to help on blocking issues after the meeting.


If you manage a team but have problems tracking progress and keeping things in sync, do try this out. Get the whole team to agree on a time and place to meet daily. Get each of them to answer the 3 questions and most importantly, keep it short.


Photo credit: Ignacio Palomo Duarte

An Unexpected Journey

This is an email written for my team to remind them of the principles that got us this far.

As we enter the year with new hope, determination and soon a brand new office together with probably the most awesome 6-man team ever assembled in KK, it might be the right time to recount how all this began. 

In a time not that long ago, in exactly the same place where we are working now, John and I were just 2 developers trying to build MVP for startups in the most agile way we know how. Once in a while, we would enlist help from Isaac the mercenary, especially when it comes to dealing with server related skirmishes. 

Deep down inside, we always wanted to build our "own thing". That killer product that we hope one day would put us on the map and life would be good. So over the years, we built all kind of products on the side. Some of them were useful, some not so but none of them was the "one".

One of these however lead us to a chance, an encounter with Lord Wu and Emperor V. It turns out not only did they like the product, they liked us too. Sharing the same vision of the Empire, we decided to embark on this adventure together. 

Our first quest was to bring Omvana's meditation technology to the desktop. Now, we are on our second quest, building Elula - a platform that allegedly cures cancer if we do it right. We even did a side quest where we explore the wonders of content delivery with Overmind. 

And along the way, we enlisted more members into our team beginning with Isaac, then the poster boy Duane to dramatically lower our team's average age. And recently, we are lucky enough to have 2 veterans (Edham & Joshua) join our ranks to bolster our firepower. 

Even more amazing is that we are now completing the construction of our new home base. John have been busy making sure it is built and equipped properly. This is serious stuff as the Empire is sending us the "wings" to officiate the base. We are no longer a band of mercenary on a quest. We are now a team representing the Empire on a mission. A mission to push humanity forward. 

I didn't titled this writing "The Unexpected Journey" because I believe this isn't the only one we are going to have. I'm very certain there are going to be many more. In fact, I'm writing this to ensure that we will, as long as we remember these principles:


You are here to serve

It's not enough to be professional and good at what you do. We must have the heart to serve and delight everyone we work with. Treat every interaction with your team and colleagues like how you would treat your customer. The customer service department serves the customer. We serve the Empire as a whole. Everyone in the Empire is our customer. 

 

Communicate ocassionally and intentionally 

More communication can identify problems early and keep things moving more efficiently. This is why daily standup meetings are so important. It keeps the team in sync and let us identify and remove blocks early. However, don't fall into the trap of over-communicating. This applies especially to managers. Make sure every communication has a purpose and is intentional. The last thing you want is to bog everyone down with endless meetings and constant disruptions. 

 

Constantly adapt and improve 

Since we are expecting the unexpected, we should learn to embrace change. Take every opportunity to learn and improve from it. Obviously not all changes are good but no change isn't good either. Remember to be agile and do continuous innovation on your processes and yourself. 

 

Bring out the best in others

Too often we attribute successes and achievements to a hero figure. The truth is, it takes a team of like-minded individuals working together to achieve world-changing results. Remember that we are all in this together. Encourage and help each other to do the best work of their lives. You win when everyone in the team wins.


After all these years, John and I may not have built that ellusive killer product yet. But maybe the product we are after is this awesome team that we have right now. In that case, we got more than we bargained for. I can only begin to imagine the things we can do together as a team. 

Having said that, let us begin the year with these principles to lead us into greater adventures ahead. May we adapt to change, communicate effectively, be ever-ready to serve and push each other towards awesomeness. 

Happy 2015 everyone.  

Moving forward

To move forward, sometimes you need to slow down and make sure you are on the right track. A step in the right direction is worth more than a thousand on the wrong one.

To move forward, sometimes you need to take a step back and take a detour. Whenever you feel like you are stuck, move on to something else and come back to it later. New perspectives may offer new insights.

To move forward, sometimes you need to stop what you are doing and ask yourself if this is worth it. Don’t let the momentum of the situation carry you to a place you don’t want to be. Progress for the sake of progress is pointless.

Let’s all keep moving forward on the right path for real progress.

When to take a shortcut

In order to cope with our always-connected, attention-starved lifestyle, many of us rely on shortcuts for various aspects of our lives. We got so good at this that we have shortcuts for almost anything. Want to tie a tie in 5 seconds? No problem. Only got 2 seconds to fold a shirt, we got that covered too.

And we are not just creating shortcuts for physical tasks but also mental ones too. Armed with excellent pattern matching ability afforded by evolution, we rely more and more on our intuition and gut feeling to make decisions.

There is however a dark side to these snap decisions and judgments. We are so good at taking mental shortcuts that at times we may not be aware of it. In his book Blink, Malcolm Gladwell showed us how decisions made intuitively can be biased and misguided. Shortcuts may lead us astray.

Another problem with shortcuts is false proxies. Shortcut involves taking a shorter route to reach our goal. But there are times that we can’t directly measure our progress towards our goal, so we use a proxy instead. The most common false proxy for success is money. So, a shortcut to success may involve getting rich quickly but it may not lead to the paradise we seek.

Shortcuts are great though. They give us more time, which is arguably our most important resource. It’s okay to use a cheat code at times like to skip parts of a game or exploit the situation to get ahead so long we are not doing it at someone’s else expense.

But don’t get too obsessed over shortcuts. There are times where you have to resist the temptation to take the easy way out. After all, the most valuable things in life comes from the time and effort we put into it.

Our lives should not be about seeking the best shortcuts. Shortcuts themselves aren't the goal in the first place. It just gives us more valuable time to spend living the life we want. As they say, it’s the journey not the destination that matters. Shortcuts aren't the destination but merely a tool to get there. And there are some journeys you wouldn't want to skip.

Thoughts about learning

Note: This article was originally written on Medium. If you don't know what is Medium, read this piece

Every time I hear someone says “Learning is a lifelong process”, I think to myself, isn't that obvious? Then I realized it depends on what you define as learning.

To many, learning happens when you go to school, college, university or anywhere you are taught. The common route is that you spend 2 decades of your life learning from these institutions and if you do well, you graduate and earn a piece of paper that proves it.

Learning is NOT what you do at a particular place

The first problem with this model is as if learning can only happen at a certain venue. So what happens when you leave those places? Do you stop learning?

Of course, the environment is important to encourage learning but you can learn anywhere at anytime. The environment only affects how well you learn, not whether you learn or not.

Learning is NOT being taught

I don’t believe that in order to learn something, you have to be taught. A teacher can teach very well but that doesn't mean the students are learning.

When the student is ready, the teacher will appear - Buddhist Proverb

You can learn from anyone, from anything, at anytime and in anyway you like.The decision to learn does not rely on the availability of someone or something to teach you. It is simply whether or not you want to learn.

Learning is NOT a means to an end

You learn to gain understanding and knowledge. And with these new insights, you can then use it to learn things that are more advanced.

Everything that you have learned serves as a foundation for future learning. That’s why we go from primary school to high school then to college, university and beyond. The goal of learning is to be able to learn more.

Learning is a choice

It is your choice to learn from the experience you went through or from the mistakes you did. The opportunity to learn is always there. It is up to you to choose if you want to take up the challenge or ignore it.

With the Internet, you can learn about anything at your own pace. You even get to decide on your own syllabus. Get on Khan Academy to learn about differential equations or how to code in Ruby at Codecademy. Learning is an option available to everyone.

Learning is living

To live is to learn. We begin our lives by first learning how to breathe on our own. Then we learn to walk, to read, to count, to love and to stand up after a fall.

Learning is so entwined with our lives that it is part of being alive. To stop learning is like saying you want to stop breathing.Learning can happen anywhere as long as you allow it. You can learn from anyone or anything and everything you learn leads you to a path of more learning.

Learning isn't just a lifelong process. It is the process of life itself. Life becomes far more meaningful and fulfilling when you never stop learning.

Getting it done

As the saying goes, if you want something done, do it yourself. This is true especially when you are working solo. Who else is going to do it? The best person to rely on is yourself.

But this also applies in a team setting where it is always better to do it yourself first. Everyone in the team has their own responsibility and you should hold up your end of the bargain.

Of course, it is okay to seek assistance. That is why we work in teams. We need the strength of others to overcome ever greater challenges. We should never be afraid to ask for help. It is not a sign of weakness but a sign of humility.

It might seem paradoxical to be self-reliance and seek assistance of others at the same time. The first lesson is to realize that you need to do your very best if you want something done well. The other is to admit that you can't do everything yourself and it's okay to get some help in achieving your goals.