One of the biggest impacts of cloud computing is how it enables an organization to, in effect, outsource the data center. This has huge benefits for scaling in production, but it also transforms development. Instead of waiting for a turn on a test server, anyone on the team can spin up a server whenever necessary for just a few pennies.
What if we applied that same approach of using outsourcing practices to software development and delivery?
Software development outsourcing is possible -- even common -- in certain aspects of the software development process. But it does not have to be limited to testing or other phases.
Breaking down the software development lifecycle
Traditional IT looked at a project as a series of steps, with phases devoted to each activity: planning, requirements, design, programming and so on. In modern software development, Agile and DevOps approaches dramatically compress those steps. Work that might have once taken months can be accomplished in hours because phases can now be viewed as activities, blurring the difference between roles. For this reason, organizations accustomed to Agile and DevOps methods might find it challenging to peel away and outsource some of those phases of the software development lifecycle.
To help, let's talk about the elements of application development and delivery as independent items.
Planning. This might sound like the activity least likely to be outsourced, but it is possible to turn over planning functions to an outside group. Large organizations often will hire a vendor to handle parts of the planning, such as the creation of a portfolio management office or project management office. That contractor can handle vendor selection and credentialing as well as the necessary interviews so that your team doesn't have to.
Requirements. Like planning, this depends on how straightforward the requirements are and how much subject matter expertise is required. For internal software, a great deal of the requirements process may relate to negotiations and how to keep people happy. An external party can make the discussion easier. In some cases, the conversations will go poorly; with outsourced requirements, the specialist goes away once the project is done. This can be seen as an asset.
Design and prototyping. Digital design agencies do more than create logos and brochures. Most modern agencies have the expertise to do a full rebrand and website launch. This can be handy if the IT department does not have access to a team of creative professionals. Likewise, a major digital project might require the services of a user experience expert, a position that might not exist on the company payroll.
Software development. A company without real expertise in software development might decide to outsource the programming piece of a project. The theory here is that outside programmers won't go too far off the mark as long as in-house staff handle the testing and requirements work. And, in the event it becomes necessary for a company to scale back, the people in requirements and test roles can be reassigned and the vendor's contract can be cut.
Testing. Like it or not, the perception is that software testing delays development. In addition, there is an expectation that testing be independent from the rest of development. For these reasons, testing can be a good thing to outsource. A classic arrangement is to conduct development work during the day and perform testing at night, sometimes in a different time zone. This can work -- if the expectations are extremely clear. Often testers will have questions, and those likely cannot be answered until the next day; also, answers might well lead to more questions. Suddenly, four days have passed. Consider carefully how clear your communication is, and how much domain knowledge is required. If the software development outsourcing engagement is large enough, the vendor may provide several people in the same time zone, doing the work alongside the rest of the staff.
Deployment. Exactly who will move the code from test to production is usually a choice between two options: the programmers do it, which can be fast but prone to errors; or a third party does it, which can entail delays and added costs. Outsourced deployment probably won't mean hiring some sort of push-to-production team -- more likely it will be the creation of a continuous delivery pipeline. An automated build-and-deploy project is one of those classic good ideas that never quite gets to the top of the priority list. The requirements are reasonably straightforward, and the enhanced flexibility it provides a business makes the value proposition clear. A continuous delivery pipeline could be a straightforward project that a small consultancy could do for a fixed cost, reducing your organizational risk.
Styles of outsourcing
Before you move ahead with software development outsourcing, consider the model of engagement. Managed services would be the simplest approach: You turn over a particular task to a vendor, and that vendor becomes fully accountable for the work. Staff augmentation, meanwhile, adds a few people to existing teams but without creating entire teams.
Outsourcing vendors that specialize in development, testing or related activities in the software lifecycle can bring expertise and economies of scale. And, because they support many customers, an outside firm should have the experience and skills to take projects and quickly ramp them up and down.
To manage work done by an outsourcing company, real-time dashboards with detailed data are much better than a weekly or monthly slideshow update.
When you consider how your IT strategy will enable the company's business strategy, software development outsourcing can be a powerful tool to reach for. Just be sure to carefully define your expectations.