Thursday, August 19, 2010

Aspire to be agile missionary

In an evening of earlier this week, when I went out for a walk near my house, I met 2 young Christian missionaries. From their eyes, I can feel their passion and ideal. They want to help people, and enjoy seeing how they can make changes to them. They did that all for free, they have a mission to transfer what the God said to other people. I was totally impressed by their passion, although I don't believe in God.

I was inspired by these 2 young missionary: we might need missionaries in the software industry. I love to be a missionary if there is a similar group about software development which share a unique vision about software developing, like software craftsmanship for example.  I would love to share my knowledge and experience; I would love to transfer to other developer that what I believe the right thing, right principle; I love to pursue the way of software development, find the philosophy behind the principles. I love to do that for free, and I am sure I will enjoy what I am doing and seeing the changes I made.

What is the reason that I want to be agile missionary? During year 2002, at that time I had been a software engineer for about 10 years, I became confused about my career as software developer: should I continue my career as developer or change to a manager? Why programmer's job is so hard, so boring, so messy? It doesn't make sense! And in that year, occasionally I began to know about Agile movement, it totally changed my mindset of software developing. Agile is like philosophy: it tells you the right way beyond the detailed technology, computer language and tools. Since then I read lots of books from Kent beck, Martin Fowler, Uncle Bob, Dave Thomas ... etc. Since then I found the answer of my career path: continue my career as software developer, because there so many good stuff you need to know, there are lots of potentials for to improve yourself. Then I started learning Design patterns, doing refactoring, investigate new tools. Gradually I realized that I can feel the difference between me and my colleagues: not because of my experience, but because I have the deeper knowledge of agile and the right way of programming. I really love to share my experiences, because I learned a lot from agile. Before I just unconsciously shared my experiences and knowledge, from now I need to do that consciously and deliberately.

Being agile missionary is not easy. First, you need to keep improving your skills, then you can lead by example; second, you need passion and strong vision; third, you need to know some knowledge of psychology, because different person has different background and different mindset, you need to aware that and use different strategy; fourth, the communication skills is definitely important, you need to keep improving it.

I already set my goal: pursuing the right way of software of development, finding the true principles, strategy and philosophy, attain mastery. Right now I feel I just enter the gate to that road, there is till a long journey to go. I hope at this journey, when I work as a missionary by help other developers, I can improve myself and find other missionaries.

Sunday, August 8, 2010

Is it possible for a developer to become an artist?

I am still reading the book: Linchpin.  I am interested with the author's definition about art:
Art is a personal gift that changes the recipient. Art is something creative, passionate and personal, which can bring some change and make the difference.
The author expanded the  definition of art , it focuses on "making changes".This idea share the similar idea of software crafsmanship.

Where is the art in software developing?
The developer's daily job can be boring, repetitive instead of creative. For example:
you can just copy and paste from the old code; or just use google check some API usage;
You don't need to care the code quality, don't need to care about the maintainability.
you can also finsih the job. You can do like that everyday.
But this job is not art, you will not make the difference, any one with the similar knowledge can do it.
then your job are easily been replaced.

But the developer's job can be a kind of art if you choose to do in different way:
   there is the art of making simple design;
   there is the art of wrting clean code;
   there is the art of refactoring;
   there is the art of maintaining;
   there is the art of debugging;
   there is the art of communciation and interaction;

Anything which can make things better and make some difference is the art of programming.
if you bring your passion, and make some difference, then that is art;
if you do that day by day, keep improving yourself, then you will become a master, which is also an artist of software.

The road to become artist
I like the concept of Shu-Ha-Ri, it can be treated as a path from an average developer to a master developer:
    In Shu Level, the point is "following, copying", all you need to do is learning, so there is no art behaviour at this level;
  In Ha Level,  the key point is "detaching, breaking", you try to bring some change, bring what you learned into different context, you will have some art behavior in this stage;
  In Ri Level, the key point is "transcending", you becomes master, everything you do is from your intuition, you are freely to express your idea,which is the artists behaviour.

So I believe the truly artist is only existed in Ri level, which needs years of the deliberate practice, it should be an ultimate goal for any serious software developer. You will become master and artist at the same time.

Monday, August 2, 2010

Linchpin: to be or not to be?

Are you a cog or lincphin? Every employee has to answer this question.

In your team, you work hard, show up on time, folllow the order, try to fit in the team, compliance to your boss, always say "yes", finished what you've been told.If you are lucky, you might be given some bonus. But if you only just did that, then you are just an average developer, will be no difference with other colleague, you are just an interchangable component, like a cog in a machine, which are easily to be replaced.
The problem in IT industry, average and mediocrity can not survive, whether a company or a developer.  If you are just an average cog, then you are easily to be replaced, you have to compete with other lower priced developer; and even more finally your job might be outsourced to India or China.

So if you want to survive, secure your job,  you have to be lincpin: you are indespnesible. Make sure you stand out, remarkable, quite different with others average people; you have passion, you are emotional labour. If you are linchpin, you will become independent and get freedom, you don't need to worry about job, job is always looking for you. Since you are linchpin, you deserve the high pay because you bring much more value to the company.The difference productivity between a great software developer and average one is 10:1, think about how much you can earn if you are linchpin. Think about Apple, how the iPhone makes such difference with other regular phones.

You have to make a choice between these two: to be linchpin or not to be. It is up to you.
If you want more details about linchpin, please read the book: Linchpin: Are you indispensable?

Also check this article: The indispensable Developer
And this: You are not your role