Latest Replies
Wednesday
Mar252009

Development in 5 Years Would be Affected by

I think, that within the next 5-10 years, these will be big players on the development arena:

Object Relational Mapping
ORM is an obvious player.

Especially with the appearance of projects like Fluent NHibernate, that lower the entry barrier for fresh developers, while still keeping mature and production-proven codebase underneath.

What specifically I like about the NHibernate:

  • 10 years of the history.
  • Targeting multiple database engines, while keeping in mind their specifics.
  • Supports Linq.
  • Flexible and scalable.
  • Has its own profiler.

Software as a Service
SaaS is business concept where customer pays for a software on a demand basis. This model will play a growing role as world economy struggles to become more efficient and optimize the expenses.

Obviously software development will be affected by these new business requirements of SaaS in form of deployment strategies, application organization and architectures. Needless to say, that even Microsoft Windows OS is planning to target that approach.

SaaS enforces these additional requirements:

Simplicity of the deployment - it should be dead easy for the customers to sign up. ClickOnce deployment technology may lend a hand here; using browser-hosted applications (i.e.: Silverlight) is another well-known approach.

Configurability and modularity of applications - efficient business model requires precise targeting. This, in its own turn, requires different feature sets available for the customer, based on the license acquired.

Although there is no silver bullet to help with this item, Inversion of Control, solid development patterns and principles, enforcing design rules and using established and proven frameworks might help.

Efficient development infrastructure. Since it becomes easier and cheaper for the customer to move from one software offering to another, we've got to fight for him. This comes in form of new features being rapidly implemented and delivered in response to the market changes. Software has keep up as well and be able to evolve rapidly.

This, in its own turn, requires an efficient development infrastructure that drives the development process with low friction (ideally one-click to build, test, package, deploy and configure). Any form of continuous integration and automated QA would help you on this way. Specific tool examples range from open-source CruiseControl.NET and up to the Microsoft TeamSystem.

These things are also essential:

  • proper project management;
  • test-driven development;
  • development guidelines being established and enforced.

Cloud Computing
Cloud computing (i.e. in form of the Microsoft Azure offering) is a vivid example of the SaaS concept. Cloud computing focuses on providing computing resources (i.e.: web servers, work or storage nodes) which are usually dynamically scalable and virtualized.

Cloud computing, being an example of SaaS, creates a new opportunity for development projects by allowing to build cost-effective and scalable applications without paying the price of creating and maintaining your own data-center.

Yet, this new technology also brings along a couple of its own challenges:

  • the area of cloud computing is rather new and frameworks (and any implementations) would currently be bound to a specific service vendor;
  • there is no solid body of development knowledge on addressing issues of scalability, deployment and provisioning within the cloud environments;
  • market would be more or less established only by 2012-2015 (some report by Gartner).

Parallel Execution
Cloud computing imposes new types of technological constraints over the software. First of these is the distributed nature of the computations. In clouds processes and workflows may and will happen concurrently on a different nodes. We have to handle this while dealing with the concurrency issues, keeping the data in sync and avoiding all types of performance bottlenecks.

By the way, do you know about the bug in SQL server 2005 and 2008 that messes up the scope identity in parallel execution scenarios?

Additionally, another driving force toward the concurrent computing is the computer technology itself. We are done with the MHz race, like it was in Pentium era, and are going into the CPU core race instead. Software will have to follow.

The story starts with multi-threading and sync primitives and goes all the way up to the architecture level, where we will hear more of:

Rich Internet Applications
RIAs (as in Microsoft .NET RIA Services) will be important as a concept that helps to unify and simplify .NET development effort that allows to deliver rich business functionality over multiple presentation frameworks at once. There is still a long way to go till the approach will be efficient and understandable, but it looks like it is heading in the right direction.

Silverlight 3.0 and its support by Mono framework is definitely to play its role there.

That's pretty much it for the big players. We've got some good UI composition framework for .NET still missing from the picture (Prism or CAB have too much friction in them) along with robust set of enterprise libraries (something better, than EntLib for the similar reasons). But I'm sure they will eventually show up.

Another missing component is some understandable .NET framework and guidance for building light-weight rich clients on mobile devices.

What did I miss?

You can continue with this reading:

« Testing MVC Controllers with Mock Container | Main | Some OSS News on Lokad and Autofac »

References (2)

References allow you to track sources for this article, as well as articles that were written in response to this article.

Reader Comments (1)

I would add Dynamic and Functional languages.

March 26, 2009 | Unregistered CommenterAlex Simkin
Comments for this entry have been disabled. Additional comments may not be added to this entry at this time.