Category Archives: Management

Keeping shape in high pressure


/* Vietnamese: Một vài cách để chống stress dành cho lập trình viên khi làm việc với cường độ cao */

In programming community, working under high pressure is often a “must have” ability. Here list some of my tips to maintain good conditions in those situation:

Take some rest: Keep in mind that a weary brain do more harm than good things. Men are no machine. If you are trying to get a bug solved, things may turn out that you created even more bugs.Don’t take quick fix: a common situation is that before an important release, we are inclined to take hot-fix. A hard-code message, a magic number, which seems no harm at the moment, will cause you BIG trouble later.

Be assured, in those time, you are inclined to make errors more than anytime. Be careful even to the log message, or you will find yourself among lots of trash code later.

Sleep enough: easy to say, but hard to do. IT guys often feels good working at the night: the network is fast, no intervention… But I still think working too late is a bad idea. 8 hours a day is enough – if you want to maintain health.

Supply foods: Brainstorming requires much of energy, just like physical activities. This item even more important if you can’t guarantee the time of your sleeps. Prepare some snacks, noodles if you’re going to work overtime. You will not regret it.

Stay cool: Keeping a calm emotion is important. No matter how important a release is, it’s surely not the end of world. When I began working, I feels great pressure everytime a bug pop out near our deadline. But my seniors are different. They solve the problem step by step. And in the end, everything is just fine.

Every tool has its cost


For such a fairly long time I haven’t written anything. Not because I don’t have anything to write, but it’s hard to pull complex things out of my head. But now it seems to be time for a warm-up :)

One of my senior, Mr An, has a favorite sayings: “Until you don’t depends on tools, you are not truly a developer.”

Truthfully, I don’t think I have fully understand what he means. A developer with more than 10 years in this industry may have a different view to a young one like me. But to some extent, it seems to be a good idea.

For a certain amount of time I have tackled Maven, Spring Framework, Java Serverpage, Freemarker… I end up spending most of the time trying to fix bugs, caused not only by the framework, but also by mis-configuring Eclipse & its plugins. To be honest, it’s annoying

Actually, Eclipse is such a good tool: nearly everything you think that a good IDE should have, it exists in this free solution: refactoring, navigation, source-control-supported, Maven-tools… Such many functions integrated in a single program. Pretty handy, isn’t it?

But here a problem arise: when you have too much utilities, it will be hard to have a meaningful organization. It make me frustrated when right-click in Eclipse and have a 20-items context menu pop up. Still, navigating through that menu isn’t as hard as understand why and how to use the Eclipse view, explorer, hot key, configuring it to auto-compiling… Those are also the things you need to know to speed the work up. As far as I know, there’s no simple coherent way to do all the tasks.

The same semaphore also applies to any of our developer tools, no matter if it’s an IDE, framework, libraries… or even, methods. In my view, the best tool is a tool with few familiar functions, so that we can easily master and get the best results with minimal efforts. But the fact is that, as long as people want to stuff their tools out to fit everyone needs, that goal is hard to meet.

You must master a tool before you can make it work for you, so there’s a hidden cost. Imagine, if a tool doesn’t allow you work 2 times faster, do you spend 2 weeks to master it, just for use in a 1-month project?

Let’s choose and use tools wisely.

Thoughts when viewing “Studying method for University”

This blog post is the English translation of this post. Because the content gets rather lengthly, I decided to split it to two posts.

Last Sunday I had the opportunity to attend the finals of “effective learning methods” by the Cultural Organizations of Student. Though observing time was short, I feel very interesting with the creation of participating teams. From the professional journals-like reports, to intelligent and witty answers on stage, all showed that participants have a very strong grasp of their learning methods.

The competition wraps up with the winning of team “Dai Nang No”(Great Advance) from the Open University. The remaining teams also gained valuable lessons and lots of fun. However, when the game was over, I feel a little anxious. Student Culture House held the contest to stir the improvement of student learning. But is it really effective?

For a long time, the press has prompted many to complain that their new students are not guided, some was shocked transferring into the university environment. But I’m not sure that hundreds of students sat in the auditorium of the competition, how many percent can apply the methods presented today.

Why do I say that?

Frankly, the “learning method” itself is not the matters of saying and remembering. Learning method is not knowledge.

Knowledge is something static, unchanging, can be recorded on paper. Methods, by contrast, are dynamic knowledge. You can’t learn it by heart, you can write it to papers in case of forgetting. It’s the matter of practice.

Just like learning martial arts, no one can learn by reading or watch others perform. Learners themselves need to practice, so feel each move, each piece of the new technique can be applied. To study a “method”, a learner must apply it, experiment it, flip back & forth his/her problems. Then he can adjust the method to suit the circumstances and character style.

Let’s talk about the most simple: writing letters. 90% of the letters were written by hand, but Nguyen Ngoc Ky, and many other disabled people do by foot. On learning, some people learn best alone, others prefer learning in libraries. Each method has advantages and disadvantages, depending on who all practiced.

So the question here is: How to apply effectively new studying techniques?
In my opinion,  students should note the following when adopting a new method:

  1. The learning methods are merely tools, not a universal key. There’s no silver bullet.
  2. Set a Goal. It can be simple like: I will learn 1 hours at 6 am everyday for a week. Goal itself has the ability to create motivation. This can be considered as the most important thing, help the learner orientation “on track” to overcome obstacles in the learning process.
  3. Notice habits & personal characteristics. Habits form actions, actions form destiny. Choose and form your desired habits, it’s a great asset.
  4. Discipline, autonomy of learners. At begin, it’s hard. As soon as it become a habit, it’s easy. Learn to make your habit.
  5. Review and self-regulation: nothing can be perfect at first try. Do it again and again, improve minor things in every circulation. At last, things change :)
  6. Group learning: not a big deal. It’s great to learn new things from different people.

Learning from Japanese: Kanban for software engineering

This post is dedicated for Japanese and Sagisou, the flowers I love most. Hope for the recovery of Japan after the disaster 03/2011.

**Vienamese: Phương pháp Kanban là một trong những sáng tạo của ngành công nghiệp Nhật Bản. Phương pháp này được ứng dụng rất thành công trong hệ thống phân phối của Toyota, và dần trở nên phổ biến trên thế giới. Nói một cách ngắn gọn, Kanban là một tập hợp các nguyên tắc dẫn đến sự tối ưu hóa dần dần của tiến trình công việc, dựa trên việc kiểm soát số công việc tối đa tại một thời điểm của tiến trình.**

What is Kanban?

Kanban is one of the brilliant invention of Japanese industry. The method was first applied successfully in the famous parts-delivering system of Toyota, before it got recognized and became popular among the world. In short, Kanban is a set of principles which make the work process better day-by-day, based on the pull-system & the control of maximum work-in-progress at one time.

Kanban in software engineering world

In software-engineering, Kanban(signal-card in Japanese) is often visualized by the image of the card-board: a board of the processing-work. A “card” represents a work that need to be done, and there are many card to put on the “queue”, that’s the development process

To make things simple, we can think about a simple queue: units of work are input in one end, through many steps of the process, and the results yield from the other. But the pulling process must follow three main principles:

  1. At a time, there should be a limited amount of work in the system(restricted by maximum Work-in-progress, called WIP)
  2. If the max WIP is reached, the additional work must wait until one of the processing works complete. Then it can be pulled in the system to process. This fact make Kanban a pull system (the people take the tasks to process when they are ready), not a push system (the tasks are pushed in whether people are ready or not)
  3. The process and its policy must be visualized. This requirement is often be made  by a card-board.

If you need a Kanban-visualized story, there’s a very interesting one here: One day in the land of Kanban.

How effective is Kanban?

Kanban is merely a tool. It help visualizing the process, so that we can improve it. By controlling the WIP, the team identify the bottle neck, the characteristics of the work flow; therefore they can make appropriate regulations. It leads to Kaizen - continuous improvement, another philosophy of Japanese industry.

But wait, you are not here to read theory, right? Well, there’s some good reasons to apply Kanban. As a tool, Kanban fits in any kind of process: you may combine it with Scrum, or whatever process of your organization. In many situations, the effective-tuning mechanics of Kanban leads to Agile.

Putting aside lots of successful stories outside of software development, there are also several stories in our field right now. Most of them are positive, though. Pawel Brodzinski found it make his team improve unconsciously. Not working in a team? There’s Kanban for individual.

The summarization of Kanban principles [1]

  1. Limit Work-in-progress (WIP)
  2. Pull value through
  3. Make it visible (visual control)
  4. Increase throughput
  5. Fixed Kanban backlog
  6. Quality is embedded in

[1] Kanban for software engineering
[3] Convert a Scrum team to Kanban
[4] Lean software engineering
[5] Why Kanban
[6] Kanban 101

Zotero : A simple but useful organizing tool for documents

It’s kind of a little surprise to myself that I’m still able to be here and writing.

The first time I got my first computer, I have developed a bad habit: collecting hundreds of ebook that will never be read. Well, to me that’s not too big a problem. As time pass by, my “library” grows bigger and bigger, and the directory system no longer satisfies my needs. So I have done some research about how to organize documents.

Yeah, you may already heard about a bunch of document-organizing system. Some are tools to classify ebooks, file type conversion & collecting their information on the Internet, like Calibre. Some allows users taking note, organizing their notes by tags and category, then sharing with others (a brilliant example is Evernote). But there’s another kind of tool that people often forget, that’s the bookmarking system of every browser!

Zotero is somewhat the combination of all above things. It’s only an add-on for Firefox browser and the functions it provides, in my opinion, are not special. But its simplicity is the thing which matters:

Zotero - quick save web page

1. Quick save & take snapshot of any website you want: this things is quite good. If you are working on some kind of researching, very likely you must gather information little by little from arbitrary sources: blog posts, papers, articles… And even if you take the time to save the URL for reference, it’s a good chance that when you come back the resource doesn’t exist anymore. With this function, those problems disappear at ease (1).. Besides, you can take note with the saved documents and tagging them. Like a mini-evernote on your browser, right?

2. Share and browse the Zotero library:

Sharing to friends & the world

With a Zotero account, you can share yourdocuments with the remains of the world! Just joking, but you can do that. You can even browse the favorite documents of other Zotero users. Zotero Groups, which is formed by people that share common interests, or discipline. This maybe more useful than you can imagine: let say you have a group of friends, which are interested in photographing techniques. There are too many article on this field, good or bad, how can you tell? How can you have the time to read it all? Instead, you can browse the documents of friends who is master at photographing (or even they are not your friends); isn’t that better?

3. Sync among many computers: this maybe trivival, but to some it’s important. Like many people, I have 2 computers: one for home and one for work. This function helps me continue my research seamlessly, like a little Dropbox for documents.

Above are 3 main reason that I feels Zotero is useful. Up to now, the only thing that I complaint is some kind of javascript error when Firefox start. It’s trivial, though.

If you want to start with this great tool, you may want to take a look at here. This gives you some more details about what Zotero can provide.

(1) This is also exactly the things that Evernote Chrome/Firefox plugin provides. But to my experience, Zotero works just better and faster. Still, Zotero doesn’t require you to install a big app at client side to view the documents offline.