• Stars
    star
    429
  • Rank 101,271 (Top 2 %)
  • Language
  • License
    Creative Commons ...
  • Created almost 4 years ago
  • Updated about 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Dieter Rams' principles of good design applied to software engineering

1. Good software is innovative

Rebuild old software using new technology. Build new software using old and stable technology.

Strive to bring something new into the world, even when building a clone. Observe the users for inspiration. Try to anticipate them: what will they really need next?

2. Good software is useful

Software must be valuable to the user. It must make their lives better, by satisfying a need or solving a problem. Measure the value your software brings to its users and keep track of it. Make it break the build upon regression.

3. Good software is aesthetic

Take a moment to step back and look at your code. It should look beautiful to you. Beauty often embodies many useful properties. Code that pleases the eye is often readable, idiomatic, and expressive. We value these qualities as programmers.

4. Good software is understandable

Code isn't "clever" if no-one understands it. Clever code anticipates the questions and doubts of its maintainers. It is straightforward to others and your future self. It should be written firstly for people, and then for machines.

5. Good software is honest

Avoid abstractions you don't really need. Avoid cargo cult programming; strive to really understand the real reason for everything that you write in code. Be bold in exposing software metrics you are uncomfortable with, such as test coverage and anti-patterns. Let them break the build so you can find time or extra help to fix them.

6. Good software is unobtrusive

Be ruthless in removing any obstacle between your users and the best value they can get from your application.

Well-designed applications are the fruit of many failed iterations, each proofed by real users. Be sure to observe your users as they interact with your application. Take note of any friction and frustration in using it. Their feedback is the most precious information you can get. Treat it honestly.

7. Good software is long-lasting

Future proof your software by planning for how its dependencies (browser environments, operating systems, etc.) will evolve during its lifetime. Avoid coupling it to perishable bindings. Offer to bundle its dependencies so it can better resist the entropy of innovation. Consider releasing its source code under a liberal license, so it can be rebuilt and enjoyed on future platforms.

8. Good software is thorough down to the last detail

Think deeply about every action your application performs. Ensure that it gracefully handles every error condition you can fathom, e.g., memory and storage exhaustion, race conditions, network errors, lack of permissions, etc.

Just like playing chess against yourself, always have a sandbox environment where you become the user. Be as strict and demanding with your application as you are towards other people's.

9. Good software is environmentally friendly

Avoid wasting computing power or storage. Consider the energy profile of your application as it grows. Use only what you need and give back the rest. If your application isn't performing useful work, it should not be consuming resources: it should be inert.

10. Good software is as little software as possible

Less code is always better. Be terse and expressive. Comments should be exceptional and treated like code.

Resist the urge to over-engineer. Once your application is "barely good enough", it is complete. Completeness derives from (1) absence of defects, (2) conformance to the agreed requirements, (3) fitness for purpose. You need all three (and it's a lot of work) but nothing more.

Other attempts

  1. "Ten Principles for Good Code", Charles-Axel Dein.

More Repositories

1

clean-code-python

πŸ› Clean Code concepts adapted for Python
Python
4,258
star
2

docker-unreal-tournament-99

A Docker image for running Unreal Tournament 1999 in Wine
Dockerfile
48
star
3

zope-snipmate-bundle

snipMate snippets for Zope and Plone development in Vim
Python
10
star
4

gitlab_runner

An Ansible playbook for deploying a Gitlab Runner using Podman
Makefile
8
star
5

tinycols

A tiny jewels matching game for the Unix terminal
C
7
star
6

cordova_vr

Cordova VR boilerplate with Three.js and Crosswalk
JavaScript
5
star
7

pycon18-bitcoin

Italian version of my Bitcoin workshop at PyCon IT
5
star
8

wordpress2plone

Migrate your Wordpress blog to Plone in one easy step
Python
5
star
9

.zrvim

My vim configuration and plugins
Vim Script
4
star
10

pycon18-bitcoin-code

Python
4
star
11

simple_netbox_inventory_plugin

A simple example of a NetBox Inventory Plugin
Python
4
star
12

aiohttp-nuitka-docker

A quest to concoct the fastest possible Python web application
Makefile
4
star
13

kubotto-classic

Shell
3
star
14

simple-mailer

A simple Python mailer for shared hosting sites
Python
2
star
15

aiohttp-docker

An example Dockerised aiohttp microservice
Python
2
star
16

tapyrus

A declarative web framework (WIP)
Python
1
star
17

acacia

C
1
star
18

conwayjs

Conway's game of life in JavaScript (Canvas and ES5)
JavaScript
1
star
19

pycoin

Python
1
star
20

stare

A simple inotify tool for monitoring files
C
1
star
21

zr.dotfiles

Vim Script
1
star
22

simple-pdf-reader.js

An alternative reader for pdf.js which renders the document pages on-demand, incrementally.
JavaScript
1
star
23

rheia

The Rheia Time Tracker
Python
1
star
24

rh-ansible-workshop

1
star
25

img2planes

Convert an image to Amiga C bitplanes and palettes
Python
1
star
26

blog_examples

An example Ansible Collection for some of my blog posts
Python
1
star
27

Nokia-C1-02-iSync-Plugin

iSync your Nokia C1-02 mobile phone using this plugin
1
star
28

zedr.github.com

1
star
29

pycon17-bitcoin

The source file for PyCon Ireland's Bitcoin clone workshop
1
star
30

boxing-clock

A simple boxing timer for mobile devices. Created with Kivy.
Python
1
star