Tuesday, January 23, 2007

What are some trends regarding the future of software development?

Blogs - A growing number of big-name software developers are finding that they can make better software applications if they share information with potential customers from the start and incorporate customer feedback into development decisions. While developers of games software have used this method for years, business software makers are now also catching on and using blogs (Web logs) as an important part of the development process.

Big-name support for independent software vendors (ISVs) - Big players like Microsoft, IBM, and Sun have recognized that they cannot fill every niche industry’s software demands, so they have begun to actively seek partnerships with small ISVs, in hopes that by encouraging ISVs to focus on niche vertical industry applications, everyone will benefit.

Component-based development - In this approach, software is developed in modules that are linked dynamically to construct a complete application. Charles Simonyi (creator of the WYSIWYG editor) believes that eventually, software development will become so modular that even lay-people will be able to assemble components effectively to create customized software applications.

Continued improvements in refactoring tools - - Eric Raymond, a leading philosopher about program development, maintains that the concept of refactoring is consistent with the idea of get-something-working-now-and-perfect-it-later approach long familiar to UNIX and open source programmers. The idea is also embodied in the approach known as Extreme Programming. As software applications become larger, better refactoring tools will be required to maintain code bases and diagnose bugs.

Outsourcing - Using this approach, software companies hire employees around the world to take advantage of time zone and labor/cost differences. Proponents say that in effect, software development teams now have a 24-hour work day, and are able to provide fast turn-around. Detractors say that outsourcing parts of a project leads to sloppy coding and only works if there is a high degree of coordination regarding modularized tasks, and above-average communication within the team.