Introducing Technical Credit

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.

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”