Why software only moves forward
Software development must continuously evolve to accommodate permanent data, especially in financial transactions. Developers should manage version mismatches and anticipate disruptions to maintain reliability and service quality.
Read original articleSoftware development is characterized by a continuous forward movement, primarily due to the permanence of data. Once data is saved, the software must accommodate that data indefinitely, especially when it becomes distributed across various systems. This is particularly critical in financial transactions, where users expect reliability and accuracy. For instance, if a payment method is altered or removed, it can lead to errors for users who have already made transactions using that method. The challenge intensifies in distributed systems, where components can change independently, leading to potential mismatches between the code and the database. As systems scale, the likelihood of running multiple versions of code simultaneously increases, complicating updates and maintenance. To manage these complexities, developers are advised to adopt strategies such as making additive changes, being permissive with inputs, and updating databases before code. The overarching principle is to anticipate how changes might disrupt service and to ensure compatibility between old and new versions of the software.
- Software must evolve continuously due to the permanence of data.
- Financial transactions require high reliability and accuracy in software.
- Distributed systems complicate updates due to independent component changes.
- Developers should adopt strategies to manage version mismatches effectively.
- Anticipating potential disruptions is crucial for maintaining service quality.
Related
Engineering Principles for Building Financial Systems
The article delves into engineering principles for financial systems, highlighting accuracy, auditability, and timeliness in records. It stresses immutability, granularity, and idempotency. Best practices involve integers for amounts, detailed currency handling, and consistent rounding.
Ask HN: Business logic is slowing us down
Developers face challenges balancing internal stakeholder demands and external user needs, often spending time on code maintenance. Recognizing this work is crucial for enabling focus on new feature development.
A Jenga tower about to collapse: Software erosion is happening all around us
Software erosion results from complex architectures and frequent changes, with developers spending 42% of time on maintenance. A "shift left" approach is crucial for integrating quality assurance early in development.
Predicting the future of distributed systems
Object storage is increasingly integrated into transactional and analytical systems, enhancing reliability. Future programming models may shift code management to infrastructure, despite skepticism about the sustainability of emerging technologies.
The 30-Year-Old Problem Still Haunting Developers
Software development faces persistent challenges like effectiveness, efficiency, and robustness, largely due to human factors. A holistic approach integrating people, processes, and technology is essential for improvement.
If business domains are properly abstracted, most of the time extending the software with changes is something close to adding some configuration or using existing functions with different parameters. But the hesitation to create things from scratch comes at the cost of training and also transparency, two of the highest priorities for managers and stakeholders who not only want to hire people with minimal overhead to begin contributing, but also want to understand as much as possible what the engineer is doing and how they are doing it.
Software is incredibly maleable and has unlimited potential, yet somehow most places i've worked at get constantly bottle-necked by recurring problems that are very easy to solve with proper abstractions.
App keeps updating. Version N understands version N-1's saved data, maybe N-2, N-3, but not indefinitely. Still you're lulled into a sense of security; your data will always be retrievable. Goes without saying that the app modifies the data store to the latest version.
But then you don't use it for a while and you it's now at N+10 and you still have data from N, and it's slid out of the "backwards compatibility window" and is no longer readable. And the intermediate versions of the App are not available. Now you're screwed. One such scenario, for sure, is updating from version N to, say, N+5 of Android and trying to migrate your data, but I think it was something else.
However there always needs to be a plan on how to migrate data that uses the old way to the new way. It’s not as sexy, but it needs to be done and takes time away from building new features. Skipping the design process is tempting, but it’s a direct path to this type of technical debt that’s easy to foresee.
If you're serious about writing robust and reliable systems, think about V-1 and V+1 not just the version you are writing and deploying. The point about your code interacting with multiple versions in production is a good one, but also upgrades and downgrades should be considered.
> aside: This email is adapted from a book chapter I spent the last 3 weeks writing. It's a complex idea that took 10 years to grok. I tried squeezing it into a digestible length. Would love to hear your thoughts.
Okay...
Next line:
> Data lives forever
It doesn't. Now I'm unwilling to overlook the title, which is clickbait, so I'm done reading.
Related
Engineering Principles for Building Financial Systems
The article delves into engineering principles for financial systems, highlighting accuracy, auditability, and timeliness in records. It stresses immutability, granularity, and idempotency. Best practices involve integers for amounts, detailed currency handling, and consistent rounding.
Ask HN: Business logic is slowing us down
Developers face challenges balancing internal stakeholder demands and external user needs, often spending time on code maintenance. Recognizing this work is crucial for enabling focus on new feature development.
A Jenga tower about to collapse: Software erosion is happening all around us
Software erosion results from complex architectures and frequent changes, with developers spending 42% of time on maintenance. A "shift left" approach is crucial for integrating quality assurance early in development.
Predicting the future of distributed systems
Object storage is increasingly integrated into transactional and analytical systems, enhancing reliability. Future programming models may shift code management to infrastructure, despite skepticism about the sustainability of emerging technologies.
The 30-Year-Old Problem Still Haunting Developers
Software development faces persistent challenges like effectiveness, efficiency, and robustness, largely due to human factors. A holistic approach integrating people, processes, and technology is essential for improvement.