📝 #SoftwareEngineering101: What is "Good Software"?

Software Engineers of different seniorities will answer this question very differently. But the truth is that there is only one sensible definition:

Good Software is the software that fulfills its requirements.

Sounds easy? Read on to learn about Software Quality. 🧵

The next #SoftwareEngineering101 will absolutely go into hot take territory. Curious to see how Mastodon will react to some hard truths about Software Quality.

Tagging this thread about the Second System Effect with #SoftwareEngineering101 so that people can find it later.

Sorry for the spam on public (this was the last one I swear)!

Tagging this thread about the Inner-platform Effect with #SoftwareEngineering101 so that people can find it later.

Sorry for the spam on public!

Tagging this thread about Separation of Concerns with #SoftwareEngineering101 so that people can find it later.

Sorry for the spam on public!

🗒️ #SoftwareEngineering101: KISS and DRY

These two basic programming principles stand for "Keep It Short & Simple" and "Don't Repeat Yourself".

KISS means you shouldn't try to be overly clever with your code. Complexity breeds failure.

DRY means to not duplicate logic, so that if you have to change that logic, you only have to do it in one place. This improves maintainability.

The fun part: The more you code, the more you realize that these two principles are at odds with each other.

🗒️ #SoftwareEngineering101: Conway's Law

Strap in, folks! This is a pivotal one for managing development teams.

Conway's Law states that a (software) system will always mirror the communication structure of the organization that built it.

Put differently: If two developers sit next to each other in the office, the software components they build will be connected in quick, informal ways. They know each other, they want to help each other, so they provide shortcuts.

So: How does that help us?🧵