You have an idea for a web site, a web application, or a piece of software for a business process. There are a number of routes available to build it which include building it yourself, hiring a freelancer, or engaging a development team to complete the work.
This post will look at engaging a software development team, either an internal to your organisation or an external company, and what you need to do to ensure a successful outcome to the project.
Define the project
Begin by outlining the goals and business objectives the project will achieve at a high level. If you have ideas on what functionality your software should contain define these as well, though your development team will help you articulate the functionality as defined by goals and business objectives. If your target audience is known, define who the application is going to be used by.
A Minimal Viable Product (MVP) is the minimum amount of features in the software required to meet your project goals. During development new ideas and processes always arise. Becoming side-tracked with adding and developing work which additional to the scope leads to delays in launch and budgetary pressures. Instead, keep the MVP in sight and add any new features to the project backlog for development and release post launch.
Outline the budget for the project. If you are looking for a fixed price contract you will need to keep some budget back for any necessary additional changes at the end of the project. If you're working on a time and materials basis, having estimates from the development team and tracking spend throughout the project is important. See more on software development pricing.
Engaging a team
When you engage an external development team ensure a robust contract is in place. This should cover process for planning, development and delivery, support and maintenance, data protection, hosting, warranties and most importantly intellectual property ownership of the software.
Ensure the team has sufficient experience in development and delivery of successful projects. Ask for some examples of work produced by the team and check that they are in line with your expectations.
There are many different methodologies when developing software, Agile, Scrum, Extreme Programming, Lean, Feature Driven Development and Waterfall methods and so on. Teams can follow their own 'versions' of these methods or have a custom method. New methods are being continuously explored to increase efficiency and improve the development process. Each method has it's own advantages and disadvantages. Ask your team to outline the process they will employ and how that will work to meet your goal or business objective. Understanding and being a part of the process as the main stakeholder will help with the successful delivery of your project.
Broadly speaking, developing software can be broken into the following areas:
- Concept / Idea
- Requirements / Planning / Roadmap
- Implementation / Development/ Review / Test
- Host / Deployment / Release
- Support / Maintenance
The methodology your team uses will cover these areas with an approach specific to that work flow.
Concept / Idea
This is your goal or business objective. Your team will use their experience to help you outline in more detail how to bring your concept to life. High level requirements are defined and refined. This phase outlines what the MVP should deliver by the end of the project.
Requirements / Planning / Roadmap
The overall scope for the project is defined and broken down into areas to be implemented. Tasks lists and schedules are put in place. Stakeholders are identified and areas for responsibility are delegated. Aligning your budget with the effort required to implement the plan out is also important in this phase. Delivery dates should be set at this stage and in the event the initial deliver date is also the go live date this should be stated and agreed.
System architecture is designed and documented and the design for the project can be completed in this phase.
The success of your project will be influenced by the planning stage of the process and at the end of this phase you may be required to sign off on the work and outcomes carried out on this phase. You should seek clarity and understanding of what is to be completed. Missing functionality and features in this phase that are discovered later on will add to time and costs to your budget.
Implementation Development/ Review / Test
This phase is mainly undertaken by the development team. They will develop the software as outlined from the previous phase. The team may seek further clarity on some features in the software. New ideas and functionality may stem from these discussions. Change or adding in these features and ideas will lead to delays and budget overruns. Putting some of these ideas into the backlog for future development may be the best approach to meet the project targets.
Ask for regular updates on progress, the team may ask for additional feedback and clarity on functionality, feedback on the progress relating to the meeting the targets in the schedule should be given regularly. Estimating feature development time exactly is difficult in the planning stage and you can expect to see gains and slips in the schedule as development progresses.
Once development is complete, the working application is reviewed against the defined functionality and requirements and gaps identified are fixed.
When the review is complete, the software is tested to ensure all functionality works. When this is complete it is handed over to you for User Acceptance Testing (UAT). This is where you will test the software against the requirements. Issues are highlighted back to the team and are fixed.
Host / Deployment / Release
The hosting requirements are scoped in the planning stage and the environment prepared and built. You should ensure adequate application and server monitoring are included in the scope for the project. This will help with identifying issues as they occur in the live environment. A backup and disaster recovery plan should be in place to ensure continuity of delivery in the event of an outage.
Once the site has completed UAT, a deployment process for the code is made ready and the site is deployed/released to the to the live environment (production) for your users.
Support / Maintenance
A software product, no matter how small, is never complete. There will always be support and maintenance required. Depending on the size and complexity of the project support and maintenance can be offered on an ad-hoc basis or as an ongoing process. For websites and applications of any degree of functionality a support and maintenance contract should be put in place.
The terms, response times and methods of communication for support should be defined and agreed upon. Support items may be prioritized and different response times applied to those.
Support may be on an ad-hoc basis or an agreed number of hours per month applied to the project for updates and changes.
For maintenance, a list of tasks to be completed on schedule of maintaining the application should be identified and agreed.
The server, languages, and software libraries used to build your web application will require continual updating for new features and security issues. Patch management is a process of managing what and how often these updates are applied to your software and server.
The technology stack are the pieces of technology used to build the application. For web based applications usually the stack consists of a number of different programming languages, software libraries, content management system and software frameworks.
There are such a wide variety of options available and each team will have their own preferences. For the vast majority of requirements for web applications many of the currently available languages can used. Trying to find consensus on the best one to use will be difficult with different teams promoting different approaches. The best approach is to ensure the technology is widely used so it can be read and understood by other development teams and there are future maintenance patches available for the language. This applies to any software libraries, content management systems and frameworks used.
Security for your application will be provided by your team. Ensuring the application is secure is usually undertaken through a series of processes, from the different code bases used through to server configuration for hosting. An application being considered secure is not definitive, but rather an understanding that there are sufficient processes in place to ensure layers of security are in place at each stage of the technology stack, for example having a proper patch management process in place to update software as new releases become available. Penetration testing either by your team or a third party may be carried out on the application to discover any areas that contain vulnerabilities or misconfiguration.
Access to assets
If you are taking over ownership of the intellectual property for the project ask which processes are in place to allow you access to the materials either as the project progresses and have it contractually stated in your agreement with your development team.
The assets required may be the code base, database, hosting outline and access details, drawings and documenation created for the project.
Whether you are engaging a one person freelancer or a large design and development team to build your application the items outlined in the post are some of the basics that need to be covered to ensure a successful outcome. Teams will use different approaches and terminology to their approach. You should ensure these are followed to achieve succesful outcomes.
In conclusion, to achieve success, define what needs to be achieved, break it down into small doable steps, assign responsibility and schedule each step. Test against the requirements when the step is complete . Deploy when signed off against requirements. Monitor the schedule and ensure the team is working through it.