Latency, throughput, compute power or bandwidth—some aspect always seems to be out there just to ruin your day. Whether you are planning a new product from scratch or your development is getting increasingly constricted by the resource limitations of your system: we are happy to take a closer look and provide the insights and technical analyses you need to make the right design choices.
Where we can Help
Designing a new Product
When designing a new product with both HW and SW components, you have to decide on the hardware platform(s) and software architecture(s) you want to support. But how do you get from “the product should do X” to “the HW needs performance Y”? Or from “the HW that fits our financial budget only supports this much compute and that much data transfer per second” to the fitting algorithms, data structures and overall software architecture?
We support your product design phase by
- examining requirements as well as existing software prototypes to identify key performance requirements,
- helping you build a suitable mental model,
- defining technically sound budgets for individual software components,
- comparing potential HW choices and identifying pros and cons, and
- creating performance-related guidelines (and the rationales behind them) for the design of your system and software.
Solving existing performance challenges
When your customer requirements change during a project, your operating system provider decides it is time for a new version with twice the resource need, or your estimate for resource consumption was too optimistic, development quickly can get stuck. Instead of working on the needed features, software developers spend their time on reducing the memory or compute footprint of their software.
We can optimize on the implementation level for runtime and memory footprint, and support on the architectural level by
- creating simulations or abstract models of the existing system to answer “what-if” questions,
- analyzing the cost of activities with system-wide impact, like kernel calls, inter-process communication etc.,
- identifying “accidental” effect chains leading to unnecessary waiting etc., and
- using all of those insights to provide the technical foundation for architectural choices as well as guidelines for implementers