Revisiting is the key.

Thats the difference between good stuff and great ones. The second look. Revisiting your work.

Its the time when I started my career.. and a certain gentleman named Asokan, who was helping us getting started with Programming said:

“Your programs are supposed to function. They need to provide the right output. But, your work as a programmer doesn’t stop with that.”

There’s always a tendency to stop improving things once they’ve started to work. I’ve experienced this on many occasions where we released software as soon as it just started working. Then there is this over-celebrated QA team, that does some quality check and boom.. the customer has it in his hands. And it breaks (well, not always.. practically only 99% of the times) . We find ourselves spending pretty much the same time as we took to write the code, fixing it. Well.. we don’t learn. We follow the same cycle as above. It just has to work. isn’t it?

Well.. the truth is that stuff breaks. In software, it sure breaks like hell. So the wise decision is to be ready for it. Now, its not that we do it on purpose. Sometimes we’re not well informed, not experienced enough, are bounded by self-imposed time constraints. Most of the times.. we just don’t care.

So what can we do?

Give the code a second look.. (once its started working). Its not a crime to write ugly code to get stuff working. Its advised not to get into the habit of clean stuff.. and forget the actual solution. So get it working first. Then pause. Stop for a while. Its working now. Lets improve it a bit.

Clean stuff up.

Proper names. Rethink names of methods and variables.

Write tests if you’ve not written them yet.

Refactor.. Refactor.. Refactor.

Release it.

I know there is an urge to release stuff as soon as they’re ready.  The stuff above doesn’t take that long anyway. And saves lot of time and money later. Try following this cycle.

Next time you estimate a work, dedicate a little time for revisiting your code too..

Hope it helps.

how to choose software projects to work on..

[tweetmeme source=”snarayan” only_single=false]

Some time back, I had finished up one of my pet projects and was looking for something new to work on.

It’s amazing to see the number of choices one has right now in terms of choosing a software project to work on. I primarily develop web applications and like to focus on Rich Internet applications. So was looking around for things in that section. Thought of checking out with people to what they tend to choose..

It went like this.. The choices were rails, asp.net mvc, python/django, grails, jquery, spring web, gwt, flex, silverlight, scala/lift, and a few more..

Wow. I mean, look at the list. and its not all.. we’re just getting started.

Each one of them have their own pros and cons, and choosing among them is really interesting and difficult too.. I started to compare some of these to decide where to start. After few weeks, I was still at the same point and had not been able to make any decision. I always felt like missing something.

Then I realized that I was doing it all wrong.

Nowadays, there are so many things that one can’t keep on top of all thats happening. So I started thinking about how I should approach this thing. Sometime later, in one of the podcasts from Joel and Jeff (from Stackoverflow), I listened to an interesting conversation about choosing what to work on, and I totally agreed and understood the concept behind it.

Technology is a means to get something done. If you’ve found what to work on, as in a domain (or) a problem to solve, it’s fine with what technology you’ve chosen.

One needs to find something worth doing, a problem worth solving and then choose the technology that should back that up. Thats the trick.

Frankly, if you’re doing something really good, it doesn’t matter even if its in php.. nothing against php folks.. 🙂

Ok, fantastic. So then I started looking for a good problem to solve. Found couple of interesting ones. Started working on them.

The technology chosen is grails, was a good fit for our kind of team and nature of the project. Well.. lets see how it goes.

Personalization

This is a keyword in current times and most of the technical and people related advancements are happening around this exact word. I thought why not share some of the things I feel about the usage of this thought. Things that I see around and observe is presented here in textual format.

Technology and Personalization

Gone are the days where technologies used to dictate how it was supposed to be utilized. With the increasing awareness of people, it becomes extremely important that technology meets people’s demands.. not one particular group or one particular region, everyone. Thats what it is now.. everyone. He might be living in alaska or turkey. He wants the technology to do exactly what he wants. Thats the challenge for technology. I am not sure where we are as technology people to satisfy that kind of a demand, but yes the start is acknowledging this particular demand.

People Management and Personalization

This is one of the things thats been talked about a lot in recent times. With amount of attrition and dissatisfaction, it becomes very important topic for current organizations. I’d like to present my views on this, both from an employee as well as an employer perspective having done both in recent times.

One of the essential things about people management is to know what exactly people want. Then figure out what we can offer as an organization. People’s demands keep varying from time to time, from person to person, depending on various factors. So what it indirectly means is we cannot have a policy that can work for every individual working in our organization. There comes the word personalization. We’ll have to make our structure flexible enough, to an extent where people can arrange it in a manner which they want to.

Some of the things to look at are the package structure, work environment, work timings, dress code, working set, leave management, perks and the list goes on..

We at Quads are looking to improve on some of the items listed above to the best of our capability and we are getting to know that to bring flexibility into the process needs lot more effort than mere implementation of those.

Some of my future articles would discuss about the things that we do at our place and parallelly discuss the implementation details of each.