A software development strategy is a set of upfront decisions that allows you to come up with an effective set of dos, don’ts and hows regarding the future application design, development and deployment, and move consistently through each step of a development project. Having been rendering software development services for more than 31 years already, we can tell that a thought-out strategy formulation is what every successful project starts with.
In this article, we’ll review the main questions an effective software development strategy should answer, taking into account the specifics of enterprise and product software development.
Will (and can) you develop software in-house?
Mid-sized and large software development projects call for wide-ranging expertise – in project management, business analysis, design and prototyping, infrastructure management, development, QA, and others. Specific competencies may be needed if, say, your future application will deal with modern technologies like big data, IoT, machine learning, or if advanced architectures (microservices), or DevOps practices will be used in a project. The in-house team can lack the needed expertise and bringing it aboard may be time-consuming, not financially effective, or simply more risky.
All-round or partial outsourcing can come to the rescue, but it still may require significant efforts on your side. To make sure a vendor’s work corresponds to your expectations and quality standards, you may need to exercise all-round control over a project and micromanage a vendor. However, an experienced outsourcing partner will be able to minimize your efforts through mature self-management and transparent processes.
How can you cut costs?
To reduce costs, you can:
- Introduce sound QA as early as possible. Revealing and fixing bugs early in the development cycle is much cheaper.
- Re-use the existing software parts (for example, re-use existing functional elements for social security number validation, payment confirmation).
- Use cloud services (for example, storage services, forecasting services, image processing services, security services, payment services).
- Go for open source technologies (check the cost of support).
- Turn to outsourcing.
There’re a lot of viable practices, but remember that many of them have their bottlenecks. For example, open-source platforms may lack regular updates and solid support. Successful outsourcing requires a reliable partner with mature and transparent processes, who is capable of efficient self-management.
Do you have clearly defined requirements for your future application?
The type of software development model will largely define the future project flow. If you see that the future application and the development process don’t imply any innovations in technologies or approaches, there’s nothing bad in opting for a long-trusted linear development process. The requirements, deadlines and budget will be set at the beginning and stay unchanged throughout the project. The project will be much easier to control, won’t demand much of your time and attention throughout its execution.
If the project is going to be large and complicated, requirements are prone to changes, consider evolutionary development. Organizing your development processes in an iterative mode, you will allow your requirements to frame up in the course of development based on the data about previous releases and real user feedback. However, such a development approach will require strong project management skills and your continuous involvement.
How can you speed up development?
Choose the right technology platform
Selecting a technology platform (it includes not only the language but also frameworks, patterns, APIs, and more) is important as the difference in the speed of development may be 2 – 20 times. At the same time, platforms can also differ in terms of reliability. We would recommend using a 4- quadrant matrix to sort the relevant platforms by these two attributes and choose the best match.
Points not to be ignored:
- Make sure you stay compatible with the already implemented tech stack (if any) of your enterprise IT environment or the product line.
- Take into account the maintainability of the chosen technology platform (versions, issue responsiveness, enhancement frequency) and long-term support costs.
The introduction of automation in development, testing and deployment will foster the process too. Some of the key tools and processes of automation are:
- Containerization. Containers are a lightweight alternative to virtual machines. They separate all software libraries and executable files, and, thus, streamline deployment and simplify management of large complex systems.
- Test automation. Test automation means standardization of test planning, design, development and automation of test execution.
- DevOps. The DevOps approach and its practices, like continuous integration and delivery (CI/CD), provide for more frequent and reliable software releases through aligning the development, testing and production environments.
Start with a minimum viable product (MVP) or a first basic version of an enterprise application. This will allow having a working solution with must-have functions that brings value and adding other functions gradually, taking into account users’ feedback. The same principle can apply to testing activities. Essential functions can be addressed first, while less critical functionality can be tested later.
Does your future application need to comply with industry-specific standards?
If you have to comply with strict standards and regulations, including industry-specific ones (HIPAA, IEC/ISO 13485, PCI DSS, etc.), plan to have them in time to build the development processes in accordance with their requirements.
What will be the priority quality attributes of your application?
To a large extent, the quality attributes of your future application will be determined by software design decisions. For example:
- To ensure system modifiability, you should opt for modular, loosely coupled architecture patterns (e.g., service-oriented architecture, microservices- or actor-based).
- To ensure system security, you should isolate the vulnerable data through the introduction of additional mediators and brokers, provide for the capabilities for verifying and encoding data incoming from external resources (users’ browsers, external databases, external web services).
- To ensure system availability (failure tolerance and self-recovery), you can form tree hierarchies to prevent failure expansion, introduce “mitigation units”, avoid the single point of failure, introduce load balancing and message queues to give the overloaded servers time to take a pause and resume its work later.
- To ensure high performance, you can introduce cashing, duplicate the functionality through having multiple instances executing the same task, and involve distributed (asynchronous) computing.
To get all the good at once is impossible. In most cases, an architectural pattern used to enable one attribute can adversely affect another attribute. For example, a tree architecture that enables a system’s tolerance to failure and allows for self-recovery hinders the application’s performance. SOA-based architectures that make an application more flexible and integration-friendly tend to require more developers’ time and efforts, and, thus, more costly. They are also more prone to failures and difficult to troubleshoot.
How will you go mobile?
Mobile is practically a must in the modern world. Depending on your application’s essence and goals, the market can offer different options for optimal mobile-enablement. Most popular options, with each having its pros and cons, are:
- Native mobile application.
- Cross-platform mobile application.
- Mobile web application.
- Progressive web application.
Making an application marketable: do not miss out product-specific elements
When it comes to the creation of commercial software, there arise new problems to be addressed.
What will be the key advantage of your product?
After the comprehensive analysis of market opportunities and competitors’ offerings, decide what will be your product’s distinguishing feature. For example, it can be innovation, customer service, optimal value-for-money, excellent performance, or targeting a specific niche of the market (for example, developing a language learning app for people with vision disabilities). The chosen target will define the future course of development. It will influence prioritization, resources allocation and the metrics set up to track the success.
How can you get feedback as soon as possible?
Getting early assessment and feedback is critical to delivering the product that sells, especially when users’ needs are hard to predict, or they change rapidly. For that, you can provide for intense prototyping, starting with the launch of an MVP to attract early adopters on board, offer trial versions.
Also, check our recent guide to the product development strategy for a deeper and more detailed overview.
Last but not least
Making key decisions at the early stages of the software development project, you’ll be able to estimate the project timeline and budget more accurately, allocate resources better, find a more appropriate outsourcing vendor or create the needed project in-house team faster.
Flexibility is an essential element of every strategy. Circumstances (limited competencies, limited budget, limited time, industry regulations) can seemingly leave no choice. However, try to avoid bias and keep away from favoring/discouraging an approach, a practice, or a technology just because you do or don’t have the skills and capabilities needed. Instead, plan gaining the missing capabilities through hiring, consulting and outsourcing.
We’ve already successfully undertaken ~3000 projects. Leverage our all-round software development services – from consulting to support and evolution.