A younger banker, fearing rejection due to past bankruptcy, is praised by an older banker for repaying every debt with integrity and resilience. This dialogue sparks thoughts of technical debt in software projects. Like financial debt, technical debt requires repayment, but technical credit represents investments for long-term gains. Managing debt measures a team’s technical credit, crucial for software stability and efficiency.
Author Archives: D. Esposito
Treating Software Anemia
DDD proponents argue against anemic models, caused by minimal behavior in classes. While not a disease, software anemia hampers adaptability, akin to Damocles’ sword. Prioritizing behavior over properties aligns with real-world entities and enhances modeling. For instance, password reset functionality should be approached behavior-centrically for better readability and maintainability. (Word count: 64)
Domain Models and Database Agnosticism
In the modern computing era, the traditional data model for persisting data in databases clashed with the concept of keeping domain models independent of database concerns. While some scenarios align both models, others require an intermediary software layer. The approach depends on the specific scenario and involves trade-offs between SQL and abstraction layers like EF Core or Dapper.
Understanding the Virtual DOM Pattern
The Virtual DOM (VDOM) represents a method used in web development, associated with JavaScript libraries and frameworks like React, to optimize the updating of webpage content. It creates an in-memory representation of the Document Object Model (DOM), thus allowing more efficient updates and minimizing the impact of dynamic changes. Although the concept is widely used in React and Angular frameworks, it is considered an unnecessary layer in vanilla-JS applications due to their more efficient and direct way of updating the UI.
When Coding, Think Like a Lawyer
Software engineering shares many traits with traditional engineering including systematic approaches, design, planning, problem-solving, and quality assurance. However, ‘Big Upfront Design,’ now viewed as ineffective, sets software development apart. The role of a software architect in providing technical leadership, strategy, and risk mitigation, coupled with software engineers’ coding and problem-solving skills, underpin successful software creation. An analogy is made to law, where software engineers need deep domain knowledge, as lawyers do, to deliver more effective end products. However, thinking like a lawyer when coding can provide distinguishing benefits.
Practical Reason in Software Development
In software engineering, the startup dilemma lies in the difficulty of creating a top-notch product while ensuring company survival. Effective software writing stems from understanding one’s business, occasional ad hoc decisions, and frequently swaying from the norm. It emphasizes pragmatism and practicality over adherence to idealistic principles.
Multiple Units Good, One Unit Bad
The microservices architecture, while innovative and beneficial for distributed applications, is no panacea, necessitating the reconfiguration of application communication and infrastructure. Like the wheel needing flat roads, it presents challenges and isn’t suitable everywhere. Its comparison with traditional monolithic architectures highlights the importance of a balanced, adaptable approach in software development.
A Quick Cost/Benefit Analysis of Monoliths
DISCLAIMER: I’m not a fan of monoliths per se but I’m against the common idea that monoliths are the absolute evil regardless. There was a time, and it was less than a decade ago, in which software developers (and architects) were subliminally suggested that the best way to build scalable web applications was to createContinue reading “A Quick Cost/Benefit Analysis of Monoliths”
End-to-end AI Solutions
The rationale behind “AI Is Just Software” is that plain AI black-boxes alone are meaningless for customers. Customers, instead, need end-to-end solutions in which the power of AI black boxes is unleashed within the boundaries of a software-based pipeline that solves a business problem.
The Greatness of Human Thought
The journey towards computation started in the Middle Age and ended in 1931 when Kurt Gödel proved that, within the limits of a consistent formal system, any reasoning could always be expressed as a set of formal rules and then, in some way, mechanized.