### Home >If a system is to serve the creative spirit, it must be entirely comprehensible to a single individual. The point here is that the human potential manifests itself in individuals. (**[Alan Kay](https://www.youtube.com/watch?v=NdSD07U5uBs&t=79s)**, 2001. Design Principles Behind [SmallTalk](https://en.wikipedia.org/wiki/Smalltalk).) ### What is "Creative Spirit Tech" about? As many do, I also make some exploration of tech topics, that are of interest to me. I created this space to share this exploration. ### What is the question you are exploring now? Here it is: > How can a single individual develop, maintain and operate software in the long run, using the mainstream tech of the day? #### Why bother with this question? Being able to create and operate software in the long run, with minimal resources has many benefits (use your imagination). #### What do you mean by a "single individual"? It means that one person should be able to handle the cognitive complexity of all technical aspects of the software. In oder words, it should be realistic for a single programmer to work with the whole tech stack. For e.g. a web app it could encompass e.g os - to web server - to app - to deployment - to evolving. "Single individual" does not imply that it should really always be only one (and the same) person doing it. #### You are a single individual exploring this. You can't possibly be playing with too many kinds of apps! So what do you have? I'm currently exploring web apps. #### What aspects of the web app should be comprehesible and doable by a single person? The aspects include, among others, the following: - architecture & design - implementation, including the frontend and backend if such a distinction makes sense for the architecture at hand - maintenance: extending, changing, bugfixing - operation: * setting up the operation system, web server, reverse proxy if necessary, etc, etc. * deployment of the app and all related services, including e.g. relational database, etc, etc. * Upgrading versions of the app, project dependencies, related services, operation system, etc, etc. #### What architectural or design principles could be extracted from the constrains we set (e.g. comprehensible by a single person, running long term, etc, etc)? I'd suggest these for a start: * **Optimize for cognitive ease**. * **Serve a purpose, not a paradigm**. E.g. no OOP for the sake of OOP, but only if it fits a specific case best. * Use a multiparadigm language * **Make heavy use of built in language features and standard library. Avoid dependencies as much as it makes sense**. * **When using dependencies, prefer more simple and generic ones**. E.g. preferably compose your web app of a simple, generic routing library, login module, etc, etc instead of going for an all-in, heavy-weight web framework. #### What tech stack options are you exploring? - For static site generation, markdown + simple scripts to convert to HTML - For dynamic sites, lightweight server like e.g. Flask + lightweight approach to js, e.g. HTMX. All that nicely served by e.g. Nginx/Ubuntu. #### What is your method of exploration? It's certainly includes some amount of reading and thinking. But I envision it to also include a set of (FOSS) projects, that anyone interested could use as they wish: - to explore the question - to review the tech implementation - or even use as a sort of template for own projects if they wish so. #### Show me some code A simple example could be the code for this very site. Please check the [blog post](blog/site_generator.md) about it.