I keep getting asked frequently what some of the key trends are that I see which will have a big impact on how we develop software.  Here are five such trends that come to my mind:


Concurrency:  What’s next with microprocessors?  If you talk to the major computer chip manufacturers, they would tell you that in the next couple of years pretty much everything we see is going to be multi-core systems.  Today, most applications are single-threaded.  We have to enable developers to write concurrent (parallel programming) applications to take advantage of multi-core systems.  This means concurrency has to be enabled at all levels of the stack. 


Global Distributed development:  Every customer that I talk to who does software development is thinking about global distributed development.  I would be surprised if every Fortune 1000 company didn’t have distributed software development teams (either already or soon).  Globally distributed teams communicating via secure high-speed networks are now the norm.  Software development tools have begun to cater to this system and software developers have begun to work with colleagues thousands of miles away.  This absolutely requires collaboration between highly skilled internal and external teams.  This trend will continue so as to best use the talent available on a world-wide basis.   


User Experiences:  The importance of Designer-Developer workflow is gaining momentum because user experience matters. As application developers and website designers/builders continue to use user experience as a key differentiator, designers and developers have to work together even more so than ever. No longer can the designer create a good looking composite picture to define the user interface, throw it over the shoulder and expect the developer to recreate it using code. The process has to be simpler and optimized for an efficient two-way collaboration between the designer and developer.


Bridging Business and Operations:  The ability to drive more alignment between business and operations teams with software development is critical to the successful realization of software as a critical enabler for business value.  This alignment transforms software development from an unmanaged art form into a managed business process.  Historically, developers and IT Professionals have been their own silos.  There is a Chinese wall literally between these two communities.  I see a world where there is a nice bridge (workflow, automation, seamless transition) between these two communities that enable folks to think about design, development, deployment, operations and management as one continuous and seamless workflow.  SDM (Software Definition Model) is a critical component to fostering better alignment and collaboration between software development teams and operations (IT) teams.


Model–driven development:  Model-driven development will enable developers to view and create code using a much higher level of abstraction.  Models will no longer remain disjointed artifacts.  They will become an integral part of the software development process, tracking and creating changes in the code as they happen.  A key component of this is software factories, which is a paradigm for automating software development that results in increasing agility, productivity and predictability across the software lifecycle.