Design Principles
Abstraction
Ideally, code from this project should be reusable with little effort in any scenario where there are people who propose things and people who vote things. Initially, we're going to focus on the Brazilian House of Representatives, but we want the same software to be usable later on for the Senate and for state- and city-wide legislative bodies, for other countries, and for internal decision processes of organizations.
Modularity
Not all potential uses are equal so, besides leaving things abstract enough so as not to depend on the format of one particular data source, we should also strive to make it easy to remove behavior or replace it for another. Even though some people might not want to have our system with Liquid Democracy as the voting scheme, it should still be easily possible to use it for tracking votes, bills and stuff. Ideally, another voting scheme could be swapped in without too much effort. This goes for all features. If possible, the more isolated things are (even to the point of things being separate small webapps altogether) the better.
Extensibility
One of the problems we're facing right from the beginning is squeezing data out of the House's website. Our stuff should be easier to access, and we should encourage an ecosystem of mashups and different uses of our data through public APIs and WebHooks. This goes hand in hand with the Modularity above, as we can potentially build our system as a bunch of smaller apps, thereby being the first users of our APIs and designing them by use rather than by guessing.
