Think Bottom Up recognizes that our clients appreciate our ability to produce powerful, extensible and reliable software quickly and economically. Our reputation depends on building high quality software in short timeframes using innovative, cutting-edge technologies and methodologies.
Think Bottom Up uses a bottom-up approach to software design. We believe so strongly in building systems this way that we named the company after the methodology we follow.
Why Bottom Up?
Traditional software development projects are best described as top-down. With this approach, the problem space is successively split into components that are simple enough to implement but tied to a particular domain.
The top-down approach often fails to deliver a cost-effective solution because the software components are only able to solve a single problem. Software is so expensive to design, develop and test that it doesn’t make economic sense to build one-off solutions this way. Time that could be spent providing powerful capabilities, better user interfaces, or improving reliability is instead spent on implementing basic functionality over and over again.
Bottom-up design ensures that opportunities for reuse are maximized, which amortizes the cost of much of the development over multiple projects, and also continuously increases the reliability of the components over time. The resulting software is of high quality with a reduced time-to-market and is ready to be applied to a wide range of problems.
Working with Change
In today's technology market, clients expect technology partners to keep up with high-paced change and deliver systems that can cater for their future needs. Think Bottom Up believes that it is a customer's right to request change and it is our responsibility to support such change before it occurs. To achieve this, modern software must encompass requirements, not just satisfy them.
The bottom up approach is essential in supporting changes in requirements. It allows us to provide solutions that are far more capable than the requirements of the specific problem domain. We believe this philosophy sets us apart as a software development business. Top-down approaches are extremely sensitive to changes in customer requirements and are more likely to fail as a result.
Thinking Bottom Up
When you think bottom up, you must think in abstract and general terms. This inherently decouples your thoughts from any single problem domain. The guiding principle is to properly understand and implement the abstraction, leading to lower layers that are closed for complication, but open for extension.
Because the focus is on reuse, the resulting software is highly decoupled (meaning different components are independent of one another). Parts of the system can be tested in isolation, leading to easier and more comprehensive testing, an essential part of any software development project. Rigorous, comprehensive automated testing is critical to our process, as we prefer to spend time adding behavior, not finding bugs.
Although success is possible with top down approaches, it is far more likely with bottom up design. The key to building truly flexible, efficient, reusable and interoperable software systems lies with sound bottom-up design and implementation.