Monday, September 20, 2010

Key Software Development Trends

More than ever before, today’s developers are open to considering and using multiple technologies to enable them to build solutions smoothly and deliver them to their customers quickly. There are an increasing number of choices available for developers in terms of programming styles. Our goal is to provide fantastic support for all programming styles within our tools to enable our customers to build great software.

Several trends are emerging within the area of software development. Below are some of the most important trends I’ve been thinking about recently. This list isn’t comprehensive of all software trends, but each one represents an area that Microsoft is currently or will be investing in to bring to our customers.

Cloud Computing

Cloud computing allows companies to leverage just the computing resources they need today, scale up to handle peak loads, and avoid the overhead of managing hardware. Cloud computing levels the playing field for small companies to compete against large, established companies at a reasonable and predictable cost. Windows Server, Windows Azure, SQL Azure, and services such as Windows Live, Office, and Xbox Live are now live in the cloud. Microsoft has committed to bringing the best cloud computing platform and services to the Windows ecosystem. The cloud is just one example of a virtualized computing platform, and the next generation of developer tools must enable developers to build software that deploys and performs well in cloud and other virtual environments.

The Web as a Platform

The browser provides a rich runtime environment and friction-free access to applications. Developers are increasingly choosing the web as their platform of choice for software and software development. Increasingly, developers and designers are using tools that offer a rich development, debugging, and profiling experience designed for the web. JavaScript libraries allow web developers to get more done with JavaScript than ever before while reaching a wide audience, and immersive internet applications, such as those written for Silverlight, allow developers to break free of the limitations of HTML and take advantage of a range of resources and features while guaranteeing compatibility across platforms.

Parallel Computing

Moore’s Law, the prediction that CPU performance would double every eighteen months, is now fulfilled by adding more processor cores rather than by increased performance of a single core, bringing the power of multi-core processing to low-end machines. New trends in computing take advantage of inexpensive and widely-available desktop graphics processors for certain tasks. At the high end of processing ability, supercomputing centers are leveraging clusters to perform complex computational tasks. Today, a small handful of programmers have the skills to write code that performs well in multi-core and many-core environments. In the future, parallel libraries, debugging, profiling, and diagnostic tools will enable more developers to take advantage of parallel computing resources.

Proliferation of Devices

With the increasing availability of inexpensive devices that connect to the internet, we all want to access and interact with our data in ways that are appropriate to our devices’ capabilities. We expect to access our online identities and data easily and securely on all our devices. Today, Microsoft provides access to users’ data via Windows Live and Xbox LIVE. With the proliferation of devices has come a proliferation of user interface paradigms that enable natural and intuitive interaction with those devices. As touch-based, speech-based, and camera-based solutions become available and cost-effective, Microsoft is evolving software to take advantage of these capabilities to build intuitive user interfaces. Windows 7 provides great support for touch-enabled applications in the platform. Silverlight and WPF have embraced camera-based interactions and multi-touch, as has MFC. I expect user interface paradigms to continue to evolve and become more intuitive and powerful.

Agile Development Process

Agile development processes, including Scrum, test-driven development, and continuous integration are commonly used in the enterprise and smaller development shops, often in combination with other development practices. Within Microsoft, many teams have integrated elements of Agile development practices to their process. Visual Studio 2010 opens the door for Agile methodologies, offering support for some Agile processes such as unit testing and iteration planning. We will continue to support more Agile methodologies going forward as well.

Distributed Development

Distributed development enables team members to work closely despite geographic separation from each other, bringing together worldwide talent to seamlessly work toward a common project or goal. The experience of a team working across time zones and borders should be as good as the experience for a single developer, but also includes supporting cloud-based development activities such as distributed code reviews, remote paired programming, developer/tester collaboration and resource sharing. Great distributed team development tools will enable developers to build the next generation of software, leveraging the worldwide talent pool.

In Closing…

These trends don’t represent a complete list of influential factors for all areas, but are some of the areas we feel can move software development forward. I welcome your perspective: which of these trends do you feel will be most important in the future? Are there trends you think should be included in this list? Leave a comment with your perspective.

Visual Studio Lab Management

What is Visual Studio Lab Management 2010?

Visual Studio Lab Management 2010 is a new offering in the Visual Studio 2010 release wave. Lab Management 2010 enables teams to configure and manage a virtual lab environment. Lab Management works with System Center Virtual Machine Manager for enabling teams to create environment templates, provision ring-fenced environments, and checkpoint those environments. Using Lab Management, you can accelerate setup, tear down and restoration of complex virtual environments to a known state for test execution and build automation. It extends build automation by automating virtual machine provisioning, build deployment and build verification in an integrated manner. It also enables testers to file rich bugs with links to environment checkpoints that developers can use to recreate complex environments, effectively reducing wasted time and resources in your development and test life cycle. Those checkpoints can be attached to bugs filed using the Microsoft Test Manager enabling the person fixing the bug to open the environment right to the appropriate point in the application flow.

What are the pricing details of Visual Studio Lab Management 2010?

Suggested FPP retail price for Visual Studio Lab Management 2010 is US$1,599. Of course, the majority of customers are likely to qualify for a lower price point based on volume licensing discounts. Feel free to share this data with your customers to help them budget for Lab Management. Lab Management 2010 will be priced as per physical processor (each processor of each lab server must be licensed for Visual Studio Lab Management 2010). Visual Studio 2010 Ultimate or Visual Studio Test Professional 2010 is required to manage lab environments.

A dizzying number of machines need to be set up, torn down, or restored to a particular snapshot so the software team can work at maximum efficiency. Daily builds need to be available on schedule. Multiple virtual machine environments need to be managed. Managing a lab efficiently can be a significant task.

Lab Management enables automation and optimization of the build-deploy-test process, while maintaining visibility into the process, using Hyper-V virtualization technologies. Lab Management stores, manages, and lets you deploy to known configurations and test environments using System Center Virtual Machine Manager. Test Manager 2010 allows team members to create, start, stop, and view environments so testers and developers can collaborate without interrupting lab operations.

Getting an environment configured correctly just to reproduce a bug can take significant time and effort. Lab Management allows testers to provide a link to a virtual machine snapshot directly in a bug report so developers can see exactly what testers see. Developers can spend more time debugging and less time installing, configuring, and deploying.