Agility brings results - innovation in software development
Linda More, Software development is a mission-critical activity, providing many enterprises with a precious source of competitive advantage. It is an activity that has attracted some of the brightest stars in IT and the best are highly treasured. At its heart, software development has always been a demanding environment, with new languages, platforms and methodologies appearing in a constantly changing market. Programmers routinely have a hard time, often working for customers who have only vague notions of what they want, but still need it yesterday. The very first software development efforts were chaotic, based on the premise of “code and then fix”. Applications could develop without much of a plan, growing organically from short-term decisions and without a formal underlying structure. This methodology sufficed for one-off applications, with tightly prescribed functions that never needed to expand. Problems only arose when new features needed to be added or integration with other devices, platforms or applications was required. This trial-and-error development method was prone to bugs, difficult to fix and complicated to test. More structured software development methodologies promised to make the process more disciplined, predictable and efficient. But by emphasising planning, many companies found their software development process had become bureaucratic and their development cycles elongated. And still the accuracy of coding had not improved – programmes still required extensive debugging, but now they came with a mass of documentation. Over the past few years there has been a discernible shift towards automation, scripting and wiring up of components, says Keith Braithwaite, programmer and agile business unit leader at software developer Zuhlke [http://www.zuehlke.com/en/home/] Zuhlke. “These techniques enhance programmers’ ability to write code by removing the overhead of too much housekeeping activity,” he says. “However, the biggest improvement came from reviving the idea that systems are built mainly to serve their users and that therefore system builders need to collaborate closely with users and business sponsors rather than isolating them behind documentation.” As a result, in the past few years there has been mounting interest in a new style of software development methodology, referred to as agile methods. Rather than being process driven, agile methodologies are people oriented, and designed to manage change within the process and the external environment. Agile methods are the antithesis of the over-engineered approach – instead of long-term planning and massive amounts of documentation, agile focuses on delivering improvements in small, iterative stages. While software development methods have changed, so too have the platforms and languages used by the developers. Remember the frantic search to bring Cobol programmers out of mothballs to deal with the millennium bug? Languages and programmers move on as technology changes and the focus of programming has shifted to the web. Clive Howard, partner at internet consultancy Howard Baines [http://howardbaines.com/] Howard Baines, points to the growth of technologies and platforms over the past few years as contributing to the software developers’ dilemma. “Ten years ago there were very few technologies in web development and the only serious platform was the desktop browser,” he says. Today there is a huge range of technologies to choose from – .NET, PHP, Ruby on Rails and Java at the back end to front-end XHTML, JavaScript, Ajax and Silverlight. Together with the increasing variety of platforms, including browser and mobile gadgets, traditional desktop applications are becoming part of the web offering. Better development tools are now delivering improved reliability and programmers are able to develop feature-rich, reliable, scalable applications that provide a great user experience quickly and easily. “The learning curves are shortened and flattened out with new technologies often being very fast and easy to learn and implement,” says Howard. “For example, developers no longer need to write thousands of lines of cross-platform or browser-compliant code. By using Ajax they can simply drag and drop components into Visual Studio or Dreamweaver.” Even with the introduction of componentised tools and vast programming libraries of routines and building blocks, software development is still no easy task. For some firms the overhead of managing a development team has become too much. Outsourcing is now commonplace. While this removes the need to engage expert coders, often the design and specification stages – which can account for more than 50 per cent of the work – remain within the firm. There is also the additional burden of managing an external supplier, whose objectives could contrast wildly with internal imperatives. And while software development services are being offered globally, internal development shops will not disappear overnight, says Tony Baer, senior analyst at Ovum. “Outsourcing is more about managing the change in the division of labour. However, you get what you pay for and the lowest cost will not necessarily deliver the best results. The lower the cost of the coding skills base, the bigger the investment in management costs has to be made, which is why a proportion of development is coming back onshore and even back in-house,” he says. Coding, however good, is always prone to error and never before has software testing been more important. Proof is in the way testing is treated – no longer is it seen as a final activity, tacked on to the end of a development project if the budget allows it. Testing today is an integral part of the development process. Some programming teams even design the testing procedures before embarking on the full specification. “The progression from testing to test early to test first to test driven is the most exciting movement in development I have seen in the past 10 years,” says Zuhlke’s Braithwaite. “Testers have become the users’ friend and developers are learning to love failing tests – counting the test failures creates meaningful progress measures in the development process.” The increasing complexity of today’s enterprise IT architecture has simultaneously increased the difficulty of setting up test environments, says Eileen Beadle, IT manager at wine importer Enotria Winecellars. “It is now more important than ever to consider testing when planning development, rather than testing being something you do at the end,” she says. “Careful design of processes and consideration of how they relate is key. For example, with web-based ordering the relationship between the web front end and the back office is crucial.” Software development will never be static and will always reflect the rapid pace of change taking place generally. The adoption of service-oriented architecture (SOA) has had an impact on traditional application development and is creating an opportunity for so-called rich internet applications (RIAs). These provide the natural presentation layer for SOA, and the adoption of Web 2.0 concepts by companies is leading to novel business processes. According to Michael Azoff, senior research analyst at Butler Group, the future is in RIAs. “With the increasing adoption of SOA and proliferation of web services we need to manage and exploit components and services,” he says. “While developers are excited by the technologies and are embracing them, the relevance for business is whether these ideas solve pain points or open up new opportunities.” Whether using traditional or agile methods, software development remains something of a black art. Even choosing which development platform or language to use poses more questions than it answers. There never will be a single, unifying platform that eradicates all differences. “There are no pat answers to developing or composing applications. It is no longer a case of choosing vanilla or chocolate for the back end, and using generic development environments for churning out logic and presentation,” says Baer. “Competition has returned to software development technologies and archi tectural approaches, making the market interesting again.” Five key software development technologies Rich internet applications (RIAs) These are web applications that have all the functions of a traditional desktop application, but without the processor overheads. RIAs have an intermediate layer of code that resides on the client and acts as an extension to the browser interface by providing the application’s interface and server communication. This additional code adds the richer functionality to the browser as well as generating a faster response when communicating with the remote server. RIA platforms include Adobe’s AIR, Microsoft’s Silverlight and Sun’s Java JFX. Enterprise mash-up tools Mash-up tools allow users to drag and drop software components and web services from a palette or pool and assemble these into a new content service or application. Tools are appearing from major vendors and include Yahoo Pipes, IBM’s QEDWiki and Microsoft Popfly. Agile methodologies The agile software development mantra is – develop quickly and deliver often. Using small teams, often working in parallel and not always in sequence, it does things in small increments, often with minimal planning but high levels of business input so the project can adapt to changes more quickly. Scrum, Extreme Programming and Dynamic Systems Development Method are agile methods. Lean software development Lean software development (LSD) is adapted from the Toyota Production System, a lean manufacturing methodology that stresses eliminating waste and ingraining continuous learning. With software, LSD stresses delaying decisions for as long as possible to ensure that, as far as possible, development decisions are based on facts, not assumptions. LSD’s principles have been described as – think big, act small, fail fast and learn rapidly. Automated software testing tools Testing is critical to any software development process and automated tools are an essential part of the method. There are many kinds of software testing tools on the market, and specific testing tools for the new breed of web applications are starting to appear in commercial and open source forms. Selenium, Watir and WatiN are three popular open-source web application testing frameworks.
Full published article at: http://feeds.computing.co.uk/c/554/f/10978/s/2034e2f/l/0L0Scomputing0O0C2227180A/story01.htm

