I have taken part in many interviews as interviewer and interviewee. I have seen many interviewers ( including me ) ask many hypothetical questions especially for management positions.
Monday, July 14, 2008
Avoid asking hypothetical questions in interviews
Monday, May 26, 2008
Letter to managers
Dear Manager:
Before you judge who I am and what I need to change. Give me an opportunity and see how I do.
Thanks,
Subordinate
Wednesday, April 30, 2008
Do we need a Tech Lead role ?
I have been thinking about whether we need a tech lead role for sometime. But now, I have come to a conclusion that tech lead role is unnecessary. Let me list my reasons, why I feel that way.
- Instead of a tech lead , we need a person to act as tech facilitator. This role should be rotated among the team members in weekly basis or biweekly basis. The main responsibility for Tech facilitator will be to resolve some technical conflicts within team by facilitating a discussion where advantages and disadvantages of all approaches are discussed and decision is made.
- I strongly believe the person with a strong technical expertise will be recognized by the team itself. We do not need to appoint a tech lead. Team members will go to a person who they trust as expertise in that technology. So there is no need for a technical lead role.
Thursday, April 17, 2008
Waterfall is perfect (with some assumptions)
I took "Software development life cycle" course in my school long time ago. It was an interesting course as it was the only course that explained software development process from one level up compare to other programming courses. As a part of the course, I learnt about Waterfall process and different phases in waterfall process. At that time, I felt that Waterfall process is so simple and perfect.
- We gather ALL requirements
- We design the ENTIRE system to attributes and behaviors level in classes
- We code those designs
- Test the system
- Ship or release it.
- Requirements never change
- Design is perfect
- Coders can easily implement those designs
- Defect fix will not have much impact in the design as it is perfect.
- Requirements will change
- Design will evolve and change as we gather more knowledge
Wednesday, April 16, 2008
Please teach me rspec
- What is the best way to organize specs? In rails project, specs are arranged in folders like models, controllers etc. I do not have a problem arranging the spec files, but I am not sure how to organize specs itself. Does anyone has some good practices that worked for them?
- Sometimes my objects have behaviors like "Player When power is on It should start playing When play button is pressed " . In this behavior I have two When conditions. How do you express this behavior in rspec ? Should I have it like
describe Player, "When play button is pressed"
it "should start playing if power is on"
....
end
end
using a if condition. Or should I have something like this
describe Player, "When power is on and play button is pressed"
it "should start playing"
...
end
end
- In unit test, usually we write tests to make sure our method do not blow up when we pass nil for example. I feel it is a good test to have. How do we writes spec for this kind of situations?
Monday, April 14, 2008
Do we need Iteration Planning meeting?
Iteration Planning Meeting (IPM) is becoming a controversial topic. In one side , some people feel IPM is a must. In other side, some people feel IPM is not needed. I have friends and people whom I appreciate in both sides. According to me, I feel IPM is needed (not a must) but in a different form.
These are the activities that usually happens during a typical IPM.
- Showcasing (Demo to customers)
- Retrospect
- Story presentation
- Story tasking and estimating
- Planning
- A little celebration for finishing an iteration.
Retrospect:
Retrospect is where we collect knowledge to eliminate waste. We can retrospect what things worked and what did not work. The problem I have is why cannot retrospect be an ongoing activity instead of just happening during IPM ? We can have a board where everyone in the team can add things whenever they want that they like or do not like. The board will be always up to day. In daily standups everyone can discuss on issues that are very critical.
Story presentation:
Story presentation is where a analyst will present what a story is all about. Developers can ask questions to understand about what is expected out of that story. This is a very useful activity, but again why it has to happen during IPM. Story presentation should be postponed till some developer is ready to work on it. That way we can use new knowledge that we acquired in the past few days working with other stories.
Story tasking and estimating:
Please look at my other blog, where I have discussed the importance of tasking. Again like 'story presentation' this activity should be done at last possible moment (ie.., when developers are starting to work on that card) instead of being done during IPM.
Planning:
Planning is something that we can never avoid. Planning has to happen. But we should understand that planning is not a commitment. We should be willing to change our plans as we gather new knowledge. Planning for short term should be more towards what is next three stories (keep this number as low as possible) that I wanted my team to work on. Things change so fast and we gather so much more knowledge in a short time. So planning should be a continuous activity rather than being done only during IPM.
Now our new form of IPM will have only these activities,
- Showcasing (Demo to customers)
- A little celebration for finishing an iteration.
In a ideal situation, customers will be always sitting in your team room. Whenever we have a story done, we can deploy to a demo machine (which is very close to production system ) and demo it to the customer. In this scenario, celebration is the only activity we will doing during IPM.
Reality:
In reality, not all customers will be sitting in team room. So we need a scheduled time to demo the stories you have done to get feedback from them. So we will need IPM , but in new form.
Monday, March 31, 2008
Hope and Change
Wednesday, March 26, 2008
Who is responsible for Ruby?
In Qcon London 2008 conference , I attended a panel discussion for what type of projects should we use rails. As one of the audience mentioned during the discussion, that all the panel members were pro-ruby :) It is not a big deal, but I just thought it was funny. I have lot of respect for all those panel members.
Tuesday, March 25, 2008
5 Reasons why I hate Basecamp
I have been using Basecamp for my project management for sometime now. I have to say I hate it. I really like what 37signals guys do, but I was disappointed with Basecamp.
Without any further ado, let me list 5 reasons why I hate Basecamp
1. Navigation
I get lost so easily in Basecamp. There are no breadcrumbs in any pages. For example, I have a page for our iteration planning where we list all the stories that go into that iteration. These stories are listed as links to other writeboards in the project. When I click on any of these links to view a story there is no easy, intuitive way to navigate back to the iteration planning page. When I click on browser back button, it just refreshes the current page. The page has a link to "Go Back". When I click on that click instead of taking me to the iteration planning page, it takes me back to list of writebroads. I am not sure if this is some configuration problem from our side. But again I don't think this should be a configuration.
2. Loading Writeboards is very slow
3. Search is useless
Search does not search writeboards.
4. Wiki support is aweful
Compare to Confluence or other wiki tools that I have used, Basecamp support for wiki text is inferior. Even Wikipedia has better support.
5. Does not handle big projects well
Organizing things in Basecamp is a pain. I have no way to tag or search writeboards.
Einstein had a famous quote - "Make everything as simple as possible, but not simpler" . I think they missed the second part of that sentence.
Sunday, March 23, 2008
Ruby is more object oriented than Java!
This simple example proves that Ruby is more object oriented than java.
To find absolute of a number,
in Java we need to use a separate class - Math.abs(-24)
but,
in Ruby abs functionality is built in the number - -24.abs
Saturday, March 22, 2008
REST and standards
I really liked a comment left by an anonymous writer for my "Save REST" post. I think it is worth to mention it again in this post.
I am not sure having a committee and coming up with a standard is a good idea. For example, take W3C standards for HTML. It did not do anything good. We still have to tweak our CSS for web pages to work across multiple browsers. Another example, our dear WS-DEATH * standards.
True. But can we please get an industry accepted de facto technique for securing REST based services?
It seems that most REST services either rely on the non-RESTful cookie/session based approach with a login URL to establish the session, or they implement a custom technique using the Authorization header.
The Authorization header is clearly the right approach, but we need a de facto standard technique for using it. Something along the lines of Amazon's S3 approach would probably be ideal.
I think instead of having a committee for coming up with a standard, we should all start working on different implementation of REST authentication. I think a simple solution will prevail and all the other solutions will fail. Once the simple solution is used by many people , than it will automatically becomes a standard.
Am I dreaming? Let me know what you all think?
Friday, March 21, 2008
Disappointing Business Natural Languages Talk
Jay Fields presented "Business Natural Languages" in QCon London 2008. I have tried to do natural language processing using Rules Engine and failed badly. I am not sure whether the Rules Engine implementation I selected was not a good one or just Rules Engine in general are not a good choice for natural language processing. Anyway coming back to the presentation. I was so excited about this presentation and attended it. I have to say I was little disappointed. First of all , I think I have seen this presentation like a year ago ( I might be wrong ) . I am surprised that nothing has changed for a year in this field. Jay used frequent flier example for showing how we can do BNL. I am not convinced with that example. Remember Petstore made Entity Beans look like solution that we were praying and waiting for. The frequent flier example was so simple. I am not against anything being simple but businesses are not simple. In his example , the rules he had were somewhat like,
- If flying in Class B,C than allocate 2 Points
- If flying in Class D than allocate 1 Point
It was nice presentation to show what is possible with BNL, but that is where it stops. I would like to see some more realistic rules.
Thursday, March 20, 2008
Static Vs Dynamic Language
I find traversing applications written in static languages (Java) easier than traversing applications written in dynamic languages (Ruby) . When I spoke with some of my co workers, they felt otherwise.
I wanted to know what everyone feels. It will be great if you could post your experience as comments to this post.
Running Software
It does not matter what technologies or methodology you used to build your software and how much test coverage you have if you do not have a running software.
Race to running software.
Wednesday, March 19, 2008
Save REST
I request everyone let WS-* be WS- DEATH * and we will just leave it that way. REST is a change that we were looking for so long to make a decent working SOA. Lets not try to make REST as part of WS-* so that we can easily convince our organization to use REST for their services.
Save REST