decidim’s software architecture decidim · 2017-11-04 · participatory spacedecidim why: defines...

67
decidim Decidim’s software architecture Goals & abstractions guiding its development github.com/josepjaume twitter.com/josepjaume

Upload: others

Post on 25-Jun-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Decidim’s software architectureGoals & abstractions guiding its development

github.com/josepjaumetwitter.com/josepjaume

Page 2: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

codegram.comgithub.com/codegramtwitter.com/codegram

Page 3: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

da-ce-deemCatalan for: “We decide | let’s decide”

Page 4: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Page 5: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Page 6: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Page 7: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Page 8: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Page 9: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Inspired by consul

Page 10: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

BUT Y?

Page 11: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Chapter 1: Goals and principles

Page 12: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

configurable collaborableextendabledistributable

Page 13: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

!applicationlibrary

Page 14: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

decidim ~= frameworkdecidim ~= ecosystem

Page 15: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim github.com/decidim/decidim

Page 16: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim rubygems.org

Page 17: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Chapter 2: Installation

Page 18: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

ruby & rails 5postgresql

Page 19: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Generating an application$ gem install decidim

$ decidim jam

Page 20: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Page 21: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Page 22: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Gemfile

Page 23: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Configuration: config/initializers/decidim.rb

Page 24: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Customization: app/assets/stylesheets/decidim.scss

Page 25: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Chapter 3:internals & abstractions

Page 26: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Organization● Multi-tenancy● Infrastructure sharing● Shared database● Independent data

decidim.rocks

admin

users

...

decidim.ninja

admin

users

...

1..n

admin

decidim_application_instance

Page 27: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Page 28: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Page 29: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Participatory SpaceWhy:

● Defines the terms of participation● Holds functionalities

Implementations:

● Participatory Process● Assembly● Iniciative

decidim.rocks

participatory_process1

step_1 step_n

assembly1

managers

iniciative1

author supporters

iniciative2

author supporters

Page 30: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

ComponentsRegistered against Core

● Participatory spaces hold components

● Mini-applications● Exposed via a manifest

Core components:

● Proposals● Surveys● Participatory Budgets● Meetings● Pages● Accountability

Page 31: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Page 32: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Page 33: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Page 34: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Page 35: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Page 36: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Page 37: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Page 38: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Component manifest● Component name● Engines● Configurable settings● Resources● Statistics● Exportable artifacts● Actions

Page 39: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

decidim

decidim-coredecidim-admin

decidim-proposals

decidim-comments decidim-api

decidim-accountability decidim-surveys

Page 40: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Decidim::AuthorizationDecidim::NotifiableDecidim::CommentableDecidim::ResourceDecidim::Followable

Page 41: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Decidim::MenuDecidim::FormBuilderDecidim::ExporterDecidim::AuthorableDecidim::Reportable

Page 42: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

good abstractions ==

Page 43: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

/api/graphql

/api/graphql

Page 44: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Chapter 4:Core development & testing

Page 45: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Developing

Page 46: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim Development application

$ git clone [email protected]:decidim/decidim$ cd decidim$ bundle install$ rake development_app

Page 47: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Page 48: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

development_app -> ../decidim

Page 49: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Testing

Page 50: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

rspeccapybara + phantomjs

Page 51: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim Testing

$ rake decidim:generate_test_app$ rake test_all…F…….……….………F…..

# alternatively$ cd decidim-proposals$ rspec rspec spec/features/proposals_spec.rb………….F…….F…………..

Page 52: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim Continuous Integration

Page 53: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

Chapter 5:Vanity metrics ¯\_(ツ)_/¯

Page 54: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

~ 14 months old

Page 55: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

21 code contributors

Page 56: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

~1.300 PRs merged

Page 57: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

~63k ruby loc~5k typescript loc~2k javascript loc

Page 58: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

~98% test coverage

Page 59: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

~100% documentation

Page 60: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

~ 42 releases

Page 61: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

> 15 working installations

Page 62: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim decidim-monitor

Page 63: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

> 10 languages

Page 64: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

~ 40k users

Page 65: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

~ 120 smashed

Page 66: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

future ahead

Page 67: Decidim’s software architecture decidim · 2017-11-04 · Participatory Spacedecidim Why: Defines the terms of participation Holds functionalities Implementations: Participatory

decidim

thanks! questions?

gitter.im/decidimgithub.com/decidim