Este in 2016

Summary what happen in github.com/este/este last year and why.

Bye immutable.js

I was using immutable.js from the beginning. It’s great, it’s nice, but even with transit-immutable-js serialisation and deserialization can be troublesome. transit.js doesn’t distinguish between null and undefined. Collaboration with third parties requires transformations, etc. One reason why I liked immutable.js was the record, but with Flowtype we don’t need that. Long story short, immutable.js had to go.

Welcome Ramda

ramdajs.com rocks. Read why. With Ramda, we don’t need immutable.js, and we got a lot of handy functions. Ramda doesn’t mutate objects; it’s pure. Yes, I know it’s not as fast as immutable.js, but to be honest, we don’t need super fast data manipulation often.

Bye redux-promise-middleware and similar wrong abstractions

Yes, I was wrong. Sometimes I feel I’m always wrong. The only thing that’s worse than being always wrong is always being correct.

Redux without additional async abstraction is unusable, and redux-thunk is way too simple. So I tried everything with Promises. I failed, but it wasn’t my fail. Promises are nice and all, but flawed by design.

I knew there were several alternatives, but I was reserved to use them. For example redux-saga. I had a feel there must be something better than imperative async handling, and I was correct!

Welcome new Kink, ehm King

redux-observable.js.org beats all alternatives for one simple reason; it leverages mature, stable, fast http://reactivex.io. I had a lot of several head-scratching moments when dealing with async, which were solved elegantly because of RxJS. Learn it now.

Bye React Router

As you probably know, github.com/este/este is meant to be universal, and by that word I don’t mean isomorphic. Isomorphic means client + server. Universal means multi-platform. React Router 4 was announced with React Native support so when alpha was released, I tried it in the Este. And guess what, I was wrong again. Long story short. It’s nothing bad with RR4 per se, except without route config it’s impossible to implement both pending navigation and code splitting like next.js nicely does. I spend a lot of time discussing that stuff with rauchg, ryanflorence and jimmy_jia. Jimmy nailed it and I had to accept I was wrong again. Este is still using RR, but I will switch to https://github.com/4Catalyzer/found asap because I WANT TO HAVE PENDING NAVIGATIONS at least. Note next.js is almost ok, except without route config it can’t support hierarchical URLs.

Welcome Found a one big thank to Jimmy

As for found router, don’t be scared it’s new or something. It isn’t. Jimmy was a good maintainer of React Router for a long time, so he knows his shit. For React Native, the brand new router from core team is expected to be released soon. Read his reasoning now:

Bye dynamic typing

Dynamic typing is nice and all and fine until it isn’t. We want static typing not because autocomplete, but because modern real-time universal applications are ugly complex. I learned that the hard way. Don’t be fool like me and learn from other people mistakes instead.

Flow type all the things.

Big thank you to all people behind the flowtype.

And what about TypeScript? It evolved a lot, mainly because functional programming can’t be overlooked any more. TypeScript looks more and more like Flowtype, still.

Este is now typed with Flow as much as possible. For example, we finally removed nasty string constants from our code. But that’s not all!

Bye untyped CSS string soup low-level madness

Just when I thought Este is somehow completed, the last thing I wanted to add was CSS in JS. Dozens and dozens of libraries, nothing perfect and frictionless. I though that I will add glamor or Fela or styled-components and it will be done. OMG, I was so wrong again! I tried to use styled-components, but even super simple questions were not responded by authors and still aren’t. For example, how to build reusable Text components? I am still learning how to express disagree without being a jerk, but I can’t help myself when I see bad code because bad code makes people unhappy. I am pretty sure styled components are wrong abstraction in the same manner as redux-form is. Just read endless issues.

Welcome universal dynamic typed styles and much more

The code is the best argument, so I worked whole December because I wanted to have finished what I needed asap. I think I succeeded. Este now has a typed component with typed styles with the sane basic building primitives like Box and Text with automatic vertical rhythm and modular font-scales and themes and all that jazz. I need to write a whole article about that because I think I made something like CSS in JS Bootstrap. Check este.firebaseapp.com and try to click to Show Baseline. It’s not finished entirely, I need to port some components and figure out how to make SVG universal checkboxes, etc., but it works, and I believe the idea is correct.

Future

Several “little” things like Webpack 2 are coming to town finally. One big thing I expect to happen in 2017 is declarative data like Relay. But I feel the full stack dev is somehow stabilised for near future.

Personal

The year 2016 was terrible for me. Instead of pursuing my life and business goals, I was learning things, fixing things, and rewriting things. Burnouts are real. You don’t feel like burnout until people will tell you are not smiling anymore, you are aggressive and sarcastic, whatever. I believe programming is an addiction. Drugs are not necessary evil until they disconnect you from the other people. Personal happiness is not determined by you. All positive thinking is silly hoax. It’s not how people works. You can’t say “And now I am happy” exactly like you can’t say “And now I will love someone” or “And now I don’t have cancer”. Happiness is a process and it requires the other people and several other ingredients like sport, sex, relax.

Hope this year will be better.