Saturday, February 20, 2010

Waterfall or Scrum???

Some thoughts to help folks decide on Waterfall or Scrum for their project management:

Waterfall method of project management/development involves well defining the problem statement, followed by requirements analysis, design (architecture) followed by implementation.

On the other hand, Scrum based Agile development involves not spending much time in planning or trying to get the overall big picture or defining the overall architecture in precise terms. Agile methods are Lightweight and are considered to be people-based rather than plan-based.

Few characteristics of Scrum process are the following:
- Self-organizing teams
- Product progresses in a series of week-long or month-long sprints
- Problems are solved only for that specific sprint.
- Team is fully shielded from external influences so that they can concentrate on development (no more regular meetings)
- No status reports but a short Scrum meeting daily where team members meet face2face and give their verbal status reports and scrum master tracks the project (this is not a problem solving session)
- Highly skilled team members in their respective areas

Few advantages of Scrum are:
- Completely developed and tested features in short duration
- Simplicity of the process
- Self-organizing
- each team member carries a lot of responsibility
- combination with extreme programming

Now lets talk about the disadvantages of Scrum:
- Undisciplined hacking (no written documentation) (which can be somewhat mitigated by modular programming)
- Since Agile crucifix relies on solving today's problems first, there is no clear big picture of the problem/solution at any point and this could involve a lot of refactoring every time. This might also lead to a compromised or hacked solution or redefinition of problem statement many times to meet the implementation needs.
- Knowledge monopolies - This is because of the absence of documentation and only few people in the organization would know anything and everything about the solution. If they leave there might come a situation where the solution need to be re-written. This could lead to dictators. On the other hand, this is what human psychology wants because this leads to job security =).
- Experienced folks or talented young development staff may not be interested in working because the dictators could be hoarding uninteresting tasks to the team members most times.
- No proper resource management which leads to compromising on the skills of the team members: Since SCRUMs or Agile rely on short sprints, things are not planned beyond the sprint term and when a need arises and if the resource isnt available for that need, its not always easy to find a resource.
- Team members may not have the big picture and direction in their career in the long term as they proceed along the Scrum methods..
- Customers get fed up with never-ending, continuously changing solution.


I m not against agile methods or Scrum methods... What I think is best is a mix of waterfall and agile scrum methods where waterfall is utilized in identified in problem statement, architecture definition and design definition AND Agile SCRUM method is utilized in Implementation and product releases.

Or, one could always adopt their own rules which are nimble and agile .... There are no rules... All rules are meant to be broken..

Tuesday, February 9, 2010

6 traits of a good job

Here are 6 traits you need to look for in the good job. Just like employers interview employees, the employees should also interview their employer before taking up a job offer:
1) First Class Boss: Everyone's got a boss. The first and foremost thing one should look on a job offer is their boss. This should be one's motivation to work in the first place. The Boss should trust the employee and the employee should trust the Boss. The boss should also demonstrate good qualities of a leader because only if the boss is a great leader, employees can grow!

2) Knowledgeable Mentor: Sometimes, mentor and boss are the same and sometimes they are not. The mentor is someone who is a good teacher.

3) Friendly Peers: This is what will motivate you to go to work every day. These are people who we hang out (work) with daily. Trust is an important factor here. You should also look forward to be learning from your peers and your peers should be learning something from you. Your peers should respect you and you should respect them. Your peers at work should be really your friends and your team should be like your family.

4) Work Fitting in the big picture: This is the work you do on a daily basis for which you get paid $$$$s. What is the big picture and how well the daily tasks fit in your overall career strategy or passion.

5) Work life Balance: Life without balance is just like a machine.. After all why do we work? To live a better life.. So if there is no time for fun, whats the point of working. Hence, work life balance is very important.

6) Stability in Organization: If your company is on the verge of bankruptcy, then you are better off looking for another job... Again this comment should be taken with a grain of salt. Your boss,mentors,peers and work play a major part here. More than these, its your loyalty which plays a bigger part.

Bottom line, you should love what you do. It should be more than just for money and it should fit in your overall agenda in life.

Feel free to post your comments on the above thoughts...

Sunday, February 7, 2010

Steps in designing user interfaces for the web

In my experience on designing user interfaces for the web, I generally follow the following steps:

1) First I do story boarding (on a white board or piece of paper) with my concept. Say its a website, I try to draw every single page and all the features and icons (the icons wont look good here but this is just to brainstorm). Before implementing any idea, I try to form a user-group (group consisting of my friends and maybe even potential customers). If I don't know who exactly the customers are, this is the step I try to find them. After all, if there are no customers who might pay for our product, then whats the point of doing it.. =) . I show them the storyboard (paper/pencil mockups) and ask for their suggestions. I don't necessarily change my design to cater all the suggestions but I atleast note them down. This step helps me to flush out any obvious holes in the design.

2) Then, I do some basic wireframing (I have found balsamiq.com to be the best wireframing tool) so that the paper/pencil drawings are captured digitally. The advantage of using wireframing tools is that it helps me get two steps closer to reality. After creating the wireframe, I ask for inputs from my user group.

3) Then, I grab icons and interfaces from the web (close enough to what I envision my user interface is going to be) and create a photoshop mashup. I dont design the icons/fonts/interfaces from scratch but just create a mashup using whats existing. Sometimes I just copy bits and pieces from existing designs.. Isn't there a saying "Good artists design, great artists steal =). This photoshop mashup would have colors/fonts/icons/layout, very close to how its going to implemented. I m not a guru in photoshop, so I get help from friends of mine who know photoshop or sometimes I even go and hire a cheap photoshop designer and I sit with him to transfer the ideas in my mind to photoshop. I show the final photoshop design of all the pages to the user/customer group and get their opinions. If I m not satisfied with a particular color/font/icon/layout, its easy to change them at this step. Now I m one step closer to the final product. I freeze the design/layout/font/colors/icons at this step.

4) Now that I have frozen the design/layout/font/colors/icons, I go ahead and implement them (code them).

Infact I would recommend you to skim through this blog post I wrote a while ago for non-technical entrepreneurs to help them build websites to sell their products.
http://subburama.blogspot.com/2009/12/how-to-quickly-build-websites-to-sell.html