All those who work in large firms will notice that their companies have some sort of knowledge management department. In end this department generally maintains wikis, provides guidelines, holds occasional seminar and so on. Whenever we spend long time in a profession we are expected to achieve a bit of mastery over it. We are expected to have solved the most common problems in that area and since we already know those solutions our value as a professional increases.
The knowledge management department of these companies manages this aspect of the whole organizations. People come and go but the expertise as an organization must not be lost.
But how exactly does an individual manage his own expertise? I worked on RoR three years back and since then RoR has changed so drastically. I haven’t kept pace with it and hence I lost a few freelancing opportunities.
I realized that each time I do a project I waste a lot of time doing the same thing I did for the previous project. For example writing a database abstraction layer. I end up writing validation code for DoB, username/password so many times. This is certainly a bad way of doing things.
Two books that changed the way I work.
1. Pragmatic Programmer
2. Personal Software Process (PSP)
My Swiss Army Knife
With first book I got introduced to the idea of building capacity as a programmer. One of the idea was to have my own Swiss army knife of programming. Just the way carpenter has his own set of tools he is comfortable with a programmer too should have his own. We often end up using different tools each time. Just because there is some new tool out there it is not necessary that we adopt it immediately. We should use what works for us.
We should be clear about these tools. They should always be with us and we should know in and out of each of these tools. What works best for me is
1. XAMPP the collections of entire LAMP stack.
2. Notepad++ The Editor.
3. phpMyAdmin for Mysql management. I also use the console in rare cases. I have received a lot of criticism from many for using phpMyAdmin but I dont pay heed. I use what works for me the best.
4. Firebug and Jmeter for debugging and load testing.
5. GIMP for image editing.
But these all are eventually off-the-shelf products. I should have some special power that will separate me from the rest and I have built it.
1. A generic PHP framework. This has improved slowly with time and with each project. Now there are over several validation functions at my disposal. There is a decent configurable template engine. I dont have bother about “including” anything I have to just put the file in a specific folder and it gets included automatically. There are standard JSON manupulation libraries and so on.
2. Standard Templates for project proposals. Whenever I send a proposal for a project I dont open a new document in word but I open a template. It has my brief resume with references to work I have done it past.
4. Meta-Programs. I have written scripts that generate code for me. A new table added to the database? Just provide the table name and my script generates a DAO class for it. This code-about-the-code thing has exponential effect on productivity.
To each his own. I have chosen tools with which I am at my productive best. There are things in pipeline.
1. Bug and changed requirement management system. I get pissed with this aspect of project and till now I have been using word documents to track this stuff which I feel is not the best way to do it.
Several developers hate this word. So did I. But now I love this word. Process is very important. Process is nothing but discipline. The best process is the one that is the thinnest process with least amount of restrictions on individual.
I use PSP for all my work. It involves preparing weekly budget for each task at hand. It involves preparing a detailed time log of what I do every day. For example whenever I attend a lecture I write in my “Engineering Notebook” at what time it started and what time it ended. Whenever I have a meeting with my guide I write the start time and end time along with each point discussed.
So do when I am programming. I write how much time I spent and how many lines of code /use cases I completed. At the end of the week I compare budgeted v/s actual. This exercise appears to be too much to start with but in the end it becomes part of your daily routine.
I was surprised to see that I spend not more than 180 minutes in productive work each day and like every other student in IIT I am complaining that I don’t have enough time at my disposal.
I read 50 pages an hour of ordinary books where as half as much if it is a textbook. I can concentrate for around an hour at the most doing any task. After that I need a break else my productivity gets hampered.
When I realized that I am not spending more than 180 minutes a day doing useful stuff I was alarmed. I bought more books to read. I planned for minimum 300 minutes a day target and I am improving day by day.
Where is the benefit of doing all this? How can I be sure that these things are actually helping me out.
I use the most practical yardsticks to measure this. How much am I earning each month? Today I am earning just as much as I earned while I was at persistent. Each week I have completed some concrete task about which I can talk to my friends. I am not staying up very late to do my assignments. We go to KFC twice a week.
Moral of the story
To be a little more successful in life you have to add a little more to your efforts. Where to add it is one very crucial question one must answer. Is it really worth going that little extra distance? I think these questions can be answered well only if we discipline our thinking and if we start behaving in a way that is predictive for our-self.
We should build our own swiss army knife and put it to test every now and then. Later we can add more utilities to it and get rid of some.