A Lengthy Reboot

By Richard Hsu
Latest | Archives | Contact | Others

4 Things That Could Make You a Super Worker

If you like your job, stick with it. the next job that you think you will like more, probably will suck and you'll end up regretting and working hard every sec, every hour, every day without really being productive.

My job currently involves sending out mortgage docs. Sometimes there are a lot of docs to send out, sometimes there are very few and you have free time. But most of the days I get just about enough work to keep me busy for the whole day. When I get a lot of docs to send, I typically start applying optimisations to the way I work. Ok, I am not about to discuss the patented techniques I use but suffice it to say that batching things, doing top priority things first, putting my eggs in many baskets and looking ahead do help me finish things on time.

Lets talk about each of them in more detail:- a)  Batching things: Instead of going through my normal step 1, step 2, step 3 with each doc, I avoid step 1 and step 3 and only do step 2 for every doc. I postpone step 1 till a few days later while I do step 3 for all the docs together at the end of day. This helps speed up the process a lot because I reduce the time needed by switching contexts.

Ok, you are falling asleep already. Don't fall a sleep yet. Let me try to explain my optimisations in a different way.

Since I can't talk about what I do at work, I will use an analogy to explain it. Say we are in a Chinese restaurant and my job is to do doing take-outs or what in India we would call parcels/packing.

So the process goes like this: 1) a customer is hungry and comes in to order food. 2) the cashier takes the order and money. 3) since the order is taken with a carbon paper, there are two copies of it. 4) one copy goes into the kitchen for the chef to cook and prepare the meal. 5) the second order comes to me.  my job is to pack the food, include the napkins [also known as tissue/serviets/cleenex here], paper plates and plastic disposable spoon & forks [if requested], put in the complementary packets of chilli & soya sauce and ONLY a single packet of the [top secret] chilli vinegar.

At this point, while the chef is also batching things up inside [ie. trying to cook all similar items together] we will take a look at what different methods I can apply in order to handle multiple orders in an efficient way.

So, if we only had a single order at a time, life would be easier and simpler. All I would do is wait for the kitchen to give the individual boxes/containers and I would keep checking with my order list. Once everything in the order list was in, I would stack them up and put them in a plastic carry bag. Then put in the sauce, plastic cutlery etc and tie a neat knot and hand it over to the customer.

But life is never that simple or single threaded [geeky term] so instead of single order at a time, we get many orders at a time and instead of the kitchen processing one order at a time, they give things randomly [the degree of randomness depends on the no. of cooks that is inside the kitchen]. The kitchen will not bring everything out at the same time, they will put things out as they are done.

Ah, you see, now we need a strategy and rethink our process a little bit. We can't apply the same 1,2,3 now. So first, we make sure that we have all the order slips in ascending chronological order. Earlier orders are on top and later ones below it. Thats prioritising for you. Doing the most important things first.It is less likely that the person who just placed an order will start question when it will come out [although you will meet with fools like these as well]. But if someone ordered a food 20 mins back, he will get bored standing there [and seeing other people get their food] and ask about his order.

Now that we have the list in order, we could just pick the top of the list and wait for the items to come out from the kitchen. Say the order list reads as follows :-

1 Chilli Chicken [with gravy] 1 Mix Fried Rice [Pork included]

Now, given this order, we are expecting a tin container with chilli chicken and a box of friend rice. One may come out before the other, its not a problem. But what we find is one of the following:-

a) chilli chicken [you wish] b) 2 chilli chicken c) 5 chilli chicken d) chilli chicken [dry, no gravy and the small note saying that this one is without garlic or onions as per order!!] e) to z) many other possibilities exists which only very imaginative people can figure out or better from real life experience.

Now what do we do ? take the ones we need for this order and keep the others for later guessing that the other orders after this will need it. This will work, except that the next order may just be for only 1 chilli chicken and yet, that person would have to wait for the first order's friend rice to come out before he gets his chilli chicken. Imagine, that the rice is not cooked yet, so the fried rice will take some time and all this while, even though we may have complete items for other orders, we hold it back because we are working only one order at a time. So don't put all your eggs in one basket. Don't serialize things that you shouldn't serialize . Think multithreads [geeky again..]. What we do is work on multiple orders at the same time, we lay out as many order lists on the table as space will permit. The earliest order will be on the right and later ones to the left of it [the right side being closer to the kitchen].

Ok, so now when we get if we get something from the kitchen, we start matching them to the orders starting with the right most [earliest] order and moving to the left till we find it being listed in one of the orders. When we find a match, we place it near the list in such a way that we tell that the item is for this list.

This way, first things get done first but it doesn't block the less important things from being done. Given that the kitchen will cook things according to their convenience, we will finish packing more orders this way than the simple way.

Still reading ? good. because we are almost to the end of the story. Just a little more and we are done for today.

The last important technique that helps me is look-ahead. Coming back to packing food, if we just layout the order lists and wait, we would suddenly start scrambling when the first or first few items start coming out of the kitchen.

Why ? because if the orders have many items and there are many orders and the kitchen throws out like 10 things at time all of which is not necessarily for the same order, it would be quite difficult to match things to the orders. You can go items-wise or the order-wise. You can pick one item and look at the order list top to bottom, then next order list top to bottom. Or you can pick the first item in the first order list and look at the items that just came out of the kitchen.

Say there are two orders:- 1st Order - 1 chilli chicken - 1 mix fried rice

2nd Order - 1 Kung Pao chicken

and the kitchen gives you Kung Pao chicken and mix friend rice together. Then you can either pick one chilli chicken and start looking at the 1st order top down or you can look at the first item in the 1st order and see if is there in the cooked items or not.

I know this one is easy because you have only 2 items in 2 lists and the cooked items are 2 but when you have like 30 items in 15 different orders and the kitchen sends out 7 things at a time, the simple matching approaches discussed above, although correct, will be very slow. So, what to do ?

Anticipate. Read the first few orders into you head and remember it. While you are finishing an order and reaching out for the sauce packets and spoons etc., start looking at the next order. Because you are an expert and you can do all this without looking, you should have your eyes reading the next order that is not already in your mind forgetting the order you just completed. This way, you don't just stand and staring at the order to memorise it. These small time savings can total to a huge difference in delivery time and its a proven thing. Believe me.

To summarise, I have recently learnt to prioritise, do more than one thing at a time and anticipate which has resulted in me finishing my work faster. Today is one of the rare days when I have not much work to do and so I share this secret with you :-) In retrospect, if I had applied such secrets to my past 4 years in software development, I would, perhaps, be in a totally different place today.