Thoughts on the Resiliency of Web Projects
Aaron Parecki discusses the challenges of maintaining web projects, advocating for static HTML over dynamic sites, questioning new project necessity, and emphasizing simplicity and sustainability in web development.
Read original articleAaron Parecki reflects on the challenges and considerations of maintaining web projects after a significant cleanup of his server. He documented each website's purpose, usage, and technology stack, archiving some as static HTML and moving source code to a private server. Parecki expresses satisfaction in eliminating outdated code and transitioning dynamic sites to static formats, which reduces maintenance risks. He questions the necessity of new projects, pondering if they could be simpler tag pages or if they could be built using plain PHP without frameworks, which tend to complicate long-term maintenance. He emphasizes the importance of considering database usage and the implications of data storage. Parecki also discusses his commitment to maintaining Meetable, an open-source events platform, which he adapted for virtual events. He notes the challenges of keeping software updated due to frequent changes in libraries and frameworks, advocating for simpler, dependency-free solutions. Overall, his reflections highlight the importance of sustainability and long-term planning in web development.
- Parecki emphasizes the benefits of transitioning dynamic sites to static HTML for easier maintenance.
- He questions the necessity of new projects and considers simpler alternatives.
- The importance of avoiding dependencies in web projects is highlighted to reduce long-term maintenance challenges.
- Meetable, an open-source events platform, is noted as a project he continues to support and develop.
- The article reflects on the challenges of keeping software updated in a rapidly changing tech landscape.
Related
Node 18 Ate My Website
The author upgraded their Next.js website to Node.js 18, facing issues with deprecated dependencies. They rebuilt the site with TypeScript, Contentlayer, Tailwind CSS, and Vercel Analytics, emphasizing simplicity and emerging technologies.
Ask HN: Is webdev getting complicated without results to show for it?
The article highlights increasing complexity in web development due to new technologies, noting that many modern websites lack significant functional improvements, with basic CRUD operations still prevalent despite aesthetic enhancements.
The Static Site Paradox
Loris Cro's blog post discusses the complexity of personal websites, noting that normal users prefer complicated CMS solutions while engineers overlook simpler static options, advocating for a more accessible web.
Using static websites for tiny archives
The author advocates for using static websites to organize personal digital archives, emphasizing simplicity, keyword tagging, and effective file management, while promoting this method for broader archival applications.
Ease of maintenance is a feature
The article stresses that ease of maintenance is vital in software development, advocating for sustainable design to ensure resilience against team changes and to minimize operational friction.
- Many developers emphasize the issue of "stack rot," where outdated dependencies lead to project abandonment.
- There is a consensus on the benefits of using static files and minimizing third-party dependencies to enhance maintainability.
- Several commenters highlight the necessity of rewriting projects as technologies evolve, often multiple times over the years.
- Choosing mature and stable dependencies is crucial to avoid future complications and ensure longevity.
- Some developers advocate for consolidating features into existing projects rather than starting new ones to manage workload effectively.
Keep your stack flat.
Most projects of my web developer friends died after months or a few years. None survived for decades. And the reason was always stack rot.
Multiple parts of their stack became outdated and so hard to update that they quit.
My advice is to use as few technologies in your stack as possible. Sure, your project might work best with a relational db and a dedicated document store but it might be less ongoing effort to emulate one with the other.
And freeze (or at least document) the versions of any dependencies for release. Your project runs fine with CoolTech.1.4 now but in 5 years when you come to rebuild you will find that the interface to CoolTech.6.44 is completely different.
And even then things might fail. 20+ years ago I made some Java applets that were well received and useful. Technically they still work (I think) but nobody runs Java in the browser so those projects have been unusable for years. We can be smug about our pure HTML5 static sites now but who knows what the browser landscape will be like in 2050.
I've always had one primary side project of my own that's consumed 95% of all my time over the years, and so I've rewritten it from scratch at least 5 times as technologies (libraries, databases, languages, etc) have evolved. Not many people are lucky enough to love one app so much you'll do this, so your other side projects just die off, because they're not worth a rewrite.
Adjacent points: I also think that selecting mature projects for your dependencies matters significantly. My old couchdb or early node work is generally defunct. On the other hand, I have some dotnet projects that are still functional with zero updates from a decade or more ago.
Additionally, it's reasonable to keep a copy of your dependencies somewhere in case the vendor dies, the licensing changes, or something else catastrophic happens. Even if you just image dev's machines when they offboard. There have been a few times this has prevented permanent project death or rewrite emergencies for me.
I've now started to be more ruthless in cutting older projects that aren't going anywhere (or are not 100% automated) and I also try and consolidate new project ideas as a features to existing products.
Still its hard and everything is a balance. Some of my projects in case anyone's interested: https://www.hackyexperiments.com
Still haven't figured out which would be a good long term solution for frontend. For the moment I'll keep using Svelte which I really like but I have doubts about it's longevity.
Core functionality now relies on no libraries, and increasingly moving off Next.js towards more open frameworks like Remix.
At it's core it's React + JavaScript + SQL, aiming to run this thing for decades.
But when I think about Backbone.js, Vagrant, AngularJS, or Dojo.js, I remember thinking how lame and ugly they were and hated how popular they had become. I thought “this is it? you got function but no form.” But in the end, those projects fell into disuse and I was happy again.
I am building https://github.com/claceio/clace to try and fix this for internal tools. Go, go templates, HTMX, SQLite and Starlark is the stack. A goal is that apps should be easily maintainable after six months and after six years.
Related
Node 18 Ate My Website
The author upgraded their Next.js website to Node.js 18, facing issues with deprecated dependencies. They rebuilt the site with TypeScript, Contentlayer, Tailwind CSS, and Vercel Analytics, emphasizing simplicity and emerging technologies.
Ask HN: Is webdev getting complicated without results to show for it?
The article highlights increasing complexity in web development due to new technologies, noting that many modern websites lack significant functional improvements, with basic CRUD operations still prevalent despite aesthetic enhancements.
The Static Site Paradox
Loris Cro's blog post discusses the complexity of personal websites, noting that normal users prefer complicated CMS solutions while engineers overlook simpler static options, advocating for a more accessible web.
Using static websites for tiny archives
The author advocates for using static websites to organize personal digital archives, emphasizing simplicity, keyword tagging, and effective file management, while promoting this method for broader archival applications.
Ease of maintenance is a feature
The article stresses that ease of maintenance is vital in software development, advocating for sustainable design to ensure resilience against team changes and to minimize operational friction.