Modern products and systems are nothing like their counterparts from a few decades ago. From having a single purpose and everything hardcoded in the programming, to having a gigantic feature set and AI-driven decision making; technological tools and products have come a long way.
There was a time when all a car had to do was burn fuel and stay mobile; today, a car is responsible for showing you directions, finding ways to optimize fuel usage, connect with your phone, adjust its suspension based on the terrain, parking and sometimes even driving itself.
Manufacturing a modern car requires extensive and efficient collaboration between different electrical, mechanical, and software systems; it’s a prime example of how complex product development has become in today’s world.
According to Statista, there are a whopping 30.73 billion connected devices in the world right now. The number is only expected to grow. Almost every gadget/application around you needs to connect with a remote system or other gadgets to be of value.
From your personal assistant to your laptop, from your smart fridge to your mobile phone, and from your sensors to your management dashboards; everything depends on something else, which depends on something else, and so on… Building such interdependent applications and systems is expectedly complex.
Similar to the tools and systems, modern product development has also evolved over the years. It’s no longer a straightforward process involving one requirement gathering meeting, one huge development iteration, and subsequent delivery after functional testing.
It’s now a complicated, multi-step process that involves perpetual cross-functional collaboration and continuous optimization of the product.
The modern product development process
Developing a product doesn’t just involve writing code to make things work. It has many distinct, important stages:
- Requirement gathering: The product development process begins with requirement gathering. Requirements can be raised in many ways: e.g. by a system engineer suggesting a way to improve performance, by a senior manager ordering the addition of a new feature, or by a customer who wants more from the system. Getting the requirements unanimously approved by all relevant stakeholders is critical and sometimes difficult, because of conflicting opinions and goals.
- Requirement management/prioritizing: As mentioned above, it’s not just one stakeholder raising requirements. When multiple people raise requirements, and at different times, it poses a unique challenge of managing and prioritizing requirements.
- Change impact analysis: Once the requirements have been finalized, a thorough change impact analysis needs to be performed. This will help determine the viability of the change and the timeline for delivery.
- Design and development: Before a new feature gets developed, its use cases need to be mapped out. This will help in identifying the scope of the development before the actual process begins. Making changes in complex codebases without any prior knowledge of the design components leads to poor code quality.
- Testing: Testing modern software systems and products is a massive responsibility. There was a time when only massive enterprises used to have dedicated QA departments. Today, even the smallest software houses have one. This is because testing interdependent systems and solutions require great care, knowledge, and time. Customer expectations are high, and delivering resilient, available services is of paramount importance.
- Setting up continuous integration/deployment pipelines: In order to deliver products and changes to the customer faster, development teams set up continuous integration/deployment (CI/CD) pipelines. These pipelines automate the building, testing, and deployment of applications.
Challenges faced by Product Development teams
Product development teams tasked with the development, delivery, and maintenance of complicated software systems face a unique set of challenges.
Vague and changing end-user and stakeholder demands:
Customers and many high-level stakeholders are often non-technical people. That’s why their requirements don’t always translate into changes/features easily. For example, a director might say, “I want the location information of the subscriber to appear instantly after I press the button, and not after 2-3 seconds”. However, since the information is residing on a third-party network and their API can’t serve responses any faster, the developers might not have much to work with.
Moreover, requirements also often undergo a lot of changes before they are finalized. Developers are often halfway through the implementation of a feature when they hear that it’s no longer desired by the customer. This can be avoided by using cross-functional collaboration solutions that allow any changes to be escalated to relevant parties before it’s too late.
The system architect thinks that a certain dropdown should only show 3 options. However, the product manager thinks that an additional option should also be displayed. The development manager has a stringent deadline to meet, but because of these conflicting requirements, their progress is hindered. Without the presence of a cross-functional collaboration solution, this roadblock would not be easy to overcome.
People with no technical knowledge of a system shouldn’t estimate the time it would take to make a change in it, but they do. Delivering high-performing, scalable applications by stringent deadlines is a massive challenge.
No official channels for cross-functional collaboration:
The system engineers, developers, and managers need to collaborate to resolve any conflicts and catalyze the development process. However, most organizations don’t have a way for cross-functional teams to collaborate. Everybody processes information on their own tools (Requirement management, change management, issue tracking systems) but there is no collaboration between any of these tools. This leads to discrepancies in information across different tools and a huge lapse in productivity.
No time to resolve technical debt:
In order to meet stringent deadlines, developers sometimes choose the easy solution, instead of the recommended ones. This often involves disregarding the best coding practices and using shortcuts. These shortcuts and easy solutions hamper the overall quality of the code and require extensive rework at a later time. Almost all software applications have technical debt, but in fast-paced work environments, developers often fail to find any time to resolve it.
How and why is cross-functional collaboration the answer?
An organization’s collective success is contingent on efficient, cross-functional collaboration. The easier it is for people to communicate across different teams, the higher their productivity will be.
- Creating and refining system design and models: System modeling is a great way to specify, analyze, design, and verify complicated systems. Languages like SysML provide a great framework to create models that concretely depict the requirements and functionalities of a system. These models can then be used by different teams as reference points for any subsequent developments.
- Connect different tools to create a collaborative mesh: In order for information to flow in real time across different tools, they need to collaborate with each other. By using OSLC Connect products to integrate requirements management, change management, quality management, and product lifecycle management, you can form a collaborative mesh of tools that enables seamless collaboration across the organization.
- End-to-end traceability: Who raised this specific requirement? When did the development of this feature start? Why did the implementation of a certain feature get blocked a couple of weeks ago? Who failed to follow up with the customer after an important feature discussion? Which two parties are in conflict regarding the development of a new feature? All these questions can only be answered if end-to-end traceability of all the important information is present, which in turn can only be achieved via collaborating tools.
- No wastage of development time: Via cross-functional collaboration, features only start getting developed after they have been approved by all relevant parties. Moreover, the information across different tools is always the same, which means that the possibility of wrong/unnecessary development is massively reduced.
- Technical debt resolution: The efficiency and productivity added by cross-functional collaboration save a lot of time. This time can be used in the resolution of some of the technical debt, as discussed above.
- Mechanical, electrical and software components work well together: Many mechanical, electrical, and software components work in tandem to make complicated systems (like cars, building management systems, and heavy machinery) work. Product development teams that deal with these systems need to collaborate immensely and effectively. A change in a mechanical component might also require changes in the software component and vice versa. Using collaborating tools, these changes, along with any other requirements, can be discussed on a formal channel.
- Streamline sourcing, design, development, and delivery: Everyone has access to important information like if a product has been procured, how the initial and improved design of a component looks like, which development stage a feature is in, etc. All this would not be possible without cross-functional collaboration solutions.
SodiusWillert helps teams achieve better cross-domain collaboration
SodiusWillert integrates OSLC-based API tools across the engineering enterprise to enable engineers to do their best jobs. OSLC reduces the complexity and risk of increasingly complex software infrastructures and improves the value of software across a broader set of internal and external stakeholders.
Learn more about our OSLC Connect solutions to help engineering teams optimize complex product development processes.