/Totem

Knowledge work at play

Primary LanguageC#MIT LicenseMIT

Totem is a set of development techniques lovingly prepared in C# and spiced with the experience of coding for those who code. Software is exploding with cross-pollination of ideas, lending new eyes to old problems. This is an attempt to catch some of that lightning in a bottle.

Introduction

Totem has been brewing for a long time, in various projects, utility libraries, gists, and other places you might find attempts to smooth the development experience. The concepts are battle-hardened and ready to move beyond the proving grounds.

Documentation

Head over to the wiki to learn more about Totem and its nifty tricks.

Some highlights:

  • Text: A unified medium for working with strings
  • Expectations: State exactly what is expected of runtime values
  • Tagging: Attach structured metadata to objects

Community

I (Bryan) build things with the excellent team at DealerOn. I welcome contributions and am always looking for like-minded individuals who share my enthusiasm for collaboration.

I can usually be found in the DDD/CQRS/ES Slack room and am always up for a discussion. You can self-register here.

I am also @deftcode on Twitter.

License

Totem is under the MIT License - like knowledge, it wants to be free.

Influences

Totem draws influence from a wide range of knowledge work concepts. The dynamics of collaboration, decisions, time, and intent form the core of its worldview.

Tactical design

Knowledge work is a rich landscape of problems, ideas, and perspectives. These implementation paradigms (and more) express solutions and play important roles in Totem:

Style Primary focus
Object-oriented Pair data with the code using it
Functional Separate data from the code using it
Static Resolve symbols at compile time
Dynamic Resolve symbols at run time
Reactive Resolve program flow at run time
Asynchronous Separate work from workers across time

Strategic design

Deciding what work to do is an art all its own; much effort lies at the feet of this foe. These modeling paradigms (and more) help understand where and how to apply tactical design:

Approach Meaning Primary focus
DDD Domain-Driven Design Model knowledge work as a series of decisions: the data informing them and the data they yield
CQRS Command/Query Responsibility Segregation Model writes and reads independently
ES Event Sourcing Model the domain as a timeline