Sustainability has been a "hot" topic for the last five plus years now. It is often talked about in the context of the environmentalist movement or farming, but allow me to give the concept a bit of a technical and moral spin. Sustainability is all about planning for the future of humanity. What our children and the world's children will experience as a result of our actions today.

Do you think your house will be standing 100 years from now? How about 1000s, like the pantheon? No? Me neither. This is the issue I've come to with systems design. I came into a world where people did things with a lack of planning for the future directions it would take us. I didn't create the issues, but it is all of our responsibility to fix it.

How many systems have you used that needed to be explained to you far beyond 5 minutes? How many wasteful positions do you see that maintain a single, custom system? How many additional positions do you see as a result of poor, bloated work-flows? How many people know how to do your job?

This all brings me to the issue of morality in systems design / implementation. Systems should be designed in such a way that they are not only easy to use but easy to maintain and sustain for decades, not months and years. Breaking down the walls between those creating the system and those in need of a system isn't just a best practice, it's a moral prerogative.

The technical elites (haves) have a moral obligation to design and develop systems in such a way that everyone (even have nots) can use them. Experience design (UX) is not just a "nice to have" requirement, it is a moral issue. It is immoral to design something that allows the system to be dependent upon your knowledge (or any small group of people) to continue running.

Yeah, believe me, it's very tempting to hand a system off to a client who has no clue what they're doing and intentionally design it so you'll always have to be involved.

## big money big money no Wammies... STOP.

It's also far more difficult to design in such a way that you don't have to be involved (even as much) in the future. Let's face it, that's less money for you and probably more work to get a product out to the client.

There has been a bit of a code of ethics push in the Drupal community which has had me thinking about all this so I'd like to make one of my own. These are some of the principles that I strive towards in everything I write and in every interaction with those in the community:

- It is immoral to design something that only you understand how it works
- Systems must be designed with user-groups in mind (UX)
- Every line of code should seek to empower people to never have to know it exists
- Solutions must be simple, elegant and understandable by the those tasked with managing the system after it is deployed.
- Talk early, and talk often. The more transparent you are in your design, development, and delivery processes the easier it would be for someone else to pick up your work and run with it
- Be passionate in the code you write; if you're not into it, move on
- We can write code to do lots of good and bad things; Don't take a job where you don't agree with the result
- Feedback, positive or negative is feedback and should be responded to in the same way
- Leverage developed code as much as you can so that glue / custom modules are as small as possible
- Realize that your never done (and be satisfied with it), you're simply advancing the ball a little further down the field every day, month, year, generation