Big things to small things

liorkesos
5 min readAug 6, 2018

--

Looking enough time at technology we can see trends that repeat over and over — 15 years ago I worked with mainframe Linux and after that, I suddenly understood that Amazon didn’t invent anything the whole idea of detachable volumes and floating ips has been around for 40 yrs)…
One of these recurring trends is how progress comes through big things being broken down to smaller pieces and how this moves the complexity from the application itself to the challenge of managing a group of simpler services or components. Being able to operate in smaller resolution is a key component to digital transformation of enterprise organizations.

Digital transformation is a buzzword that is voiced in meetings and conferences in various contextes but basically it boils down to “Doing stuff in a modern way so we can move and innovate in the speed of a modern company”

Spaghetti, Ravioli and Lasgna code

when trying not to get too excited while explaining one of clients (lets call him john), about components , microservices and fighting complexity by breaking up the monolith he finally uttered… So you’re taking all of the spaghetticode and mess we have dealt with (eventually) and throwing all of this to the infrastructural layer? ( What did we achieve with that?)
Thinking about what he said I replied… Exactly , The art of dealing with this mess is called devops…

I think the first time I heard the word ravioli code was in an online course by john papa talking about the move towards web components.
The main challange we have when building big projects is not getting the thing to work, that’s the easy part, but instead being able to maintain and control the monsters that we’ve created.

Our journey is to move from spaghetti to ravioli code and with that our application might be able to reach the following targets

  1. decoupled and encapsulated code
  2. Seperation of concerns
  3. Easy to extend and maintain

These ideas where introduces to me when looking at frontend architecture 4 years ago and the movement from pages to components but these recurring trends can be found in the backend with monolithic systems refactored to a microservices architecture or code once coming as a monolith or plugin based system (like Drupal or Wordpress) and being assembled by much more reusable parts (like node.js and the npm ecosystem).

My customer, realizing I was throwing the spaghetti on the system team had a point all of you’ve done is move the complexity to a different stakeholder we still need to deal with it! — This is where key tools come around and help us deal with the overwhelming complexity and this where I think the next opensource projects and companies are going to shine.

Ravioli management

Kubernetes

Kubernetes has become the emerging standard in docker orchestration, with amazon joining the cncf and docker (the company)supporting kubernetes last year it basically sent a signal that kubernetes is the next operating system you need to master .
Linux has had an amazing impact on the world and has become the defacto standard server operation system but with the complexity and challanges cloud computing introduces kubernetes enables you to manage the cloud and I predict will have similar impact on the world.
As you break up your legacy application to stateless microservices manageb by containers make sure you orchestrate it with kubernetes .

npm

We have been writing node.js powered apps since 2011 and a big reason the platform took off was its huge npm package repository amounting to 700,000 packages. When you look at a mature node application it typically has a /node_modules directory weighing 300MB and hundreds of dependencies This is typically where things get complicated but npm has a bunch of tools to manage the dependencies which let you focus on your application logic and import/require the rest.

bit

bit creates a faster workflow for sharing, discovering and using components and modules in different projects. It lets you “publish” components from any project without refactoring, install them in other projects, develop and change from any repo and collaborate with your team.
It lets you import components into any repository for further development, even if they’re installed with npm. Changes can then be synced across projects with smart updates and cross-repo component change merges.
I love the quote from their about page by Addy Osmani from Google basically chiming in with what I’m trying to say here…

“The secret to efficiently building ‘large’ things is generally to avoid building them in the first place. Instead, compose your large thing out of smaller, more focused pieces.“ — Addy Osmani

Elementor & Gutenberg

While the team at elementor describe their project as the number one page builder for Wordpress I think their project and their mission is even a deeper one.

As the world moves from pages to web components projects like elementor or Gutenberg by automatic introduce additional resolution to wordpress — the largest web ecosystem which powers 31% of the web.
It will popularize the notion of a web componets (or widget or block ) and beyond being able to drag and drop and orchestrate the components in the page they also provide dozens of components and basically are reinventing the way the mainstream builds websites.
Providing a growing number of components and the ability to have them interact perfectly within a page will provide the next generation of innovation in mainstream projects like Wordpress or Drupal.

Snyk

Snyk stands for “So now you know” — and basically it’s job is to manage the security aspect of the dependency chain of the multiple components requiring other components and typicaly adding code that has not been reviewed and that needs some sort of degree of trust.
Open source is awesome for boosting our productivity. However, taking code written by others, often with little to no vetting of its security pedigree, can put your application at risk — a risk multiplied by the many dependencies a modern application uses.
Snyk helps you understand and secure your dependencies, starting with tools that find, fix and monitor for known vulnerabilities in Node.js npm and Ruby packages.
With great complexity comes great responsibility and we need to be sure that the component we required does not introduce a threat to our system.

Conclusion

Lets return to John’s (my client) remark of us shifting the complexity around, we’re moving the complexity to areas where existing tools and methodologies exist to address the complexity.
We (@linnovate) have more of a decade of experience in building complex web projects and we have built an ecosystem for digital transformation called reopen ( which uses most of the tools mentioned above ) and we’d be happy to help you with your next chalange.

--

--

liorkesos

Open source geek with 2 companies , 5 kids and too many ideas