Philosophy

This section describes the philosophies, ideologies, values, and ethics that govern the Medusa ecosystem.

Organization

Main Branches

All Medusa ideas are documented in 3 main branches, Philosophy, API, and Implementation.

Pillars

Conventions

Tense

Commit Messages

Code Formatting

Folder Structure

Date Ranges

Displayed Date ranges should be inclusive of the start and exclusive of the day after the end date.

Date Description
2020/10/20 - 2020/10/20 1 day
2020/10/20 - 2020/10/21 2 days
2020/10/1 - 2020/10/31 1 month
2020/10/1 - 2020/11/1 1 month + 1 day
2020/10/1 - 2020/9/30 1 year
2020/10/1 - 2021/10/1 1 year + 1 day

UI Optimizations

All decisions should come down to the following priorities:

  • Minimize Scrolling
  • Minimize Clicks
  • Use images, color, and shapes as identifiers instead of text when possible.

Design Patterns

Principles

SOLID

Single Responsibility Principle

Open/Closed Principle

KISS

Document Driven Design

Test Driven Design

Decoupling / Dependencies

Server and Client

Code for certain functionality must be tailored for the server, the client, or both.

Server

  • Database
  • Database Caching
  • Protected Code

    Client

  • UI Frontend
  • Client Caching

    Both

  • Data Objects
  • Validation

    Code Organization

Culture

Human Resources

Willing and Able

Problem Solvers

Initiative Takers

Drip-Drop Effect

Technology

Selecting The Best Language

Languages evolve and newer languages emerge that incorporate the best practices of their predecessors.

Terse

The fewer characters to type and read the better, unless the code is less readable.

Readable

The code should be easily understood when visiting it.

Maintainable

The language should allow repairing, reviewing, refactoring, reusing, and extending.

Isomorphic

The language should be portable to multiple platforms (native, java, javascript, etc).

Well Known

The pool of developers that understand the language should be large.

Selected Technologies

Selected Over
Kotlin Java
GWT
Vue React, Polymer
JQuery

Architecture

The architecture of a system should mirror the architecture of a computer.

  • Process / Logic
  • Store
  • Input
  • Output
  • Bus
  • Cache

State

A single source of truth is a great thing. But that truth needs to be organized

Main State

Application

Document

Transient

Plugins

  • Registration
  • Processing

Application Frameworks

Authentication

A login dialog with 'forgot password' and 'forgot username' functionality.

Social

How entities (individulals and businesses) interact and present themselves

Reputation

Badges

Permissions

Circles