Sunday, August 10, 2008

A Few Good Gizmos

I have been using a few open source Gizmos that would be helpful on a day to day basis.
A few good ones listed below. Maybe others could help grow the list.

Editors

Notepad ++: A very good editor that can be used instead of textpad and edit plus.

PSPad: Another good editor with the same capabilities of Notepad. My friend Patrik suggested this to me. It is better than Note++ but a bit slower I guess.

WinMerge: I doubt you need it with the above two out there.

Database

Sql Schema Spy: An excellent graphical Database Schema Metadata Browser. Requires Java 1.4 or higher


MDA and UML

StarUML:One of my Best discoveries. an excellent MDA \UML tool. StarUML is an open source project to develop fast, flexible, extensible, featureful, and freely-available UML/MDA platform running on Win32 platform. The goal of the StarUML project is to build a software modeling tool and also platform that is a compelling replacement of commercial UML tools such as Rational Rose.


Code Review and profilers

FindBugs: A good Java static code analyzer.

Junit: one among the top Java unit testing frameworks

EMMA: code coverage for Java

InfraRed: Heard that this is one of the top Java profilers. But I seem to have problems configuring and evaluating it. (Inspired by Keshav and Magnus)

Jensor: Now, that has everything, you can ask for Java profiling. Tried on desktop applications. Need to try on web and other enterprise apps. (Inspired by Keshav and Magnus)

Heapanalyser: Used to analyze the JVM heap. This is quite good; but we need to collect the JVM heap. (Inspired by Keshav and Magnus)

NUnit: one among the top .net unbit testing frameworks

NCover: if you want to really ensure your code is clean; use it. However if you have TFS, this is not required as TFS beats this.

Line counter: NLOC is a command-line based source line counter tool. It counts the total number of comment, code and blank lines of source files. It is compatible with C, C++, C#, Java, Visual Basic, Pascal and Delphi languages and with Visual Studio project files.

FXCop: I searched on the net, but could not find a proper download. Maybe,some good soul could help

Project Management, planners,Trackers and collabarative Tools

Xplanner: A open source Project management tool. It is a LAMP/WAMP web application.

Opproject: A J2EE mpp like web based planner. A mixture of Xplanner and opproject would a good

FreeMind: I saw it with Magnus. It is too good. Use it to know it.

BugZilla: Used them once. It was good.

RescueTime: RescueTime is a Web-based time management and analytics tool for knowledge workers who want to be more productive. One of the best things about RescueTime is that there is NO DATA ENTRY. You install a doohicky on your computer and the tool magically tracks all your time usage. RescueTime does not pay attention to which applications you have open, but rather concentrates on which application or site is currently "in focus". In other words, it measures what you are paying attention to, not what you have open.(Contributed by Sneha)

Dimdim: Move aside Webex... DIMDIM is here.With no software to download or install, Dimdim forever democratizes web- based live meetings. In seconds - right from your browser - you easily host or attend web meetings complete with audio and video conferencing, screen and application sharing.

Documentation and learning:

Openoffice: Do I have to introduce this???. If yes, go back to school.

Wink: Sneha (My wife) introduced it to me. helps for developing computer aided tutorials.

SandCastle: A Documentation compiler for managed class libraries. Again thanks to sneha. This was a good help.

XMLMind: XMLmind XML Editor Personal Edition is a very powerful authoring tool which has all the features needed to edit any XML document, whether conforming to a standard schema (DocBook, DITA, XHTML, etc) or to a proprietary one.
It makes it easy mastering XML vocabularies such as DocBook or DITA.Another of gizmos of Magnus. Maybe I need to spend a lot more time with him

FTP Clients:
FileZilla:
I do not need to introduce this. Do I ?

Installers:
WIX
: Got to know about it from Davey. Quite easy and cool.

Blogging:

WordPress: WordPress is a self-hosted blogging tool. WordPress is an Open Source project and you can use it without paying anyone a license fee. WordPress is completely customizable and can be used for almost anything. There is also a service called WordPress.com, which lets you get started with a new and free WordPress-based blog in seconds, but varies in several ways and is less flexible than the WordPress that you download and install yourself.(Contributed by Sneha)

Other Desktop Applications

Pixel Ruler 3.10: Pixel ruler is a virtual ruler to count pixels. Staying over your Windows applications, it helps you to know the exact size and position of any photo, document, icon, HTML element, and so on. You can rotate the ruler and change the skin.(Contributed by Sneha)

Tuesday, May 13, 2008

Requirement gathering for co-product development

Requirement gathering co-development is quite different from a services project. It is more important to understand the phase of the product while working on the requirement gathering.

The phases could be broadly the initiation phase, the implementation phase, and improvement phase.

The requirements at the initiation phase would be more cumbersome as the ideas are yet evolving. The requirements will be more concentrated on the business intent.

It would be more important to understand the intended audience in this case. This should in turn, present the business case of the intended application.

The road map needs to be worked out meticulously; keeping the targeted audience in mind. It is better to aim the to-market to be within six months. New features would be added later.

This phase should also articulate the engagement model ensuring that the roles of the stakeholders are well defined.

The requirements at the implementation phase would pose challenges with respect to time, schedule and effort.

Most probably, small components will be outsourced and one would have to ensure that the small components are quality checked. The owner for the development of the skills required by the resources need to addressed.

All milestones should be well elaborated in terms of deliverables and ownership. There should be clarity in terms of the quality of code expected the required collateral and documentation, and criteria for exit.

The requirements at the improvement phase would be either for the migration of the application from an older technology to a new one, retrofit the existing application to support new features or upgrade the product suite to meet new business requirements. This would be coupled with the overall maintenance of the application.

The intention for the outsourcing needs to be well identified in this case.

The business intent of each component of the application suite needs to be understood well.

The other goals would be to understand how the product has to be positioned in the market going ahead – short, mid and long term. It also required understanding the present audience and the targeted audience. Most importantly, the road map for achieving the above mentioned.

On the technical front, understand the architecture and the modules in the architecture.

The technologies used in the application need to be elaborated in terms of its usage and requirement. Understand which components are reusable and which components would better be redundant. Each application has a development culture, and once this is understood and adapted well, there would be no problems at all.
On the engagement front, it would be essential to identify the owner for the application; and the authority one has to take decisions. Sometimes; the client would like to have all authority and delegate the work to the outsourcing partner. In the other extreme, the outsourcing partner will require to play the role of the product manager (which could involve sales as well).

It is more important to realize that product co development would be a long term account. When a client plans to outsource a part of the application; he means to partner for a long time and expects quality in return as he would have the clients. One needs to ensure that requirements are captured well so that there is no ambiguity in the future.

Wednesday, February 6, 2008

Outsourcing simplified

Outsourcing is a hot buzzword in the industry these days. Few like, few swear by it.

There are still doubts on the success of outsourcing; its benefits and the problems it creates. It would be easy to understand outsourcing with these three Case Studies.

The Case of a Laundry Press

The Laundry Press business is one of the most successful businesses in India. People would rather get their clothes pressed at the laundry for a small sum than spend time doing it. The press would cost them about fifteen minutes and some change. But in that fifteen minutes, one could read about the stock market, do a transaction and make a couple of thousands. This is a thorough win-win situation, where one would use his time in a more qualitative manner. And the laundry too would be happy making money with his skills.

This would be a good case of a service industry looking after the inventory of a huge retail organization

The Case of a Car service

A total opposite of the above mention scenario, when some body wants to clean his car, he would do it on his own. But, if it required a quarterly service, He would approach the service station. He would not think of doing it. Here, one chooses to seek the specialization from outside for a higher amount of money. What would one gain from here? … Hmm … A guarantee that something as expensive as a car his well maintained and also his life. The money is worth it.

This could be well seen as a product company, seeking co product development and maintenance

The Case of a house clean up

I doubt if any body would opt to give in to have their entire house cleaned by a third party agency. There area lot of risks involved in this. One’s privacy and security is at stake. Secondly, the agency would not be sensitive and emotional about one’s house and belongings. Thirdly, this would be too expensive an offer. Not worth it.

The lessons here are quite simple

Understand the business and apply one of the above mentioned scenarios.

Understand what the client would be happy to give off for others

Understand the specialty skills that the client is look in at and sell those skills to the client.

Try to seek an opportunity in a problem or hindrance to others.

Try to ensure it is a Win-Win situation.

Disclaimer

The postings on this site are my own and don’t necessarily represent Adea’s positions, strategies or opinions.



Thursday, January 24, 2008

Fingerprint of a technical leader

Technical leaders are an endangered tribe. As engineers grow in their career, they tend to move more towards management. A few of them decide to become technical leaders, but unfortunately, they end up as an individual contributor or a developer to be a technical leader. Through out my career spanning eight odd years, I have seen a lot of technical leaders; good, bad and ugly.

Maybe, it is too early to be able to talk about technical leadership. However, I would like to compile my learning’s from my wise men.
Technical leaders mean been able to provide solutions to problems, be an evangelist, understand market trends, adapt to them; and ensure that the organization adapts the new technologies in order to grow. The responsibilities of a technical leader would never end. But here are a certain traits that a technical leader should have in order to succeed.

Emotional quotient
Technical leaders have the right to be aggressive, have negative feeling, get disappointed, etc. After all they too are human.
But, they should remember their mood would mean a lot to the engineering fraternity in the organization. Hence, they should learn to control their emotions.
Enthusiasm and aggressive should not translate to been hyperactive and restlessness. It should be presented in the form of been assertive. They should learn the art of convincing people on taking the right steps.
A lot more thought should be put before it gets translated to words and action. The paper work should be ready in the mind before laying it on the table. Bad presentations leave an awful taste in the tongue.
Anger and negative feelings should not be entertained. Instead of getting angry with a person or situation, it is more important to understand the root cause and try to solve it.
There will be many times that a technical leader would face challenges and failure in a single day. This should be interpreted as the methodology of doing the work is not right, and a new way should be thought of.

Mentoring

It is easy to say, that the team members are mature to learn and teaching is not the job of the technical leader. If the technical leader does not want to mentor, then what is his job?
A good technical leader is one, who is a good mentor. He should not only provide solutions, but get his team mates to think; and think out of the box. He should encourage them to try different approaches. He should encourage his team members to learn new technologies and try to provide an opportunity to be independent.
He should develop trust in the team and be approachable. He should not be judgmental and not point out mistakes; but work on enabling the team member realizes it on his own and provide a solution to get rid of the mistakes.
He should understand what the developers want from the architecture and help them see the value of the architecture. He should enable the developers to use the architecture successfully.

Technology Evangelist

A Technical leader should promote technologies. This may be, officially or unofficially within and outside the company. He should promote new technologies and thoughts through talks, articles, blogging, user demonstrations, recorded demonstrations, or the creation of sample projects.
He needs to keep himself informed of the latest and emerging technologies and evaluate them critically. He should provide fodder to the mind. He should understand and lead the way in promoting technologies and good practices that will enable life to be simpler.

The technical leader should develop an In-depth understanding of the domain and pertinent technologies. He should understand what technical issues are the key to success. He should develop methodologies that work best for him.
A non creative mind and a non investigative cannot be a technical evangelist. Practicality helps. There are a thousand things that are quite alluring; but one needs to be pragmatic while taking decisions and achieving targets.

Always remember, Everything is possible*

* Conditions apply

Business

Technology does not drive business, business drives technology.
One needs to understand the organizations business strategy and direct energies towards that direction. One needs to understand the overall business strategy and translate it into a business vision.
Complementarity, Technology leaders need to understand the market and influence the organizations business strategy. They should be entrepreneurs and visionaries, who can see what the future holds and build a bridge between the present and the future. They should be able to communicate their vision to the required stakeholders. This requires a specialized skill as one needs to understand the organizational structure and communicate in the right terms at each level.


Formalize the communication

Ensure to use formal communication. It will make the job easy. But be careful while using technical phrases. Understand the person first, explain the concept, introduce the formal language and then encourage its usage.

The buck stops here

Remember, that the buck will always stop with the technical leader.

Failure should be accepted gracefully. It means that the solution is wrong. It has nothing to do with the person. Hence instead of pointing fingers (which I personally feel is a cheap thing to do), working towards a solution would help.
A debate with others should be healthy. It is not held to prove a point, but to provide solutions. They should be more open to disagreement and learn.
When a member of the team under performs, it shows upon the failure of mentoring by the technical leadership. A technical leader should understand the team members potential and utilize him appropriately.

Listen first

I have seen many successful technical leaders talk last and leave an imposing thought on the others.
Technical leaders should first listen; to the customers, the delivery manager, the team members, etc. Then understand the problem; separate the problem from the symptom, and then talk of a resolution.

Working the team members

Technical leaders are captains and should lead from the front. But they are not heroes. They need to work as captains. He needs to create heroes. Technical leaders should know how to use the team members to their potential and provide challenges to him. He should be able to take quick and critical decisions. He should understand the common goal and build teams around the common goal.
A Technical lead should be savvy, charming and motivating. He needs to build trust in all levels of the organization structure.

And above all, should be a deluge of passion and dedication towards the common cause.