This chapter will cover different ways to identify functional and non-functional requirements using process flows during the solution design phase of the project. We will cover aspects where the designed solution is flexible, maintainable, and scalable. We will also cover data-related requirements such as the volume of data, legacy data, and data transformations. We will take all these aspects of the solution and document all the steps within a process flow in the functional document.
In this chapter, we will cover the following topics:
By the end of this chapter, you will have gained firsthand experience with solution design aspects and in elaborating functional and non-functional requirements. You will have also learned to effectively analyze and enhance process flows and be able to identify and finish documenting the functional design document.
In the previous chapter, we successfully documented the business requirements in our business requirements document (BRD) in business-understandable and system-agnostic terminology. Solution design enables us to dissect high-level business requirements. In this section, we are going to refine them and deconstruct them into more granular details in the form of functional and non-functional requirements. These detailed requirements are documented in the solution design document, which is also called a functional design document (FDD) or a functional specification document (FSD).
The following steps define the hierarchy of the flow of requirements:
There are two levels of solution design processes:
The solution architecture design process is also known as a high-level solution design and provides potential and alternative solutions. This is when we decide which technology to utilize; for example, what type of middleware do we use for our interfaces? Is it on-premise or in the cloud?
We arrange all the functions in a logical sequence so that we can trace the process from start to finish. This process is iterative and the decomposition continues until we reach a stage where the solution has been analyzed, understood, defined, and agreed upon. At this point, the system is architecturally defined with all the potential requirements identified, which are verifiable, feasible, and consistent. We do our best within the constraints and project timelines, run this through a few iterations, and freeze the version and baseline. There may be a few open-ended functions that are not on the critical path, which can be added as assumptions and need to be determined soon.
Note
Always develop multiple conceptual flows; we need at least two alternative paths. This needs to be done at the same time we create the primary flow. We always need to do a what-if for every step in the flow. Each path should achieve the desired goal or objective.
The component-level design process is also known as a low-level solution design. The high-level BRD requirements are logically decomposed into the lowest-level functions. Each function is then analyzed for technical feasibility and technical aspects of the requirements such as availability, performance, and reliability to achieve an optimal solution. We use a logical decomposition process to improve our understanding of our technical requirements and their dependencies and relationships.
Solution design always starts with the conceptual flow that we created during the requirements gathering phase. We take this conceptual diagram and elaborate on it, along with the BRD requirements. During the initial iteration of solution design, we include and collaborate with the architects – the enterprise and solution domain, business analysts, technical leads, lead developers, and SMEs. We can use many tools to visualize and elaborate the conceptual flows into more granular steps in technical terms. During this phase, we consider the technology that shall be used while developing the solution design. An experienced domain expert will be able to identify most of the non-functional requirements and confirm or clarify the feasibility of the functional steps in the flow diagrams. We will discuss this in more depth by covering real-world scenarios. There, we will identify the hidden functional and non-functional requirements.
Note
There is no such thing as a perfect solution. With constraints on time, resources, and technology, the best we can do is come up with an optimal solution. Based on the complexity and criticality, we can use process flows and prototype techniques to gain more understanding and keep refining the solution design until we reach an optimal solution. This optimal solution approach has to be agreed upon and approved by key stakeholders. During development, design thinking helps us evaluate our development work, fine-tune the solutions, and make it even more optimal and ready for implementation by our technical team.
During the solution design phase, we identify functional and non-functional process flow steps. In the next section, I will walk you through a simplified practical real-life process flow and discuss how to identify new process steps.
We reviewed functional requirements at a high level in the previous chapter. We analyze these requirements from a technical perspective during the solution design phase and capture hidden and elusive requirements. These requirements are functional but not obvious to business users, without which we cannot enable the desired functionality effectively – for example, reducing redundant steps by automating certain processes.
Let’s take a look at a realistic scenario. I have simplified very complex scenarios for the sake of clarity and understanding.
In terms of the BRD requirements, the following are the key ones; they are interdependent:
The process flow is for opportunity product alignment, but we have to review these three business requirements as they are interdependent. If we don’t align the products to the account record accurately, automatically adding products to the opportunity is not possible.
Take a look at the following diagram:
Figure 6.1 – Process flow – opportunity product alignment example (functional)
The process starts with a user (Sales Manager) creating an account record. We will try to keep the flow charts system-agnostic. Since we already know that our software system is Salesforce, I used Salesforce-specific terminology so that we can identify system-specific requirements.
Let’s walk through the process flow from start to finish:
It takes about three iterations to create and agree on this process flow. We refine each iteration based on the feedback. The more the team collaboratively discusses the flow steps in detail, the better we will be able to identify the gaps and missed steps.
Imagine what would happen if you had just one session with a key player and you, as a Business Analyst, presented this and got an agreement without getting any feedback. What if, at each step, the flow breaks after you deploy this to production? Without accurate process flows and being able to understand every stated and unstated requirement, can this be fixed by the support team after the project team has been disbanded? I will leave this to your imagination.
Now, let’s take this through a few more iterations and collaborative workshops/CRPs with our key team members. We must question each step and see where it can go wrong and how we can make it better:
I am sure that if you review the process flow carefully, you will certainly find a few more requirements. Take a look and see if you can find two or three more. We try our best to identify all possible steps within the project’s allotted time and available resources.
Note
Our goal is to identify all technical requirements to fulfill the business needs. How and when we implement them will come during the project roadmap. They can be staggered in releases; all core functions with some level of manual workaround should start within the first release and we must keep automating as we progress through future releases. We must lay out the end-to-end workflow so that users can get from point A to point B in the best possible way.
Next, let’s review the same process flow and see if we can find any gaps concerning non-functional requirements.
Non-functional requirements specify the quality attributes of the underlying system. They are not easy to capture and not always obvious. Many of the non-functional requirements come to light only during the testing phase and especially during regression/load/stress testing. The objective of these requirements is to enable the sustained availability, reliability, and performance of the software. They help you ensure a good user experience and ease of system usage.
Take a look at the following diagram:
Figure 6.2 – Process flow – opportunity product alignment example (non-functional)
It gets easier to identify non-functional requirements if you draw out a flow chart and analyze it from start to end. At each step, we must analyze the non-functional aspects of every step in the flow for performance (the response time during peak usage), reliability (whether it’s reliable on mobile devices), availability (whether the system is available 99.9% of the time), and so on. Detailed collaborative sessions with multiple iterations shall yield a good set of all possible non-functional requirements. Let’s list a few here:
Hopefully, you can find a few more requirements if you review the flow again. Some of these non-functional requirements may vary based on what software system you implement. Also, some of them may not be obvious from a BRD or process flow perspective. For example, let’s say that we are doing a global implementation – do we need translations? This will be a significant amount of work as screen fields, reports, workflows, and so on need to be translated to user locale-specific language.
Here, you can see how easy it is for us to capture these invisible requirements by exposing them on a simple process flow chart. Also, these flows are easy to understand for the team members and help them collaborate better. Start small with a conceptual flow and keep building it iteratively. If you plan and facilitate a few sessions well with the right set of participants, I am sure your team can reflect the business process and create optimized flow charts.
We can summarize both the functional and non-functional requirements into a single flow, as shown in Figure 6.3. Some team members like them to be separate as it is easy for them to understand functional versus non-functional requirements separately. Other team members prefer to add them to a single view. Pick the one that best suits you and your team:
Figure 6.3 – Process flow – opportunity product alignment example (functional and non-functional)
With the aid of process flows, we can capture functional and non-functional process steps. Process-wise, the flow works well when the user creates new transactions (records). Does the functionality work with legacy data without any issues? This is seldom true and we need to consider migrating existing data from legacy systems. These requirements are not obvious in a process flow, so we need to make sure that we capture these requirements. Let’s review them.
Another important set of overlooked requirements is data conversion requirements. I have seen many projects that do an excellent job of enabling new functionality with a great-looking user interface, automations, workflows, reports, and so on, but they missed one very important requirement related to legacy data. Users can only use great features and functions if they can easily access their existing legacy data in the new system in a usable format. These data requirements fall under functional and non-functional requirements.
Some key tasks that you need to think through while capturing data requirements are as follows:
Now, it’s time for us to document what have we identified so far. We will document these newly identified requirements in a functional requirement matrix.
The functional requirements matrix captures more granular details and elaborated functional decomposition requirements. For each BRD requirement, we will add more granularity, which may result in multiple functional requirements for each BRD requirement. We take the business requirement matrix and add additional columns to capture the checklist fields for other teams – for example, for the development team to check for requirement completeness, feasibility, and so on and for the testing team to check for requirement clarity, testability, and so on. One important column that sits next to the BRD summary is the FD summary. It spells out the description in more detail so that the development and testing teams can get more clarity and details about the requirement. Feel free to use technical jargon so that the team developing the functionality is more comfortable. You do not need to make this functional requirement matrix too complex. Reuse the BRD and add a few more fields as appropriate for your project releases. For better clarity, add functional requirements to one tab and non-functional requirements to the next tab. This will add more clarity for developers and testers. If you prefer, you can combine both into one Excel sheet.
Note
Every requirement in the functional requirement matrix should reference at least one business requirement. Also, every business requirement should map to at least one functional requirement. If not, make sure you identify the redundant (a requirement in FDM but not in BRD) or gaps/missed (a requirement in BRD but not in FDM) functional requirements.
By collaboratively reviewing and developing the process flow charts, we were able to take each BRD requirement and further subdivide them into one or more functional and non-functional requirements. Each BRD item can be split into multiple functional and non-functional requirements, which the developers can use to build and unit test the sub-system or component.
Let’s take a look at the functional specification document (or functional design document):
This is a comprehensive list of key sections in functional documents. As needed, add other relevant sections that you think add value to your implementation. Similar to BRD, you review this with technical and testing leads and SMEs, get agreement and approval from all, and lock this document. You should share this document with business SMEs and stakeholders so that they can review and provide input. However, their approval may be optional. This baseline version shall be your starting document for subsequent releases on your roadmap.
The following are a few tips that are specifically useful during solution design and functional documentation:
Now that we’ve covered some practical tips for success, let’s summarize this chapter.
As projects grow in size and complexity, we need to make sure that we plan and allocate time and a budget for the solution architecture and solution design aspects during the design phase of the project. We can identify all the solution components and subcomponents by decomposing high-level functional requirements.
In this chapter, we learned about the solution design tasks, where we perform architectural design to identify all the steps in the process conceptually. Then, we learned about the functional and non-functional requirements with the help of process flows. Using this new knowledge of process flows, we captured the requirements in the functional requirement matrix. In the end, we reviewed a typical functional document and reviewed various important sections of the design document so that technical and testing teams can understand and use this as a baseline document for the next stage of the project.
In the next chapter, we will cover how to mock up quick semi-working solutions that we can demonstrate to stakeholders and team members and get early feedback on. We will also discuss the benefits of prototyping, conducting, and capturing the prototype by collaborating with the right stakeholders and team members.
3.145.180.71