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.


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



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.



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.



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.