Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Project values for decision making #131

Closed
christianalfoni opened this issue Nov 11, 2015 · 4 comments
Closed

Project values for decision making #131

christianalfoni opened this issue Nov 11, 2015 · 4 comments

Comments

@christianalfoni
Copy link
Member

Hi guys,

Cerebral is actually based on some core values and I think it would be good to agree on them. That way when new features are suggested we can ask ourselves if they match the core values, that way making it easier to move on and defend any suggestions we reject.

  • We want to make complexity readable, not hide it
  • We want our UI to be driven by the developed defined state of the app, not by other outside factors like urls or other internal state of the project
  • We favor flexibility over less boilerplate. We do not implement features only to reduce code, it has to give more flexibility or increase readability
  • We favor hooks rather than hardcoding to a specific scenario

What do you think?

@garth
Copy link
Member

garth commented Nov 11, 2015

If you write it like some questions that you ask about a feature/change then anyone can ask those and decided if it fits the cerebral philosophy or not. I like the idea.

  • ✅ Does this feature/change expose complexity and make it easier to understand?
  • ✅ Does this feature/change encourage centralised state and pure functional programming, including pure UI components?
  • ❎ Does this feature/change reduce boilerplate code at the expense of flexibility or readability?
  • ❎ Does this feature/change introduce hardcoding that is difficult to override when necessary?

@christianalfoni
Copy link
Member Author

Yeah, I like that idea a lot @garth, thanks :-D

@bfitch
Copy link
Member

bfitch commented Nov 11, 2015

I think this is great and agree with all principles listed. If there is "one value to rule them all", I think it would be: "Will this feature make my program easier to understand?". And I would add that most programmers (me included!) overvalue removing boilerplate and typing less. Really we should be optimizing comprehension/readability first and foremost and only secondarily DRYing up code and boilerplate. If the cerebral "core" is flexible (as Christian stated) those abstractions can be added on top.

So, how this works out in practice. When considering a new feature we need to weigh comprehension/flexibility vs DRY/abstraction and it can go a few ways:

  1. Feature helps comprehension and does not add verbosity.
  2. Feature helps comprehension but is more verbose.
  3. Feature reduces comprehension but is less verbose.
  4. Feature reduces comprehension and is more verbose.

According to @christianalfoni's values above:

  1. Obvious YES
  2. Requires judgement, but YES
  3. Requires judgement, but most likely NO
  4. Obvious NO

I heard someone smart say: "the bottleneck when scaling an application is not typing, it's comprehension". 😄

@saulshanabrook
Copy link
Contributor

Reopened on website project cerebral-legacy/cerebral-website#37

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants