Tommaso Negri

Methodology

Web

I believe the web is by far the most valuable treasure of all human kind. It is the greatest collector of knowledge, experimentation, fun and opportunities that we are aware of.

Despite all the problems and quirks we can find is still the only truly fair and free place you can experience. No government nor organization has full control over what you want to share with the world. Sure, someone is trying to achieve that, but smart people will always find a way around (Web3 I look at you).

This profound respect I have for the web and the values it carries is what drives all my efforts to make it a tiny bit better. That’s why I choose carefully the technologies I work with. Here is an outline:

HTML, CSS, JavaScript

The holy trinity of all web development. Pure, semantic, beautiful HTML, CSS and JavaScript.

Ruby & JavaScript

When it comes to backend technologies there are a lot of languages and development communities out there, many of which are good choices for web development. Personally I decided to go with two main playes: Ruby and JavaScript (or NodeJS if you will).

Ruby is my first choice for the backend. Is a fun, intuitive and fast enough language to program with. It has great tooling and community support. It is also as human readable as python but without that strong and annoying indentation rules (annoying for me).

However, for some projects JavaScript might be the right choice for the backend. I'm not referring to situations that need high concurrency or something like that, I'm a solo developer and I don't usually build the next Twitter or Skype. I simply mean that when I can't find something in the Ruby space, JavaScript is the obvious second choice (I already know it pretty well for the frontend). For example I find Strapi a good tool for rapidly develop an API with an admin interface out of the box. I haven't found anything like that for Ruby.

Web Components

Web Components are the biggest leap forward since HTML5. The ability to encapsulate logic in small and reusable components supported out of the box by every browser is simply huge.

A few years ago there has been a transition towards building the frontend with JavaScript frameworks like Vue or React. These are great technologies that I use myself (I even wrote an extension for supporting Vue in a text editor), the problem is that many developers use them just for writing code in a component fashion, not for their real advantages. If you are building an in-browser app like Figma or something with rich interactions you should use those technologies, otherwise if you just want to write code in a component fashion you can simply go with web components.

There are also some great libraries of pre-built components that you can use to speed up development. I personally like Shoelace. What's cool about these libraries is that they are not like Bootstrap or Tailwind, you use them for getting common functionalities for free, not styles. Nowadays what makes the difference for most of the projects is style not functionalities, those are pretty established.

Jamstack

Jamstack is not a technology, is a way of making things. This is also the way to go for content oriented projects like small-medium blogs, portfolios, istitutional websites, etc.

The main idea behind the Jamstack is that you write content with something like Markdown or Yaml and use a generator for converting these contents into web pages. This process of conversion has to happen each time you update a content and can take some time, that's why is not suitable for projects that need a large amount of data or user generated content.

If the project has the requisites is a great choice though! Since the output is just HTML, CSS and JavaScript, the website can be hosted on a CDN (99% of the time completely free), no server required. This results in ultra fast, secure e SEO friendly websites.

If the project needs some advanced features like sending emails or selling products is possible to use external services as APIs to achieve that. These integrations open the door for advance and competitive solutions.

Personally, after a lot of experimentation, I decided to stick with two solutions. The first is Bridgetown, a static site generator forked by the Jekyll project and my default choice for every Jamstack project. The other solution is NuxtJS, a generator based on the Vue framework. The latter is used for projects that need that kind of interaction facilitated by a JavaScript framework.

The Majestic Monolith (aka: Ruby on Rails)

Ruby on Rails is a fantastic framework that simplifies developer's life since 2004. It integrates everything you might need for a web application and is the core of many great companies like: Basecamp, GitHub, Shopify, AirBnB, GitLab and more.

Someone might say that Ruby on Rails is an old technology. I say yes, is an old technology and that's a plus. Rails has stood the test of time and continued to improve. Compared to other stacks or patterns Ruby on Rails is the right fit for a small team or even solo developer and for companies that want to get the job done without worrying about which is the trending technology this month.

Recently Rails has become even better with the introduction of Hotwire (HTML Over The Wire). This set of technologies allows to create rich and modern experiences that can easily compete with most of the JavaScript backed apps.

Ecommerce (Snipcart, Shopify or Solidus)

When it comes to e-commerce there are tons of options out there. Depending on the project's needs and the chosen tech stack I usually go with one of the these solutions.

Snipcart is a simple and fast plug&play tool that can be attached to virtually any website. It provides a wonderful checkout experience, an admin panel and all the other features you would expect. For its API centric nature it is the perfect solution for Jamstack websites or when you need to add a shop to an existing project.

Shopify needs no introduction. I think is simply the perfect solution for all the projects where design is king and no advanced/custom functionalities are required. Basically Shopify replaced WooCommerce.

Solidus is the e-commerce platform for those who need to go the extra mile. It is the most advanced and configurable solution. It can be compared with other platforms like Magento and is built on top of Ruby on Rails, giving you all the flexibility you can possibly imagine. Oh and is completely free and open source.

Headless CMS & APIs

An interesting concept came out in recent years is to have an Headless CMS. The idea is to have a server with an admin interface that exposes an API consumable by multiple endpoints. This is a suggested solution only if you imagine from the get go to have contents consumed by different websites, apps and so on. If you are not in this situation is probably a bad idea since it can had some additional complexity. To develop such a system I usually go with Strapi or Ruby on Rails

VueJS

VueJS is my javascript framework of choice. As I said before I don’t think that using a framework like VueJS, React or Svelte is always a good idea. I like to start a project by looking at the easiest and dumbest possible solution. That’s because at the end of the day I have to get the job done, adding useless complexity just because is trending seems to me a lose-lose game. That being said, there are some cases where you have to have more complex animations, user interactions or in browser data manipulations. These are the situations where a javascript framework comes in handy and where I pick up VueJS.

Privacy focused solutions

I strongly believe that is possible to build successful online businesses without invading user's privacy. I also believe that a lot of times you, as client, agree with this statement too. So, why do we see all these Google Analytics out there?

I think that might be the case because is the easiest thing to do. People in my industry are already busy with a million different things, looking at new solutions that respect user's privacy is probably not considered as valuable as something else, unfortunately.

However, I think this is an extremely bad path. That's why I'm always looking at possible threats to privacy and solutions to fix them. Due to this "personal mission" I started recommending Plausible or Matomo over Google Analytics or pointing out bad privacy policies and suggesting good ones (like this as inspiration.

Of course if your business legitimately runs on ads or has special needs you can make your choices about user's privacy. The final decision is yours, what I care about is to give you all the information I have to let you take your decisions at best.

iOS & MacOS

When it comes to apps I’m not really a fan of building cross platform with tools like React Native or Electron. I clearly see the value of building native apps with native solutions. Of course most of my skills are on the web but I do my best for developing the iOS and MacOS side of an app. If the project requires to support other platforms too I’m ready to take on board dedicate developers.

SwiftUI

Just a couple of years ago it wouldn’t be possible for me, due to the limited time, to offer native development services. iOS and MacOS were two distinct platforms, each with a dedicate framework. Of course they are still that way under the hood, but Apple recently introduce a new framework called SwiftUI.

SwiftUI allows cross platform development on all the Apple products and largely simplify the way of making things. Due to his reactive nature I found it really approachable by everyone with prior experiences with javascript frameworks like VueJS or React. Thanks to this framework the barrier of entry has dropped significantly and I don’t see the value of making iOS and MacOS apps with other tools than this (I’m not referring to UIKit or AppKit of course).