Title: The Economics Book - Big Ideas Simply Explained (Audiobook format)
Author(s): Dorling Kindersley Ltd (DK)
Continuing with non-technical leaning, I just finished another DK audiobook, this one about economics. Similarly to The Business Book from the same editorial, in around 16 hours of we'll be given a historical tour of economics presenting multiple economic models, theories and ideas (according to the description, around 100 of the those).
Some of the topics we'll learn about are: monopolies, oligopolies, competition, markets, predatory marketing (and other types), economic bubbles, inflation and employment, economic models, rationality, crisis, how banks work and what "bank runs" are... And, as you might imagine, some are not trivial, while others feel simple to understand once properly explained.
Another quite interesting title, of course not a deep dive but neither shallow, probably a good starting point to then focus on the models that appeal. Of course considering that I have no clue about the topic, so I might be wrong, but I felt I learned a lot.
Imagine the following scenario. You and a colleague have written an architecture proposal to implement Contract Testing into the system, so most services can benefit from it. You've built a working proof of concept, all using internal frameworks, protocols and the existing messaging system, because you don't like reinventing the wheel but when you're already driving a custom-made car, you think it's if not better at least less friction-inducing to use existing building blocks instead of introducing new tools into an already complex system.
It works, it is simple (
json), it plugs into the existing services ecosystem and automatically builds the schema definitions of modern services, and with some extra love can theoretically be made almost 100% compatible even with the old legacy ones. Everything seems ready to showcase and proceed to ask for time and resources to make it a real project.
You begin to finally present it at the architecture committee in all it's glory. After five minutes talking about how it's implemented, somebody asks: "I'm sorry... what exactly it's contract testing and what does it add?" 💥
That is the moment when you realize you made a huge mistake... You assumed everybody, being senior roles, had knowledge of the basic pillar: what is contract testing, why is interesting and what problems it solves or aids to ease.
The meeting shifted to some improvised explanation and a brief "next steps", but it felt like the magic of the technical approach was lost, it missed the hype train. Nobody can measure the quicker test development or the added safety net for releasing new service versions without breaking others if they don't know that's a problem and there's a certain way to solve it.
You don't need to go to the other extreme and explain everything like you're a five year old, but you should always include a basic introduction to the topic.
Remember that old song from the classic Monty Python's film Life of Brian, Always look on the bright side of life? After so many years it's still stuck in my head 😃
2020 is unfolding as either a weird year or directly a bad year to most people, but in my case some relevant events started in 2019, and even I have to go further back to provide enough context.
In 2017 I switched jobs and I was exploring going full-remote, but in the end I went to a small Spanish ticketing company. It got acquired in early 2018 and, suddenly, a ~70 employees company became part of a multinational with +1000 employees. A few months later they also bought a Canadian company, and on January 2019 I asked my manager if there was a way to get transferred to Canada. I was told that at least in 2019 was impossible, as I was one of the two IC5 level engineers in Eventbrite Spain and I was vital for the Madrid office.
After summer 2019, my partner and I realized we really wanted to change, so I came back to my manager and explained the situation; we agreed to explore a transfer to the Vancouver office for early 2020. This was at the beginning of September. After a few internal conversations, waits and approvals in December 2019 I went to Vancouver and got the final approval from that office.
Advancing to March 2020, with all paperwork ready, the house almost empty, and basically everything good to go... COVID-19 hit globally, and specially hard in Spain. At the beginning of the global confinement, as borders closed we couldn't fly to Canada; then, with the forecasting of extended confinements (which in the ticketing business means almost zero income) the transfer got frozen; shortly after, the company laid off half of the workforce, which included the Vancouver office, so the whole transfer idea went away.
While the lay-offs didn't affected me directly, I was contacted by an ex-colleague with an interesting offer, and this time I listened, liked what I was told and took the opportunity.
Having summarized the key points, what initially was a negative outcome has pivoted to a series of changes for the better:
I started to think about becoming full remote around 2017 but didn't in the end. Now, even if currently it's hard to travel to other countries because of the COVID situation, I have the freedom to move anywhere in the world when the time is right. We're also no longer tied to living in a big city in order to "have an interesting job", so we're moving to the North of Spain to enjoy some nature and a colder (and thus, better) weather.
I've switched my day to day development language one more time! How different is working with Java "for real" from the Java you learn at university, and even from books. Java 8+ features, Lombok, Guava, Dagger, JAX-RS... plus GCP services (Pipelines, MapReduce, DataStore, BigQuery...), and the project itself, which is a new area for me. I am so happy to be learning new things almost every day. Combined with keeping working in English, which means I practice it a bit, I am quite satisfied with the decision.
While discussing and afterwards preparing for the transfer we weren't sure if there was going to be a reallocation package or not, so we took a minimalistic approach regarding physical goods. But before that we had already started to walk that path, in early 2019 when we moved outside of the city center. As an example, excluding clothes and my monitor, all my stuff fits in a backpack and a single standard size box . Two laptops, two handheld game consoles, a tablet, a kindle (I keep only one physical book, until I finish reading it), the phone... and mostly just accessories and cables.
It's been a slow and iterative process, and sometimes not easy to apply. For example, I had a collection of boardgames, and quite a few old videogame consoles, but I gifted or sold each and every one of them. And same with printed books and other things that had emotional value but really I wasn't going to use any more.
We had an old car, and last year almost broke; repairing it was expensive but we had to hold on to it for a few more months. Nowadays was due for another round of checks and potential repairs (again all but cheap), so we sold it instead, opting to try the car leasing model. We now only pay a monthly rent and gas, contract gets renewed each few years (and we get the choice of switching to a different vehicle if we want), and even an early cancellation of the leasing would cost significantly less than remaining rent quotas. Similar to that we have removed or simplified other personal and financial obligations. "The less you have, the less you need to worry about".
I recently wrote about habits and mentioned specific ones I've been shaping, like pomodoros or meditation, but there have been other areas of improvement, like food & health, a bit of sport (at minimum fitness maintenance, but slowly increasing), quality family time, and keeping less hobbies but fully enjoying the ones that remain. I still think days fly away too quickly, but I definitely "do more by doing less".
 : Actually I also have two "optional hobbies" boxes, things that if there's space (both physical and regarding my time schedule) I'll ask my family to send me, but else I can live without.
Note: Just in case you need a quick refresher, wikipedia has a nice description of strong and weak typing.
In recent years I became a firm defender of Python static typing (via type hints and MyPy, more details at this blog post). It is not that Dropbox, Stripe, Microsoft, Facebook and many others are creating immense projects around dynamically-typed languages, I've also worked with big and sometimes codebases in a variety of languages, and I've seen first-hand how difficult and mentally exhausting is to understand code when there are no type hints, how error-prone it is no matter the amount of tests you add (many of them superfluous and just palliating the fact that any variable can hold anything) and how your IDEs and tools can barely cope with those big codebases (even if it's a robust one like PHPStorm, RubyMine or Visual Studio Code). For an early startup of course you go faster with a dynamic language, I love Python because I get what I want with so few lines of code, but I would probably never ever use it "naked" anymore for anything serious if the plan is to evolve it and work with other people.
PHP introduced type hints in PHP 5.1, but really until version 7 didn't have enough primitive declarations. HipHop compiler was an amazing idea to speed up PHP: Simply compile all of it into C binaries, and now there's a full virtual machine (HHVM) making it more akin to Java than C++, although it's diverging into Facebook's Hack language so it's no longer "pure PHP".
Python has had type hints since version 3.5, optional and allowing also "gradual typing", but with the deprecation of Python 2 its gaining a lot of traction. The benefits will be broader once specific compilers (like mypyc) get more mature, as then Python modules would be able to be compiled into way faster C extensions (much like PHP's HipHop principles).
I think that this static typing convergence of many development languages is just one way of dealing with bugs and errors in long-lasting projects. Code linters and auto-formatters (example for python) are another way, dealing in this case with the human factor: Nobody will remember always all the rules, or will spend time nitpicking instead of focusing on real code issues, so better to enforce them automatically. Other more radical approaches are directly new languages: Both Go and Rust were born to try to fix C++ problems, and Hack derives from PHP.
In the end, all seems to circle around the same: Trying to build robust software in a scalable way requires certain development language guarantees and safeties.
Title: The Business Book - Big Ideas Simply Explained (Audiobook format)
Author(s): Dorling Kindersley Ltd (DK)
I am lately expanding to not only reading about pure technology related topics, and business is something I don't pay much attention to, and I should. I also decided to digest this title in the form of an audiobook, convinced that, with a duration over 16 hours, it was not going to be a smaller version of the textbook. I definitely don't regret spending the time.
Inside, we find a lot. As the description says, learning about "more than 80 theories and big ideas about trade, commerce, and management" means it can't spend too much on each topic, and while a few feel too brief, it's enough to spark interest on reading more of any that sounds interesting to you. All of them go from the past up until 2013, so a few times it feels a bit outdated. For example, mentions Netflix, Amazon and Dell, but the data and sometimes even the techniques mentioned are different today (e.g. Dell now offers a much narrower customization of laptops/PCs, precisely what in the past made it so successful).
There are great insights and topics relevant today, from applying Kaizen, to the benefits of cross-functional teams, and of course mentions the Agile Manifesto. There are very few software related theories, mostly are generic, which I appreciate as we can still apply them, but they are less "tainted" this way. Again as an example, we're told studies and experiments were made to confirm that cross-functional teams work better, faster and even create stronger bonds between its members. Now think about the typical silos in software company: Systems, Design, Product,...
I've focused on a few samples, but there are way more. Even the book cover provides some hints about what you will find inside:
I enjoyed it a lot, so much as to going to read/listen to more titles from DK, and maybe even in the future grab the book to see the illustrations (which look to be really nice summaries).