Wednesday, May 20, 2015

Maximizing ROI in software development

In today's competitive marketplace implementing software will necessarily deliver ROI for virtually any kind of business. That gets done by both minimizing the operational costs and by maximizing the market reach of your business product or service. I.e. by implementing a custom CRM and billing platform a company will save money with staff and by releasing mobile applications a company will increase their digital distribution channels.

But there is also a question of investing in creating the software itself. Depending on how you run the project and how well you work with your client, the same amount of functionality can be achieved in different amounts of time and with different amounts of investments (sometimes with astonishingly different amounts of investments). The worse a project is run, the more expensive it gets.

Here are a few tips from our own experience to maximize your ROI when implementing software. Some of these will be obvious, some others won't.

1. Assign highly specialized developers on separate components

Specialized developers write faster and more accurate than generalists. You want to have your database developer work on back-end, your APIs / web services developer write APIs and your front end guys focused on front end. It is a must for them to work well as a team and to communicate flawlessly and as a consulting business owner you should focus your efforts on recruiting them right.

I had the best results with specialized teams who had previously worked together on similar complexity (or higher complexity) projects.

And, yes, there are full stack developers out there who can do them all and they do it very well. They are great! However a lot of projects have enough complexity and require enough upfront bandwidth so that you cannot rely on one person only for any given project.

2. Work agile

Agility gives any project a lot of traction and optimizes implementation costs a great deal! By bringing requirements inconsistencies and defects up early in the processes and by continuously iterating and tweaking the code, you will release faster and with better quality.

I always used to give the example of this major telco project I was involved in. After six month of coding, production release and deployment the client changed a big portion of the requirements. Took us another three month to implement them.

Note that for the agility to work well a few things have to happen: you have to have a great development and business team (easy to work with, highly skilled and non-testy) and the client also has to be interested in working in an agile way as well (some of them are not, it's a culture thing).

3. Pull the most competitive rates per head for the amount of expertise

Weather you employ on-shore or off-shore resources always strive to get the best deal out of your per head developers rates. Important: that CANNOT be at the expense of lack of quality or lack of experience. An inexperienced developer is much more expensive than an experienced one.

4. Use pre-defined & pre-written components / modules. Integrate.

Pre-defined modules and components also give you a lot of traction. Imagine the project of a local school district where they need a web based CMS platform for their school with shopping cart and marketing capabilities. While you can write things from scratch, there are very inexpensive and easily customize-able educational related Word Press themes, pre-designed e-commerce carts such as WooCommerce and pre-written modules for events calendars. Plugging in and configuring these components will reduce the man hours with 60%-70% (!).

There are projects where the level of customization or configuration of pre-written components is higher than others. In those situations it is worth writing from scratch rather than integrating. However in most of the cases integrating saves money!

5. Constantly facilitate between the development team and the client

This comes back to agility. There is a tendency in certain projects for the development teams and the business side not to collaborate efficiently. It's your job as a project manager to keep communication flowing, eliminate road-blocks, mediate and negotiate, keep your developers away from distractions (such as distractions related to internal tech support or non-impact-full technical work items).

Reporting daily progress in an agile way with web links and tangible digital assets is also another great way to keep the client involved and get feed-back.

Involving the client in the decision making process of designing features (even if the client is not technical) is also a great way of collaborating with the client.

Make it a great day!

Adrian Corbuleanu
http://wittywebnow.com