Changes for page General Insights
Last modified by chrisby on 2024/09/19 10:56
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -1,6 +1,10 @@ 1 1 While reading the software engineering literature, I noticed that there are a few high-level principles that run through many technical topics and are the driving force behind many developed best practices. Since I found them useful, I would like to summarize them here in a short and clear form. 2 2 3 -* **The ultimate goal of any software engineering effort is resource minimization.** In a business context, resources primarily mean money. That is, whether the topic is clean code, testing, architecture, agile, or even personal behavior as a professional, the goal is always to make everything related to software as cheap as possible. The goal is economic, the means to achieve it are technical. This means that the software engineer must think about the resources used for every technical decision, including typical business considerations such as cost-benefit and risk estimates. This is a valid expectation for business to have of software developers. 3 +* **Economic Development** 4 + * The ultimate goal of any software development effort is resource efficiency. In a business context, resources primarily mean money. That is, whether the topic is clean code, testing, architecture, agile, or even personal behavior as a professional, the goal is always to follow the **economic principle** of either achieving a fixed software goal using minimal resources (the **minimum principle**), or spending a fixed amount of time generating the most (business) value (the **maximum principle**). The goal is economic, the means to achieve it are technical. This means that the software engineer must think about the resources used for every technical decision, including typical business considerations such as cost-benefit and risk estimates. This is a valid business expectation for software engineers. 5 + * **Sustainability**: Although economic development is too often misinterpreted as making short-term driven decisions, the actual goal is to achieve maximum profitability, which must include long-term considerations. In this way, time spent on maintaining high code quality through rigorous testing and refactoring are well spent investments that pay off in the long run. 6 + * **Opportunity Costs**: Spend your time creating the most business value while considering all alternatives. An example is the decision whether or not to optimize performance. Implementing a new feature usually generates high business value, as does refactoring the code until it is clean for sustainability. Tedious performance tuning, on the other hand, is often not necessary because the features are "fast enough". So the better alternative is often to spend time working on new features and only optimize performance when it is really necessary. 7 + * **Hobby Projects**: The resources in a hobby project are usually not only fun, but also time, and they are interrelated. Strict adherence to maximizing business value is contrary to the purpose of a hobby, which is to experiment, discover, or try new things. On the other hand, completely ignoring economics, e.g., not refactoring code, not testing, etc., leads to slow progress. The time it takes to make progress becomes unnecessarily large. It is also not a fun experience. This means that you should have fun with a hobby project, but my recommendation is to balance it with efficiency thinking so as not to lose it over time. 4 4 * **Cost Considerations** 5 5 * **Most costs are caused by maintenance, not development.** Quick and dirty development never pays off, not in the short term and even less in the long term. 6 6 * **Hardware is cheap.** When software is deployed on a single server, hardware costs are usually negligible. However, when the same software is deployed on a large number of servers, the importance of hardware costs can increase.