Welcome to Structure101
For over two decades, we’ve been pioneering cutting-edge technology, techniques, and products that empower tens of thousands of developers worldwide to comprehend, enhance, adapt, and manage the structure and architecture of their codebases.
Our solutions have played a key role in saving countless man-hours and millions of dollars by dramatically reducing complexity, increasing development velocity, and boosting the agility of our client organisations.
Software structure emerges from the thousands or millions of lines of source in the codebase, and cannot be understood by human developers working with just the IDE.
A lack of visibility and control over the countless internal dependencies at both micro- and macro-level leads to an uncontrolled increase in coupling as the codebase evolves. This in turn results in features and fixes taking longer and longer, and seemingly endless side-effects with every code change. Often some modules grow huge and keep getting bigger, yet seem impossible to decompose. It’s like “everything uses everything” – the architecture is swallowed by a big ball of mud.
This pervasive problem deeply impacts daily development productivity, and even more strategic business agility.
With Structure101, you will be able to start with the code you have today, and with minimal impact on ongoing development, move toward a simpler codebase, with a defined, understood, and controlled architecture that actually helps your developers.
the Structure101 Solution
Making sense of the vast number of interdependencies in a codebase is not possible by reading the source code alone. What is needed is a high-fidelity structural model of the codebase. Such a model is at the heart of Structure101 and is populated by our source parsers. Our products utilize this model to let your team:
Visualize the model and understand the codebase structure as-is.
Analyze the model to detect and quantify regions of overcomplexity.
Restructure the model to reduce overcomplexity and recover the architecture. This process creates a list of specific coding actions, with a guaranteed structural result, before a line of code is changed.
Specify layering, dependency, and visibility rules to guide developers as they make ongoing code changes. Visual specifications are overlayed on the model of the current codebase, so that developers have a route map from the current to the target architecture.
Capture the overcomplexity and spec violations at build time. This data is stored so that measures can be tracked over time.
Query a dependency database to discover specific dependencies, and perform API checks, identify divergence between versions, analyze the impact of changes, and more.
The Right Information to the Right People at the Right Time
There are several roles in your development activity, and any solution needs to support each. Structure101 includes different product components to provide timely information to each:
Architects need the full richness of the model, and the ability to define action list and specifications.
Programmers need quick access to/from their IDE to discover the dependencies on items they’re currently working on, within the specs defined by the architects, and to know immediately if they make new overcomplexity or spec violations.
Managers need to know if overcomplexity levels are being reduced and that specs are being created and followed over time. This data is captured automatically at build time and displayed in a dashboard.
We Speak your Language
Structure101 components are available for codebases written in the following programming languages (with IDE support):
Java/Maven/Gradle (IntelliJ, Eclipse)
C# (Visual Studio, VSCode)
C/C++ (Visual Studio, VSCode, Eclipse CDT)
Generic (inject your own domain data)
Stucture101 runs on all major operating systems.
Product components are deployed as installers and Docker images, and are ready for your CI/CD pipeline.
Structural data (including project settings, specs, action lists, etc.) can be saved to XML, Postgres, AWS, JFrog, etc.
Know your dependencies
Our interactive and visual models, as well as our rich dependency database, are used for a diverse array of use-cases:
Analysis and reduction of structural complexity.
Restructuring for monolith decomposition and modularity.
Specification, verification, and communication of architecture.
Impact and divergence analysis.
API compliance assessment.
Prioritization of regression tests.
Visualization of Pull Requests.
Detection of superfluous C/C++ #includes.
… and many others …