Going to office or going to work?

[tweetmeme source=”snarayan” only_single=false]

Really, where are you going?

I’ve been thinking about this for quite a while now..

I spend about 1 hour 15 minutes to reach my office from home. That makes it about 2 and 1/2 hours daily.  On a five-day week, this sums to 12.5 hours (equivalent to 1.5 days of work). So as per figures, I lose 1.5 days of work time per week for a totally non-productive thing.

Now add money into the equation, if my per-day salary is about 2k, i’m losing 12k on a monthly basis (which is 1/4th of my overall salary). Thats significant money and time. Quite significant.

Ok. Enough of numbers. So.. why do we then go to office?

I’m of a firm opinion that it is absolutely essential that we utilize this time more effectively. And, it’s not just me. I see more and more companies are realizing this and are offering a alternative plan to their employees. Some even feel that offices would be “history” in few years to come.

We need to make some major changes to our mental setup to change this..

1. Need to identify better ways to measure work.

2. Communication facilities need to improve

3. Need better planning

4. Need to be sensible about collaboration and utilize time more effectively

5. Need to get more self-organized and self-employed style.

Of course, I agree that all nature of work do not permit this. But especially in software, its absolutely perfect. Infact, there’s a whole industry which works on remote communication. It certainly can work and work well..

Let’s stop going to offices. Let’s start going to work.

My interactions at Devcamp chennai..

[tweetmeme source=”snarayan” only_single=false]

Wasn’t a regular saturday for sure..

Last week, on saturday, I was in NDTV office observing the shooting of a show on social media and its influence on the way we interact..  One of the arguments was that People have forgotten the art of social interactions. There are very less real-world communities.

Well, this saturday, this argument was totally written off. At Devcamp, we had 100+ programmers (creators of the virtual world) under one roof and discussing the thing that they love most. Technology.

This is not a recap of all the things that happened at devcamp. Its only restricted to my interactions there..

First mention to few people who I was meeting after a long time. Mr. Dorai Thodla(iMorph), Mr. Suresh Sambandham (orangescape) and Sriram Narayan(Thoughtworks). I admire each of them a lot and for different reasons. Was great to catch up with them and talk about various things..

Next, loved the self-organizing nature of the event. People were free to move around, talk to different people and discuss things the way they liked. Although, I felt the awareness level about Open Space Conferences was fairly low on the attendees. So at times it got a bit chaotic. But taking nothing away from the charm and enthusiasm, it was a nice show.

The presenters, I expected much more live code and variety of styles, which was missing. Most of the presentations were powerpoint stuff. Seriously.. in a devcamp you need to see more code. Editors, syntax, program, they were a little less. Guess, that will improve in the further sessions.

I had a presentation of my own along with Deepan, my colleague and friend, on “Code smells and Refactoring”. Got few techies interested and had a nice time discussing finer details of programming. (I had a full code session. No presentation.)

Next up was lightning talks/fishbowl sessions, which disappointingly had very little participation. So we thought, we’d change the style and invite people to talk based on topics we chose. It was an interesting little session, which really caught my imagination. Some really interesting topics discussed there.. Some of them are as follows:

1. Inspiration as a programmer.. Names starting from Larry Page to Joel Spolsky were mentioned as inspirations for being a programmer.

2. Products that we’ve appreciated.. Stackoverflow, Delicious, Winzip, Hibernate, Gmail, etc. were mentioned.

3. Products that’ll make future interesting.. Google Wave, HTML5 & CSS, Mobile apps, mobile/e-commerce. Here’s a post on it by Dorai.

Apart from these, there were couple of young Entrepreneurs (still in college), who are trying to change the world. Pretty neat stuff.

All in all, Devcamp was a step in the right direction. Though, there’s a long way to go still.

Check out few tweets here

Pairing – Why does it work?

[tweetmeme source=”snarayan” only_single=false]

Pair programming is an extreme programming (xp) practice that involved two programmers work together to finish off a task. They typically share the same workstation too.

Well.. the general perception of programming is, you have more programmers you get more stuff done. Now, it seems extremely inefficient to have two folks working on a single workstation. You’re working at 50% capacity in someways.

This is absolutely false.

When correctly used, pairing can be a great productivity boost, also helping in sustained growth in quality.  Let me share my perception on pairing since I’ve used it..

1. Sharing tool.

A team can have its senior folks pair with its junior folks on a regular basis and ensure that knowledge is shared in the best possible manner, at work (inspite of a theoretical session).  Even within a project, knowledge of different modules can be shared with all members of the team through pairing.

2. Dependency management.

By sharing and distributing knowledge with team members, you’re also reducing the dependency on individual programmers/members of the team. Hence reducing the risk of people moving out or overpricing folks.

3. Culture of equality. (No hero worship)

Since the knowledge and responsibilities are divided so evenly, you tend to have less heroics at work. Hence providing a very healthy culture of trust and respect within a team.

4. Reduce Developer Block time.

As developers, we often get into a state where we are blocked with a problem. Either we do not know a solution or we know a couple of them and are not clear which one to go for.. With a third eye always with you, this can be reduced to an extent. Two people thinking about a problem increases the chances of a better solution coming along, since both programmers can bounce ideas off each other.

5. Parallel Code Reviews.

With people working with each other, you are getting reviews done parallelly without hurting each other’s sentiments :). Typically Code reviews happen to be badly done. Most developers hate to accept review comments once they’re done with their code. But since its done while they’re coding, it works fine for both parties.

6. Development of good practices.

There are many habits and shortcuts that can’t be taught in isolation. Sharing small tricks and shortcuts become really easy with pairing. Also when you’re pairing with somebody good, it can really motivate you towards programming.

I’ll have to agree that I did not believe in these things before I started incorporating them in our daily exercise.

It works for me.

How about interviewing as a service? – Part I

[tweetmeme source=”snarayan” only_single=false]

There are many parts of recruitment that are outsourced. Outsourced to people who have little to no knowledge of what kind of people are required for the job.

So the effects are, requirements like this:

1. Do you know Java?

2. We’re looking for a .Net person for this project.

Would a resume which has no such keywords like Java, .net, etc. be even filtered into our recruitment process. Imagine a resume which states things like Object oriented principles like Law Of Demeter, Tell don’t ask principle, Liskov’s substituition, Refined Unit Testing, Test Driven Development, etc. I’m sure 99.9% of such resumes will be filtered out.

In the previous example 0.1% of resumes escaped due to some mistake in the filtering software/process.

You’ve already lost some good programmers. Congratulations.

Next up is the interviewing process..

3/4 companies do not have coding as part of the interviewing exercise. That is fairly irrelevant, isn’t it? You can judge a person from his body language, confidence in his language ability, etc.. right? Right.

There are couple of reasons why this is happening.

1. Already our outsourced business principle has made programming one of the clerical jobs. Programming is a necessary evil you need to go through in your pursuit of becoming a manager.

2. All companies are virtually the same. You can hardly differentiate one from the other.

So interview is done. Wonderful. Our candidate has been hired.

Next up, he refers people similar to him for the job. In this revolutionary referral process, the only motivating factor is money/reward. So you mostly get people referring for reasons other than improving companies culture and stuff..

Well.. we’ve been extremely happy with such process till now. Since the demand has been high, we did not really care.

But for longevity this wouldn’t work. So the process has to be refined to not filter exceptional candidates. Move away from the sub-standard and mediocrity encouraging framework of recruitment.

For companies/people interested in solving this.. I’ll try to touch upon the solutions/theories in a series of articles. Your suggestions/case-studies are also welcome.

My people always ask me “what to do”..

[tweetmeme source=”snarayan” only_single=false]

As an entrepreneur/manager, believe me, its not a good position to be in. You want people who can/are willing to take decisions.

The reason you hire them is because you think they are good at what they do (ideally.. better than you too.). So you need them to tell you what they want to do.

Sadly, many argue that its a very ideal state to be in.

Ok. Point taken. Back to reality.

Don’t tell them what to do and observe them.

What could happen? Will no one work? Would there be no decision at all?

Or

Would people start thinking what to do..
Would people start taking decisions and learning from their failures/successes..

Remember, the reason people ask you what to do is because they’re not confident of their decisions and are afraid of failure. Give them the cushion for failure and encourage them to take decisions.

Embrace innovation. Accept failure.

Far from reality

[tweetmeme source=”snarayan” only_single=false]

This is about programming. Well, about programming as I’ve seen it..

I’ve always believed in being motivated by the problem that I’m trying to solve. You have to relate to the problem to solve it in the best possible way. Without that, the solution is not convincing enough.

The problem as I mention is the GOAL. The final objective. The ultimate destination. Goal. What are we trying to achieve?

Sadly, in our software industry(especially outsourcing..), it seems to be lacking that.

There are so many layers in organizations and clients that the developers don’t seem to have even a sniff of the ultimate goal they are working for. They’re well trained to work on the least amount of information that is provided to them, which may or may not have any relevance to the final objective. Well, but our developer don’t know that. They’re completely ignorant of how his current work is aligned with the objectives of the project/product.

The issues that arise from this are lack of motivation, poor quality, bureaucracy, lack of innovation and continuous degradation of working culture.

In one of my previous posts, I mentioned about a developer‘s responsibilities and how he’s not doing a good job if he doesn’t know the overall business objective. Well, sadly about 90% of our industry would fall into that category. And, wait a minute before pointing your fingers at the management. Wait a minute. How many developers have shown that interest to understand and explore the business objectives?

I truly believe once you’re far from the reality, by reality I mean the real objectives of the project/product, you’re working on, you’re not providing the best solution for the situation.

Some of the ways you solve it are:

1. Enable better client-developer communication. Mandatory. (i.e.) direct access to the problem given to the solution provider.

2. Determine goal of the project and align all activities towards it. So each task would be related to the goal and would provide the necessary motivation.

3. Discuss and focus on objectives/goal whenever you face a roadblock.

Once you manage to achieve that state where every person on project relates to the ultimate goal, you’d get the desired synergy and quality required.

This is one of the reasons why Outsourcing is still considered only a cost-benefit and not actually a value-addition in true senses. Most of the projects we get are not first-class projects.

By first-class I mean, real innovative ones. New range products, High end systems, etc.

This may be ok for the outsourcing business, but it taking us nowhere close to the potential that our generation is capable of. It instills a sub-standard notion into the society and would harm us in the times to come.

What we need to do:

1. Get closer to the problems. Go to the source. Start your solutions from there.

2. Do not execute tasks that you’re not aligned with. Just don’t.

3. Once you’re closer to the problem, find your own unique ways to solve it. Thats the way we grow.

That is the approach we need to adopt and we need to adopt it sooner than later. This would be in benefit of our industry, generation and the whole nation.

What content you’ve liked here..

[tweetmeme source=”snarayan” only_single=false]

First of all, thanks to all the readers and supporters of my blog. Recently, I’ve tried to increase my rate of blogging and tried to write atleast 1-2 posts a week.

I’d like to get all the constructive feedback, I can get from all of you on how I can improve my content.

Here is one poll to understand my readers here.. Thanks for your time.