Showing posts with label effectivity. Show all posts
Showing posts with label effectivity. Show all posts

Tuesday, February 12, 2008

Budget Time with Time Block

How do we materialize our priority in our daily life? in the case of money people make budgets, in the case of time I think make routine time blocks would do it.

When we spend without budget and bookkeeping we usually end up wondering where the hell those money gone.Similarly, without allocating exclusive time to do something routinely I don't think we can feel sure we have already "walk our talk". When I say coding should occupy 80 percent of programmers time, then I would need to prepare an 80 percent of my working time to do just that with as minimum fragmentation as possible. For other responsibility I would then need to allocate another block to do them in batch thus minimize the overhead of context switching.

Here's an example of the time blocks :

  • 9:00 - 12:00. Code : the most critical tasks
  • 13:00 - 15:00 Code 2 : more explorative ones or continuing stuff from block 1
  • 15:00 - 17:00 Mails and anything else
It's like creating a program for Television. If you're a News Channel, you probably have large blocks allocated for live news, certain amount for some documentary and a little bit for anything else. If you are a Software QA staff you should spend most of your working time crashing the system all the time and left almost none to anything else (definitely not even a second for befriending the poor developer :) ).

This requires that our tasks be pooled into certain system based on the block/context e.g: GTD, so when we are in certain block we pick a task only from that pool. Anything come our way when we are in certain block should be pooled into this system to be done later on it's block comes.

Of course, like diet, this would require someone to be committed to it if he want to see some difference. But unlike diet, people won't get fat if they cross the line, at least not directly (you know : missed deadline -> stressed -> eat a lot -> gain more weight). However, if you commit in doing it other people will start to pickup your rythm and will adapt to it and it will make things easier by time.

Allocate exclusive time block should be natural if someone is sure about what he think is important. It won't always means easy but the gain is worth it : steady progress in the area that is important can become something more common and not something that come by occasionally.

Wednesday, January 23, 2008

Track Internet Searching using Freemind

I've mentioned in the previous post that I used Mindmapping application to track my internet search in realtime. The reason is that the search can go out of hand if not tracked like this. We could end up spending hours looking at anything that caught our attention on the search result that is not too relevant to our current task.

Here's how, more or less, my "control center" looks like when I do a research-heavy task :





You've probably guessed the convention already : red for active item, green for done, small gray on notes.

I think the next step for after having a taste of how the searching in internet done and what it can gives us, is to use it with some kind of heuristic and a little discipline. This is just my current way of doing it and I find it quite useful to help focus on getting things done.

Thursday, January 17, 2008

Separate Collecting and Action Phase in Searching

One useful idea in GTD is to separate collection and followup/action step. It helps us to not caught up in reactive mode and loose sense of direction. I find this idea really useful when I do searching on the internet. It is even more critical in this matter since there are tons of things that could get you off-balance and distracted while searching things on the net.

First thing to do is to have map and tracking tools of what you need to do. It can be just your mind, but it's better to have helper tools like Text Editor or Minmapping application. Be clear on what you want and put an entry on each query you requested and track what you get from each. Jotting down the query you pass and track the result of each can be a useful trick to incrementally refine your search. The next is to do it in two separate steps : collection and action.

In collection step I only skim each of the links or page and drag them to to bookmark and/or scrapbook (see my post on setup firefox for this purpose). Along the way, when I find any unrelated but seems interesting I just drag them to tmp folder to followup sometime later when there's more free time. Then, when I think I have enough interesting things and the search result seems exhausted I continue with action step i.e: follow them up one by one in a more relax and more concentration on each.

I don't always do it in a clear separation or perfectly like the above, there's occasional time I just follow along with the chain of links. However, having mentally separate the process helps to get more of the links i.e: prioritize which to followup and avoid to get distracted. If we just get along, we might already exhausted and our mind distracted when we unconsciously missed a worthy one or don't have energy to followup anymore links ahead which could have a good info.

Internet is such a big source of distraction if you are not careful. But it will be a dependable servant when you have clear focus on what you want and structure and discipline in handling what it gives back to you. Of course, it's fun to surf for leisure but it's better not to do it at the time you intended to have something done.

Thursday, January 10, 2008

Save Time by Being Clear

People debated over believes, religion, OS, text editor. Many times it's fun but a lot of them unnecessary. We could actually simplify things by being really clear on what we need and expect.

We could end up with debates and confusion when we are not really have one specific things in mind ourselves. We prolong problems by searching in in elegance side while we are really prioritizing functionality, picky about the price while our constraint is really about time, worry about perfection while anything good enough is more than enough to get us going. We stumble upon a fight over people regarding ideology in the process of searching very simple practical things.

We could simplify more by being really clear too about what the other people intention and perspective. We rarely have to be in defensive position when we realize clearly where the other people stand, if at all. People usually have a good point if we know what perspective they use and the background they have.

When we end up trying something we could also save time when we are clear what to use it for. For example, we don't bother checking out the internals of the lib if the part that we use it works perfectly well for our purpose. We only need those part functional and don't care about the rest.

So, be it religion, methodology, tools, libraries, framework. Being clear is a good filters and heuristic to get things that works for us. We'll also save more time that we could use to extract values on whatever we finally choose.

As a final note: sometime just trying things save hours of debating, it also sometimes give us valuable insights that won't come out just by debating, wondering or worrying.

Friday, January 04, 2008

One Change at a Time, One Queue All the Time

New year, new resolution, changes.

No matter how much I want and inspired to change in certain time e.g: after reading inspiring books, either in specific field like improving coding technique or life in general I can't seem to do it like I want it i.e: one big and lots of changes ASAP.

It seems that when I find out something new and interesting my mind goes "this is so true and now that I know this, there's no way I could do the other way, the change will be natural, tomorrow I'll be a different person for certain". We all know where that story will go.

So far, I conclude that people can only change one tiny little bit at a time and no more. It is true we can have insightful moments or dramatic shock but the most it can do is to change our perspective and how we see things. After them, the next step is to embrace the current reality first and not to jump in picking and throwing some part of our life to be build something brand new on top of it.

I think little thing is big, and big things is little in this case. I look at tiny step, done with care and a lot of of awareness, as a tip of the iceberg where a lot of complex things going on underneath it. In personal level,a tiny change could include changing a lot of assumptions, mental block, facing discomfort. In organizational level, a tiny change is the tip of the iceberg of change in workflow, resource management, office layout. Big change in this case could mean thin effect since the unrealistic feel of it would make the rest of your self/system/organization could only interested only in skim it, get pass the checklist, get through it ASAP.

So, what do we do with all the interesting coming our way so we can follow it up in tiny steps? I think it is best to queue ideas to followup on dedicated list and only pick several item from it to followup at one evaluable time. In short : separate collection from followup. For programmer, it's easy to relate this with issue tracker/bug tracker application. Without them, it's hard to have real and satisfying progress since you will operate always in urgency mode and trashing would most likely occur.

We end up with two things here : do things only a handful we could handle with a lot of care and use queue to put things coming your way. The third would be : fight the temptation to deal with things as it comes, you are in no condition to make the best judgement for it's followup (it's kinda like when you deal with classic sales trick that put you in urgent condition with something like short-term discount or "the price will increase next month" ).

Monday, December 03, 2007

Maintaining Sense of Mission

There's a large difference when we do things with a sense of mission. It gives an exhilarating sensation that put what you do in a context. It generate a very different level of focus and suddenly we'll have a very different way of deciding what to do first, what to discard, what should be set aside for later. A decision is happening in a much more instant way than what we commonly do. Insights seems to flow easily.

It's a tricky thing to do though. It seems human has a tendency to forget their mission :). This will result in "drifting" mode where things go slowly, inefficient, low productivity (if not contra-productive).

What makes this sense strong and what make it weak?. I think it's a hard question to answer, It could be a leadership, an urgency, honor and many other things. But despite all the ideology side, on the practical side it could be this : the longer the feedback cycle the weaker the sense of mission will become. Put a person in a never ending task and he'll probably goes numb, then add the task with more impossible tasks, he'll probably strangle himself to death :). What we need to do to strengthen this is then to shorten the feedback cycle to keep the fire up.

Shortening feedback cycle takes a lots of forms, for example in XP there are practices like standup meeting, iteration, TDD. The baseline is to connect what we do with a larger picture in a regular basis, regular enough (and discipline enough) to avoid us from drifting away. If we feel drifted, it's a sign there's a feedback loop need fixing.

When a person team loose direction what needs to be done in short time is to place achievable milestones. When coding loose direction, pick the shortest working condition and get that way, if it's not possible, just rewrite small piece or do whatever things that you could that actually able to make something run.

Sense of mission takes what we do to a different level of effectivity. It's like shifting gears in our action or on the team action. Shortening feedback cycle could help us maintain it while let things drifted away would drag us away with it.

Sunday, December 02, 2007

Code as Personal Reflection of It's Writer

When you already have looked at large amount and variety of codes you'll see code as having some kind of personal style on it. You'll start looking at codes saying words like : organized, confusing, pretty, elegant, dirty. So, how come this thing that we commonly perceived as a very technical thing has a very "human" property?.

Code is actually a means of communication. It's the chip that is "technical", but how it is organized and programmed is actually human activity with a large amount of communication goal in it (In a way, even a chip is not just technicalities if we look that it a product of design by human). It is then not a surprise we could find a trace of our human-side in it.

Code is a way we tell ourselves and other people how we perceived pieces of building blocks formed as a coherent, interrelated whole. We describe in it how we think certain pieces is logical to be organized in one group, how we divide some part into more several independent part, how one pieces is should be extracted into one entity (after we find it's redundancy). We pick the best representation and structure that we think will describe the best of the system how it should work step by step, function by function.

Pay attention to the word on the paragraph above. Organizing, Perceiving, Describing, Coherence is words that has connection to who we are as a person. As an addition to our knowledge of programming language and libraries, we organize things based on our personal preferences and skill in organizing things in general. The way we label things and do abstraction in life plays an important role in determining choices in we decided to use in our code.

What makes this even more important in coding is because coding is relatively complex and this makes our skills and behavior even come out in it's relative more reflex/unconscious form that it's usually come out. We only realize it when things already got to it's final state "Wow, this looks like a mess!", "This code end up looks really nice and easy to read." What we are inside is somehow reflected to what we do.

What I take from this personally is : Coding is related to other parts of our life. Good programmer is not the one who just read programming language books everyday for the whole year. We could benefit a lot too from variety of sources not directly related to programming. Books about graphic design, a movie, an art, music, spirituality, news, business, statistics, comics, social event, parenting is as valuable and important sources as any other more direct materials.

Other interesting observation that I notice recently is that with practice of Shared Code and Pair Programming the code that emerge is kinda like something that come up when we make an art together or writing document/article with someone else. It looks like a blend of each contributor but in a more interesting way, call it synergistic if you like.

Realizing that code is not just done by our programmer side could open our eyes to rooms of improvement that we probably would not see otherwise. I find that it would makes the work less boring and stressing too since when we find that we can use our whole self to a problem we have a much wider resources to use and a more dependable consolation to fall back into when there's tr0uble.

Tuesday, November 27, 2007

Greatness and a Whole Person Model

One lesson I find interesting from Covey's "8th Habit" is that Greatness is actually quite simple and not that special. Greatness could be viewed as living by paying attention to our whole self. Being great means being a "normal", Whole Person human being. What I mean normal is in the sense that it is perfectly normal for us to fulfill our needs for our spiritual side, mental, social, physical and the rest of our self.

When you deny someone from fulfilling his greatness is like denying someone to eat and breath. When you deny yourself to be great it is like willingly choose to be 40 % human. Allowing ourselves to be less than great means we allow some part of our self to suffer, lack of nutrition and fulfillment.

However, in this model, Greatness has nothing to do with relative achievement/ownership. It has more to do with knowing yourself and knowing how to care and fulfill every side of it (including those nagging inner voice that we are trained/conditioned to ignore). It is self-defined. Other people condition/opinion then become the context in which you express yourself rather than a standard into which you judge/value yourself.

Greatness definition will vary a lot in it's detail, but it seems quite accurate to see it as a result coming from fulfillment of our whole self.

Sunday, November 18, 2007

Acceptance

One important trait to have in life is acceptance. A problem is only solvable when we accept them while denying, ignore it or pretending it does not exist will only make it persist and expand.

Acceptance does not mean giving up to situation, it means taking up problem and fact as it is without mentally labelling it with judgements or connect it with our sense of self-worth. We accept the situation but we are taking control of our own goal and how to put what currently happen in the context of our choices (remember the classical half-full/half-empty glass :) ).

The situation, any situation, can only be accepted, doing anything more than that is a big waste of time. We should give it 0% mental energy and allocate more instead to defining next action. We need to differentiate between the natural emotional alarm i.e: disappointment, anger, upset, with the self-triggered creative dramatizing. The alarm is good, the wrong use of creative energy is bad.

Sometime ago, I happen to accidentally watch a children show (Blue's Clues if you're wondering) that currently has a theme about dealing with confusing situation. The show kinda meant to install a different mind-workflow on the children when they typically face new/confusing/upsetting situation. In the scene where the confusion happen the show-guy would interrupt and say this instruction which he repeated many times at the show :

  • Calm down
  • Take a deep breath
  • Think
The grown-upversion could be something like :
  • Accept
  • Take a fresh perspective of the problem, see bigger picture
  • Refrefsh/update goal/plan, fefine action, subaction then act
The wrong way would be :
  • Deny
  • Continue with 50 % capacity of your mind since the other 50 % busy maintaining the illusion that the problem did not/should not exist or worrying in the background of what catastrophic consequences that would happen anytime
This is quite similar case with Honest vs. Lie situation. Lying takes an energy to maintain parallel thinking of several reality (real or madeup made no difference in tern of "cpu" usage) and how to switch between them depends on which one you consider the most effective in certain situation, really tiring. Being honest takes acceptance and probably some discomfort of updating our self-perception including our ego (which basically a form of perception too with more significant need of survival, thus harder to alter) but it will be smoother way after it compare to maintaining several different incompatible perception.

Acceptance is like altering architecture (in this case it means : how stuff relate in our mind) to fit better with our understanding with reality which the current architecture is no longer reflect it. Denial is like hacking the systeamt away to support new function/feature without caring if it will add duplication, performance, inconsistencies and reduce intuitiveness of the code.

For programmer :

Accepting that the code fail and crash sooner is better then wasting time first trying to blame the compiler, the language design, the documentation, other people's code. Say
"It does not work, how to fix this and how to avoid this in the future?"
instead of
"Aaarrrrgghh, It should work!!, we need to find something/someone to blame!"
Trust me, this will save a lot of time :).