Cumulative Flow Diagram
(CFD)
Lead Time
Cycle Times
WIP
No freemium plan
(free trial period)
Missing Kanban metrics
// This is inside the Foo module
function onNetworkRequest() {
// ...
Bar.incrementCounter();
// ...
}
// This is inside the Bar module
Foo.addOnNetworkRequestListener(() => {
_incrementCounter();
});
Default paradigm
Paradigm shift
myStream.addListener({
next(event) {
// do something with `event`
},
error(error) {
// do something with `error`
},
complete() {
// do something when it completes
}
});
Libraries to manipulate Observables with operators
> Rx.js, Bacon.js, xstream…
Marble Diagrams
--a---b-c---d---X---|->
a, b, c, d are emitted values
X is an error
| is the 'completed' signal
---> is the timeline
clickStream: ---c----c--c----c------c-->
map(c becomes 1)
---1----1--1----1------1-->
scan(+)
counterStream: ---1----2--3----4------5-->
A functional and reactive JavaScript framework for cleaner code
main()
main()
is a pure, reactive dataflowfunction main(sources) {
const decrement$ = sources.DOM
.select('.decrement').events('click').mapTo(-1);
const increment$ = sources.DOM
.select('.increment').events('click').mapTo(+1);
const action$ = xs.merge(decrement$, increment$);
const count$ = action$.fold((x, y) => x + y, 0);
const vtree$ = count$.map(count =>
div([
button('.decrement', 'Decrement'),
button('.increment', 'Increment'),
p('Counter: ' + count)
])
);
return { DOM: vtree$ };
}
Strongly recommended reading:
> The whole future declared in a var