Monday, December 14, 2009

Darwinian Economics ;)

When Darwin proposed his theory of evolution and survival of the fittest he was right in more than one way. In today's market the only businesses that survive are those that are able to adapt to the uncertain economic conditions. In such an environment we as IT Professionals share a similar fate, we must be fast, agile & able to adapt. For, it is us the IT professionals that must support the constantly changing aspects of the business. It is with these thoughts in mind that I've continuously worked towards developing those traits that would allow me to be agile and effective under any circumstances.
As a Software Architect and Technical Lead, I've tried to position myself in a way that allows me to be quickly effective in a variety of projects. Jumping from the project a to project b and now to project c, here are some of my thoughts regarding what the those traits needed for such an environment are.

1. Thinking of Reusability: When I take on any project, I always think to myself how do build it so that I can leverage it in the future. It is with this idea that I've been able to accumulate a framework and a set of proven patterns and practices that allow me to hit the ground running when I approach new projects.
2. Taking the Initiative: One of the challenges that comes with reusability is that reusability lends itself to stagnation. Therefore to avoid this fate, I'm always taking the initiative in adapting the frameworks, patterns and practices I've developed to newer technologies and patterns that would give me greater reusability.
3. Building the Right Team: Having the right team is as critical to the project as having the business requirements. Without the right team, any project would be in jeopardy. So what makes the right team? To me the right team is built around trust and mutual respect. It is composed of team members that I would trust to make the right choice in my stead. Hence, when I conduct interviews I rarely focus on candidate's particular skills. Instead I'm always focusing on the choices he would make.
4. Scope Management: When it comes to achieving success and raising the victory flag it is important to know what it means to succeed. Defining a scope that allows you succeed is what I've been stressing we strive for in the projects I've worked on. The correct feature set that gives the biggest bang for the buck to the business at the right time is what defining scope is all about.
5. Agile Development Methodologies: Agile development are methods that I've tried to follow in order to gain the most and mitigate risks associated with a changing business. These methods include the focus on building bench strength and communal ownership from the beginning of a project, as well as a focus on iterative delivery of small feature sets. The methods allow for more accurate estimation of feature delivery as well as providing the ability to shift focus should the situation arise. It also plays in very nicely with our maintenance transitioning strategy and operational risk countermeasures strategies because bench strength and communal knowledge are at the core of Agile development.