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.
Author Archives: D. Esposito
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.
A Quick Cost/Benefit Analysis of Microservices
I’m not questioning FaaS and I’m not questioning containerization. I’m just questioning the size of microservices and if it’s the size of a bounded context, please, let’s just call them services or applications.
A Quick Cost/Benefit Perspective of TDD
With TDD principles (but not necessarily practices) any single method is testable by design and your code is clean and understandable. Even without unit tests.
A Quick Cost/Benefit Perspective of Unit Tests
Unit tests are a significant development cost. However, the interesting question is another: when is this cost worth? Sometimes it is; sometimes not.