back to main blog page

What does software and real estate have in common?

plumbing At Investomation, we understand that every design choice we make has a direct impact on our users' workflow. When building new software, it's important to think about its architecture. This is no different than planning out the layout of your building ahead of time, before starting the construction. Every room should serve a specific purpose and be easily accessible. However, as we continue to add new features and improve the software, we often find ourselves at cross-roads with our existing codebase. Just like in real estate, standards change over time, as do use cases. A staircase that was fine 20 years ago, for example, may no longer be up to code. And if you're making significant changes to the building, the city will often require that you fix violations that would otherwise be grandfathered in. As a rehabber, you're often stuck working within the existing envelope of the building, trying to minimize construction cost while maximizing the utility of finished space. Similarly, as developers we are constantly faced with the decision of whether to tweak the existing code or rewrite a certain module from scratch. Except unlike real estate, software standards change much quicker, often several times per year. Web standards from 3 years ago may now be ancient history. This is where the concept of refactoring comes in.

Refactoring is the process of restructuring existing code without changing its functionality, in order to improve readability, maintainability, and scalability. Refactoring can be thought of as untangling the codebade. In real-estate terms, it's like redoing the plumbing without changing the layout of the building. Functionally, the house may still look the same, rent for the same amount, and on paper these kinds of improvements add no value. What they do add, however, is peace of mind if you plan to hold the property long-term. They reduce operating costs and stress. If you're proactive about "refactoring" your rental infrastructure, you're less likely to get a call at 3AM about a water leak, and are less likely to need recurring repairs after property damage.

Finding the right balance between simplicity and abstraction is crucial when refactoring code, and that balance will vary depending on the specific product and niche. It's like the balancing which updates you make to your property. If you're running a rental business, you don't want to overimprove. Luxury brands won't be appreciated by renters, but they will cost more to maintain. You want to maximize cashflow and durability, while minimizing cost. In a rental, Trafficmaster may make the most sense for your floors. Whereas in the house you plan to sell, hardwood or tile is the way to go, and those details will definitely be noticed and appreciated by the buyer.

But this analogy doesn't end here. Startups tend to focus on building out features, often leaving behind technical debt. The codebase eventually becomes more fragile and it takes a significant amount of time just to maintain it. This is akin to doing mickey-mouse repairs on your property. You're saving money initially, but you ultimately end up with more headaches and more expenses later on.

Similarly, over-improving code is a legitimate concern as well. Having worked at several startups as well as large software companies, I've seen codebases riddled with technial debt that should have been refactored ages ago, as well as over-improved codebases with boilerplate creating a significant cognitive overhead. Having to juggle 1000 different files to make sense of the code is just as bad as having all that code in a giant monolith, especially if all those files are named index.js (a common convention in JavaScirpt codebases - but that's beyond the scope of this blog post). The balance is somewhere in the middle, but that middle differs for every business. Just like the balance of useful and foolish repairs differs depending on your investing goals.

At Investomation, we strive to strike a balance between creating a maintainable codebase, while also providing our users with the tools and features they need to analyze the market and make informed decisions. As in real estate, the key is to understand the market and make smart decisions that will benefit both us and our clients in the long run. For that reason, we'd love to hear from you. Whether you'd like to reach out regarding a bug you experienced, or simply a feature request, don't hesitate to contact us

Be the first to comment...