Friday, March 23, 2007

Learnings on software development and Digg posted an article on the learnings from ten years of software development.

May I add:

2. The difficult part of software development is communication

Primarily, this boils down to both verbal and written communication. Both are used at different combinations at different scenarios. When you are discussing features or effort or schedule with your customer, it makes sense if these are written as it allows you to archive the information and refer to it at a later point of time. Who knows, six months down the lane, it would be you who would be scrambling down your e-mail chain trying to figure out why a feature has to be implemented the way it is.

Even if you have a verbal discussion, it is a good idea to follow up with the minutes or a gist along with a set of action items.

On the other hand, when it comes to appraisals, evaluation or goal setting sessions, it is primarily verbal communication followed with the action items.

3. Learn to say no

Timeliness is also an important factor. One of the fundamental mistakes that I did during my early stint of project management was accepting insane deadlines. Event if you did and later find getting it done an impossibility, let the customer or client know early on that you are having problems. Your clients will be more understanding if they get to know the problems early against the last minute and will be able to make amendments like dropping a few lower priority features or diverting more resources to move some activities off the critical path. The best advice is to simply so no in the first place or ask for re-prioritization.

9. It all comes down to working software

To create workable software, it does not merely take technical skills to accomplish the objective. You are also required to have adequate domain knowledge to understand and query your customers to make decisions.

Take the time to learn about the domain, the application and how your customer envision to use your application.

Few other things that I found useful:

# Get your team's buy-in

When you make up a schedule, before sharing the milestones with your customer, ensure that your team buys in the schedule.

# Share a common goal

When working with multiple functions (like QA, testing, development and so on), ensure that the common goal is communicated and all are in adherence to them. For example, the delivery goal will be to ensure the product is shipped with the promised features on time and matches the quality requirements. Teams should focus on amicably resolving issues rather than create problems and make things difficult within.

In addition, as already indicated, the team will have to ensure that the features that are developed will actually benefit and is usable by the customer. That would require the domain skills to play in.

Monday, March 19, 2007

Just googling about!

It was search at first, and followed be web-mail with extra-ordinary storage. Then came the google blogger and now picasa, to show your photography skills online. So, checkout what I have now...

Monday, March 05, 2007

Dot Net development the free way

There is a new trend catching up... More mainstream application targeted towards the x86-architecture tend to move towards the Dot Net platform as compared to Java since a few years back. With majority of the users holding their roots to Windows, Dot Net seems to be better in terms of performance as well as integration with the OS.

That's why I decided to learn Dot Net programming. With learning to programming using the Dot Net framework, comes the question of getting a compiler, editor or an IDE.

Microsoft has provided the framework SDK for free for anyone to install. But unfortunately this comes along with command-line tools like the raw compiler or the console based debugger. Agreed, Visual Studio 2005 is there. But, it does not justify the cost to just learn a new programming model.

The alternatives?

A few exists. SharpDevelop, an open source IDE is available for those who are interested in a true blue open sourced IDE. But it has many kinks the last time I checked. Being an OSS product, it is under constant development. So I decided to lay it to rest for some time until the product is mature and / or has most of the features I require.

In the mean time, Microsoft has also announced Visual Studio Express 2005 which is available for download here. It is technically free, but requires you to register with Passport and MS may collect some information on the usage of the tool to enhance the user experience in future editions.

Read here for a comparison of SharpDevelop and VS Express. Both match each other feature wise, where SharpDevelop seems to have an edge on simplifying programming (like plug-in support, language conversion etc) where as VS leans towards database support and integration.

VS Express

I chose to install the C# version (separate downloadables are available for ASP.NET, J#, VB.NET and event C++.NET). You can choose to include the MSDN documentation, SQL Server Express Edition and the Dot Net 2 Runtime if not already installed.

After a couple of hours of downloading, I had the development environment set up on my laptop and was able to develop simple applications.

A nice benefit of using VS Express is, you also get a few 3rd party controls that you can start using in your applications. Those include a spreadsheet control, a ribbon-bar control like those you see in Office 2007, a charting control and more. There are commercial products which are given away for free with VS Express. Indeed, a great way to start development!

Going forward...

So, what am I going to do with VS Express? I have a few ideas to implement, starting with:

A simple mileage calculator - which would help you record your vehicle's performance and draw charts on how your monthly burn rate. It would relay on a simple serializable data model or standard CSV format which will eventually be migrated to SQL Server express as the data becomes huge.

A kid's CBT framework - I used to find GCompris ( useful when I am in the Linux environment. Unfortunately, lack of documentation to create new activities that are relevant to my kid's current educational needs is not available. Further, I have to learn GTK programming.

I heard and read that Dot Net has very good GDI+ support which would allow creating a simple framework that can be controlled by editing simple XML scripts rather than get into the build and release cycle of normal programming. That would help in releasing a simple test module quickly during the exam cycle or a small game to satisfy my kid's needs.

Microsoft has recently provided the XNA Game development framework for Visual Studio Express users. It is a DotNet wrapper for game development that can deploy games for Windows XP as well as the XBox 360 using the same codebase.

UML modeler - There are no good free tools that does diagrams well as compared to Rational (IBM) Rose. I had tried out ArgoUML ( which is plagued with UI issues and Umbrello (, the KDE based modeler that does not have a lot of support for some of the diagrams. I had always been fascinated with Visio and other diagramming tools and would be implementing a framework based on that to allow for UML and the Rational Unified Process.

A traffic simulator - I am always unhappy the way the traffic signals operate. Most of the time, I see the signals taking too long or short on some roads at Chennai. The signals at Anna Salai proclaim that they use synchronizing technology, but I still fail to see any difference. The movement you start from an intersection, and reach the next, the red shows up. Based on the estimated speed on the lane, shouldn't the next signal switch to green when we arrive? A simulator could simulate traffic patterns on all major roads so as to find the optimal wait time before it changes to green.

Expect to see the sources at SourceForge soon!


Overall, a great way to program DotNet application. But don’t expect to use the same from work as you would be expected to purchase the full blown VS 2005 and you would not not want to send your sources or at least portions of it to Microsoft as part of their data-collection activity.