Originally I shared this post on Syndicode blog.
In my custom software development handbook, I talked about and shared different nuances to consider before someone hired a dedicated development team to work on a product. In addition to access to the core business data, signing an NDA, and many other non-functional but important issues, you have to understand custom software development process stages.
Custom software development is an iterative process that goes through defined process stages to implement all the required features and reach the desired result. Even if we aim to create a custom product specifically tailored for the specific group of users or an organization, the development process still heavily depends on software development methodology your software development partner follows. (For example, Syndicode follows Agile methodology). But the main iteration stages are pretty similar.
Сustom software development process
includes the next stages:
Analysis and Planning
- a collection of requirements,
- changes management,
- risk management,
- software architecture.
- backend development,
- frontend development.
- Quality Assurance and testing
- Intermediate deliveries
- Maintenance (software evolution)
If you're looking for details, here they are.
Analysis and Planning
Collection of requirements in custom software development is a cornerstone. At this stage, we understand the niche, business values and plans of our client. Whether the client wants to launch a web app for logistics or develop an IoT platform, together we need to go through a Discovery Session. This is a meeting (online or offline) between client's and developer's team the main purpose of which is to define a tech stack and product's features to be implemented. Tech stack for custom software development might contain a bunch of different technologies like Ruby, PHP, NodeJS, GoLang, Python, Swift, Kotlin, Elixir and so on... They are defined according to a technical specification created by software architect or lead developer. Find out the other Discovery Session tasks, key participants, timeframe and results.
Software development research aimed to understand the current tech trends and main characteristics of the technologies meant to be used in this particular project. All the difficulties and best practices count. Apart from the tech side, project manager and business analyst do research about implementation and maintenance prospects. SWOT for current competitors should be prepared as well. After this research, we usually create a plan for the software development process and wait for the client's approval.
Changes management helps us to prepare, equip for and adopt all the possible changes that might appear during the process of custom software development. Because we might face changes in tech, design, business needs and priorities from the client or even the end-user anytime. Changes management is connected with risk management in software engineering. Here, risk management stands for risk containment and mitigation. We should be ready to act when a risk arises, drawing upon the experience and knowledge of the entire team to minimize the impact to the project.
There are 5 types of risks you can face working in software development company:
- New technologies (that are not tested yet)
- Functional requirements There is a risk that the change in elemental requirements will likely propagate throughout the entire project, and modifications to user requirements might not translate to functional requirements.
- System architecture Wrong platform, component, or architecture can have disastrous consequences.
- Performance Users' and client's expectations on performance should be met no matter the changes and failures occurred during the process of product development.
- Organizational This risk heavily depends on reliability and professional skills of your software development partner.
If you’re developing a web or mobile application, one of the major things you need to get right is the way your app looks and feels. For example, if your field is eCommerce, a poorly designed app will lose you many potential customers. That is why visual design, your brand identity and user experience of your digital product play one of the most significant roles. I devoted a whole page to describe the purpose of the great UI/UX design, the main terms, history, some examples and processes for design development - read a comprehensive UI/UX design guide.
Backend development handles the functionality of web applications. You can't see it on the screen but every interaction in the human-computer system is possible thanks to backend development. Backend development refers to the server side of development where you are primarily focused on how the site works. It is code that manages user connections, connects the web to a database, and powers the web application itself.
Here in Syndicode, we work with many different languages for backend development, but Ruby is our language of choice. Ruby on Rails (Ruby's main framework) backend development helps the workload become easier for the architects and developers through the collection of pre-packaged codes that make the development of the backend seamless and fast. It makes the entire programming a lot speedier and more profitable. As far as most businesses now want to get a web application, I compiled the list of the reasons why Rails is ideal for web app development. And here you can explore the examples of the most famous web applications built with Ruby.
Talking about frontend development I mean everything you can see on the screen. Look, feel and design - that are the 3 main parts generated by code for your digital product in frontend development. Frontend development is focused on the client side of development and responsible for seamless user experience.
For custom mobile development we use Ruby on Rails for mobile backends and RESTful APIs. When there’s no need for heavy effects or computations we use React Native. This technology is beneficial for marketplaces and CRM, or projects where you need just to duplicate what you have on the web and add some geofencing, notifications, and other mobile features. For native development of iOS applications, we use Swift. The same story with Android SDK – we choose it in cases when features could be implemented only in native tech stack. Also, when it’s required in the project, we work with Python, Node.js, and PHP. Also, we are big fans of Flutter.
Of course, the tech stack for custom software development might have every possible configuration, depending on the client's needs, and we are not bound to one technology just because we like it.
QA and testing
Quality assurance is a set of activities for ensuring quality in software engineering processes. This stage ensures that software meets and complies with the defined or standardized quality specifications. QA is a process that checks the developed software to ensure it meets the desired quality measures.
Software testing is the process of checking developed software for any mistakes or bugs. This helps to validate and eventually verify the product as to whether it is ready for the market.
What is the difference between QA and testing? Put is simply, QA enhances the quality via improvement of the development process and testing enhances it via finding bugs.
Intermediate deliveries great because they help to provide a fast feedback loop that immediately show developers the effects of their work. Mistakes are fixed quickly, while beneficial changes can be released and deployed to customers without having to wait for a distant future release date. Find the example of continuous integration and delivery with Github, Gitflow, and Jenkins.
Development documentation stage encompasses all written documents and materials dealing with software product development. Except for pre-development documentation (where you should describe:
- vision statement;
- initial assessment document with stages of development;
- technology stack;
- software requirements specifications;
- wireframes and UX roadmap),
you also should add documents created in course of the software engineering process. There are only two main types of them:
- coding documentation;
- testing documentation.
Also, software development agency must provide post-development documentation that includes:
- support papers, and
- users manual.
Software maintenance is a continuation of the collaboration with the client to improve, modify and update software product after delivery to correct faults and to improve performance. There are 4 categories of software maintenance:
- Corrective - to rectify some bugs detected while the system is in use, or to improve the performance of the system.
- Adaptive - to modify and update when the customer needs the product to run on new platforms/operating systems/hardware/software.
- Perfective - to support the new features or to change functionalities according to the customer's demands.
- Preventive - to prevent future problems of the software. Some problems might be not significant at this moment but may cause serious issues in the future.
Reporting helps us to inform our client about the current stage of development or issues found or solved during the software development process. This is a critical part of effective project communications and management strategy. As in the early stages of development so as in the middle and when the product is released, we prepare a project status report. Also, there is a project management report that includes:
- general product info;
- status Info;
- milestone review;
- project summary;
- issues and risks;
- projects metrics, and so on.
Reporting keeps the client updated to what is happening with the custom software during its development. And reporting generates trustful relationships between a software development company and the client which guarantees transparency and loyalty - the key factors of successful cooperation.
Thanks for reading!