Monday, March 2, 2009
Wednesday, February 25, 2009
The Game !!
Excelling in the software industry takes more than just pure technical skills.
Recently I came across a really interesting situation. There is this engineer in my team who's techincally very gifted. Her knowledge of design patterns and their application, along with excellent coding structure and dicipline is very comforting. Even though she's relatively young, her determination to do the right thing, instead of short term gains and short cuts is refreshing.
However, given her excellent technical ability, she prefer's to socialize with only those she deems as technically strong and highly interlect people. As a result of this she hardly socializes or even communicates with her own team members. She has no rapport with her team. She's very reluctant to offer a helping hand to team mates who are in trouble and she tends to complain and find fault in others very easily. Furthermore, her dicipline in terms of time entering and responding to emails - especially project management related is very very poor.
This has resulted in a very tricky situation. With this economic situation, teams are very selective in who works at the client site and who should travel back and work offshore. Her position with this regard hangs in the balance. Her own team members and even the project managment team are not that keen on having her onsite as she is difficult to work with - however the client is extermely statisfied with her as her designs and code is of high quality.
Here's my take : As much as individual ability is important, the software industry is very much a team sport. You constantly work in teams, brain storm as a team and come up with a solid design together and then work in cohesion and harmony to develop the solution. Each players individuality bring different idea's - different idea's breed conflict - conflict breeds creativity. The key here is to not to lose sight of the end goal during the conflict - the end goal meaning the ultimate most suitable design. It is very easy to get carried away and play on ego's etc. But this is where maturity plays an important part.
So to thrive in a situation like this, it is very important to develop people skills ! Cause you're constantly working with people. Here are some examples...
- You have a pretty good design - instead of surprising everyone and presenting it to the entire team basically forcing your way through which will result in everyone being on the defensive - why not share the design with a few fellow key team members first, get it reviewed by them before presenting it to the rest. This means you will already have their buy-in and hence getting it passed will be much easier. They most probably will fight your battles for you.
- You have done something really well - maybe some design, maybe some piece of code that has increased performance drastically - while basking in your glory, make sure you give credit where credit is due, maybe someone's idea or somethign someone said sparked that thought in you. Make sure you coin all those who helped you along the way to get it done and mention their names. This gives everyone a sense of pride too. They too contributed to the end goal. This will benefit in the long run, where each one feels like they really work together. An individual's glory means the team's glory !
- During times of adversity - most often during defect triages and defect reslution - the part we hate the most :D - make sure no finger pointing takes place. Its always we did this, rather than it was this person's fault. We're all human after all.
- Spend some time out of work to get to know your team, go for a beer maybe, shoot some pool, have lunch outs, see what their interests are. Building friendships tremendously helps getting work done. At times when you're not there, you can be sure someone will cover for you. That helps !
- Make sure you always satisfy your project managment team ;) ! Their needs are simple, enter time, give them periodic updates on the progress, and let them know of issues or risks early. By making their job easy and making them look good in front of their bosses and peers, they'll take care of you in case anything comes up.
This is the game ! You gotta love it !
Wednesday, February 4, 2009
Friday, January 30, 2009
Session Managment
Recently my work has lead me down the path to analyze how various enterprise applications use the HttpSession object and to propose and implement a strategy that would optimize its usage. Pretty interesting right ?
So first and foremost, what should be the ideal size of an HttpSession ? IBM proposes that it should not be greater than 10K. Overall the general consensus is that we need to keep the session as small as possible.
What should we know about the http session ?
- The HttpSession shares memory with the running web applications inside the JVM heap
- There's no limitation to the size of the http session, although some application servers can limit the number of sessions.
- The objects you store in the http session often contain other objects too (nested objects). So the cumulative size of the http session includes all of the objects you store.
- Managing session is important for application performance as well as for scalability. If one user occupies 10MB of session data, and if 100 users hit the application, then thats 10*100 MB of memory used up for session data - which most servers wont be able to handle ( the average JVM heap is around 256 - 512 MB).
This is why managing session is so important for enterprise applications.
So here's what we decided to do.
- Quite simple really. Minimise using the session :) , if we have to keep something in session, then move it to a cache (hosted seperately) and just keep the keys in session.
- Monitor how frequently the objects in the session are used. If they are used very rarely, then it makes sense to keep them in the database and fetch them only when required.
- Monitor on average, how many sessions are used by the web application. This will give you a decent idea if the memory on the box is sufficient or if you need to upgrade OR if you need to control the number of sessions permitted for each server so that the JVM wont trash.
- Even data that needs to stored in session should be analyzed to see which fields should be declared as transient.
- HttpSessions should be invalidated properly during logout and browser close actions. Session timeouts cause the httpsession to be destroyed automatically.
- Keep profiling the application to see if we're utilizing the session ( and other objects ) optimally.
[Performance Analysis for Java websites, Http Session Management, Http Session Best Practises]
Monday, December 22, 2008
I love my Pandora...
Pandora is the best internet Radio out there. Here's my station that has been customized to my taste. Enjoy !
Wednesday, October 1, 2008
Subscribe to:
Posts (Atom)