<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: RomanMizulin</title>
    <description>The latest articles on DEV Community by RomanMizulin (@roman_m).</description>
    <link>https://dev.to/roman_m</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F801193%2Ffcef19bc-f1de-4050-a56b-9ebaae9645b4.jpeg</url>
      <title>DEV Community: RomanMizulin</title>
      <link>https://dev.to/roman_m</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/roman_m"/>
    <language>en</language>
    <item>
      <title>Choose functional stack for next project</title>
      <dc:creator>RomanMizulin</dc:creator>
      <pubDate>Sat, 07 Dec 2024 14:59:35 +0000</pubDate>
      <link>https://dev.to/roman_m/choose-functional-stack-for-next-project-3ep7</link>
      <guid>https://dev.to/roman_m/choose-functional-stack-for-next-project-3ep7</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/roman_m" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F801193%2Ffcef19bc-f1de-4050-a56b-9ebaae9645b4.jpeg" alt="roman_m"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/roman_m/top-fp-technologies-1cj0" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Top Open Source functional programming technologies&lt;/h2&gt;
      &lt;h3&gt;RomanMizulin ・ Oct 29&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#scala&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#functional&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#haskell&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#elixir&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Top Open Source functional programming technologies</title>
      <dc:creator>RomanMizulin</dc:creator>
      <pubDate>Tue, 29 Oct 2024 18:45:35 +0000</pubDate>
      <link>https://dev.to/roman_m/top-fp-technologies-1cj0</link>
      <guid>https://dev.to/roman_m/top-fp-technologies-1cj0</guid>
      <description>&lt;p&gt;Author: Roman Matveev. &lt;a href="https://www.linkedin.com/in/r-matveev/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; &lt;a href="https://x.com/RomanMatweenko" rel="noopener noreferrer"&gt;x.com&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Purpose
&lt;/h2&gt;

&lt;p&gt;The goals of this article is to research the most popular FP based technologies to prove FP soundness and versatility and to demostrate that FP has been already with us for a long time. &lt;br&gt;
Methodology involved analyzing GitHub for the most popular projects, blog posts and academic papers.&lt;/p&gt;

&lt;h2&gt;
  
  
  A little bit of historical context
&lt;/h2&gt;

&lt;p&gt;Engaging talk with a lot of references to historical moments emphasizing point that:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Good" languages are differed from "bad" languages by theoretical base (specifically math logic brought to computer science). Not just engineered.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://youtu.be/IOiZatlZtGU?si=3a2duU8bKRotpmcJ" rel="noopener noreferrer"&gt;"Propositions as Types" by Philip Wadler - YouTube&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  LISP
&lt;/h3&gt;

&lt;p&gt;Ancestor of almost all functional languages.&lt;br&gt;
Originally was designed to solve 1 specific problem of symbolic differentiation, for which FORTRAN was very inconvenient. And eventually became general purpose-purpose language. In that sense (growing from 1 specif problem) it is similar to Erlang.&lt;br&gt;
With time passed became purer language thanks to academic influence.&lt;br&gt;
It had inspired a lot of other languages including the whole family of so-called LISP languages.&lt;br&gt;
The second-oldest high-level programming language still in common use, after FORTRAN.&lt;br&gt;
It brought to the table such essential &lt;a href="https://en.wikipedia.org/wiki/Lisp_(programming_language)#Language_innovations" rel="noopener noreferrer"&gt;concepts&lt;/a&gt; without which we can not imagine our industry today as :&lt;br&gt;
    - Conditionals not limited to goto (if-then-else)&lt;br&gt;
    - First-class functions&lt;br&gt;
    - Recursion&lt;br&gt;
    - Garbage collection&lt;br&gt;
    - Dynamic typing&lt;br&gt;
    - Interactive programming environment (REPL)&lt;br&gt;
    - Full language available at load time, compile time, and run time&lt;/p&gt;

&lt;h3&gt;
  
  
  Haskell
&lt;/h3&gt;

&lt;p&gt;Appeared in 1990 with stable release at 2010.&lt;br&gt;
If LISP started all funtional obsession in XX century then Haskell summarized ideas of languages appeared in the next 30 years. The main idea was not that academics should not reinvent same features in their languages, but to make common ground for benefits of all. Fun part is that writing I/O related code in Haskell was so annoying, so Monadic I/O was ultimately invented that has groundbraking influence. Here stonk monad plot showing Haskell m-wording the world.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2j5ekbvrsa2zsrcl0dv8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2j5ekbvrsa2zsrcl0dv8.png" alt="Haskell monading the world" width="800" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Other
&lt;/h3&gt;

&lt;p&gt;There are plenty languages worth to mention and their role in history, but let me focus on some of them relevant today. &lt;/p&gt;

&lt;h4&gt;
  
  
  OCaml
&lt;/h4&gt;

&lt;p&gt;Direct descendant of ML which Appeared as dissatisfaction with LISP writing proofers. The idea was to have types which lower logical errors. (LISP -&amp;gt; ML -&amp;gt; OCaml)&lt;br&gt;
OCaml was written in 1996 in France. It was inspired by a long line of research into ML, starting in the 1960s, and continues to have deep links to the academic community.&lt;br&gt;
Less pure comparing to Haskell but more focused on Industry. &lt;br&gt;
So if you want to participate in making tooling for whole ecosystem for future generations - it is a good opportunity to learn and make huge impact.&lt;/p&gt;

&lt;h4&gt;
  
  
  Erlang
&lt;/h4&gt;

&lt;p&gt;Appered from need for faster develompent to reliable run on telephony switches, because in 80s managers realized that they spend more on developing and maintaning software than on hardware itself. It was designed to be concurent, distributed and high available from beginning long time ago before &lt;code&gt;async&lt;/code&gt; fashion in JS and Python. In contrast, OTP and Erlang almost 30 years(open-sourced) old battle tested technology. Interesing, that originally it was propriate closed language of Ericsson's company, which is powering world networking now.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Top projects grouped by language
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://elixir-lang.org/" rel="noopener noreferrer"&gt;Elixir&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Appeared at 2012. Built on top of BEAM to make Erlang\OTP runtime more accessible, because Erlang is not user friendly really; and shares the same abstractions and OTP framework for building distributed, fault-tolerant applications. Though initially designed with dynamic typing, Elixir is actively developing static typing capabilities &lt;a href="https://www.ins2i.cnrs.fr/en/cnrsinfo/dynamic-static-elixir-begins-its-transformation" rel="noopener noreferrer"&gt;cnrs&lt;/a&gt;. As Joe Armstrong said about types "no good type system save you from node failure" — that is why Erlang language was dynamically typed — it was not focus. And it is one of the two languages in this list available on Leetcode, but I would recommend to use &lt;a href="https://exercism.org/" rel="noopener noreferrer"&gt;https://exercism.org/&lt;/a&gt; for practice firstly. You can think about this language as more modern and easy to use language for BEAM runtime than original Erlang language. &lt;br&gt;
Why does it matter? Because Erlang really powers high load. You can find out more &lt;a href="https://elixir-lang.org/cases.html" rel="noopener noreferrer"&gt;here&lt;/a&gt; about real world use cases of Erlang its VM called BEAM. Whats-app cloud handles 2 millions connection per a node for instance.&lt;br&gt;
It is simple language nevertheless a powerful one. Maybe Elixir has not really good theoretical fundament, but it is still good language and its author José Valim actively works on bringing type system with synergy of academic world. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fib1bn0o2z9zxkvcoys5y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fib1bn0o2z9zxkvcoys5y.png" alt="Image description" width="800" height="435"&gt;&lt;/a&gt;&lt;br&gt;
Picture from talk by creator of the lang José about different levels of abstractions &lt;a href="https://youtu.be/agkXUp0hCW8?si=2Osk6MSEbgocakfq" rel="noopener noreferrer"&gt;Keynote: Gang of None? Design Patterns in Elixir - José Valim | ElixirConf EU 2024 - YouTube&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://github.com/phoenixframework/phoenix" rel="noopener noreferrer"&gt;Phoenix: Top from stack overflow surveys&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Stars: &lt;strong&gt;21k&lt;/strong&gt;&lt;br&gt;
One of the most if not the most popular FP frameworks that has won "the most admired web framework" at stackoverflow research for several years in a row.&lt;br&gt;
&lt;a href="https://survey.stackoverflow.co/2023/#section-admired-and-desired-web-frameworks-and-technologies" rel="noopener noreferrer"&gt;Stack Overflow Developer Survey 2023&lt;/a&gt;&lt;br&gt;
Fullstack, Ruby inspired. Connects high load with easy of use.&lt;br&gt;
There are big companies using this framework check related block at &lt;a href="https://www.phoenixframework.org/" rel="noopener noreferrer"&gt;Phoenix Framework&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://github.com/plausible/analytics" rel="noopener noreferrer"&gt;analytics&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Stars: &lt;strong&gt;19.1k&lt;/strong&gt;&lt;br&gt;
Simple, open source, lightweight (&amp;lt; 1 KB) and privacy-friendly web analytics alternative to Google Analytics. Serious niche and good moral idea.&lt;br&gt;
All we can do - is to embrace such kind of projects.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We are dedicated to making web analytics more privacy-friendly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://github.com/supabase/realtime" rel="noopener noreferrer"&gt;supabase/realtime&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Stars: 6.6k&lt;br&gt;
One of the projects of famous supabase project which leverages Phoenix from the first place. It makes use from BEAM through Elixir.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is a server built with Elixir using the  that enables the following functionality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Broadcast: Send ephemeral messages from client to clients with low latency.&lt;/li&gt;
&lt;li&gt;Presence: Track and synchronize shared state between clients.&lt;/li&gt;
&lt;li&gt;Postgres Changes: Listen to Postgres database changes and send them to authorized clients.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.erlang.org/" rel="noopener noreferrer"&gt;Erlang/OTP&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Not just language but framework too running on BEAM. Erlang is not user friendly or looks familiar to popular languages so Elixir was created to make this incredebly concurrent platform accesable to regular web developers. .&lt;br&gt;
Joe Armstrong remarked in an interview with Rackspace in 2013:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If &lt;a href="https://en.wikipedia.org/wiki/Java_(programming_language)" rel="noopener noreferrer"&gt;Java&lt;/a&gt; is '&lt;a href="https://en.wikipedia.org/wiki/Write_once,_run_anywhere" rel="noopener noreferrer"&gt;write once, run anywhere&lt;/a&gt;', then Erlang is 'write once, run forever'."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://github.com/apache/couchdb" rel="noopener noreferrer"&gt;CouchDB&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Stars: 6.2k&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If there’s one word to describe CouchDB, it is &lt;em&gt;relax&lt;/em&gt;  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Document based reliable scalable database with nicely designed HTTP/JSON interface. &lt;br&gt;
With accompanient of  &lt;a href="https://pouchdb.com/" rel="noopener noreferrer"&gt;Pouchdb&lt;/a&gt; can be the best choice for offline-first applications with low effort data syncronisation.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://www.rabbitmq.com/" rel="noopener noreferrer"&gt;RabbitMQ&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Stars: 12.2k&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;RabbitMQ is a reliable and mature messaging and streaming broker, which is easy to deploy on cloud environments, on-premises, and on your local machine. It is currently used by millions worldwide.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Famious publish/consumer message queue with a lot of scenarios to implement. &lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://github.com/emqx/emqx" rel="noopener noreferrer"&gt;emqx&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Stars: 14k&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The most scalable open-source MQTT broker for IoT, IIoT, and connected vehicles&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://gleam.run" rel="noopener noreferrer"&gt;Gleam&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Appeared at 2016. V1 was released at 4 Mar 2024, so it does not have popular projects yet, but it grows fast. Running on Erlang VM as Elixir, but statically typed in opposite of dynamically typed Elixir and Erlang. Inspired by many languages and as author says "I stole the best ideas for this language." © Louis Pilfold . &lt;br&gt;
And I have to admit that coding in Gleam is pleasant experience. It is really easy to learn and fast LS gives instant feedback on type coherence.&lt;br&gt;
If you can choose among Erlang, Elixir and Gleam. You should deferentially look at  Gleam, but if you like Ruby look at Elixir of course.&lt;br&gt;
Maybe it is true opensource sponsored language, in this meaning it is a good example of growing contrasting to Elm.&lt;br&gt;
Try it at &lt;a href="https://tour.gleam.run/" rel="noopener noreferrer"&gt;The Gleam Language Tour&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;P.S. Remember Golang mascot? yeah... Now look at this piece of art.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzwdmihg8mvm1pcprts34.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzwdmihg8mvm1pcprts34.png" alt="Gleam mascot" width="800" height="766"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://github.com/lustre-labs/lustre" rel="noopener noreferrer"&gt;Front end in  Gleam&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Lustre allows to write fullstack applications in Gleam reusing same types!&lt;br&gt;
Basically it follows the same MVC architecture as Elm.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://clojure.org/" rel="noopener noreferrer"&gt;Clojure&lt;/a&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Clojure is a compiled language, yet remains completely dynamic. Clojure provides easy access to the Java frameworks, with optional type hints and type inference, to ensure that calls to Java can avoid reflection... is a dialect of Lisp, and shares with Lisp the code-as-data philosophy and a powerful macro system.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Appeared at 2007. From quote we can conclude that one of the main factor becoming popular is running on JVM. Concurent of Scala.&lt;br&gt;
Used at Walmart Labs&lt;br&gt;
    “Our Clojure system just handled its first Walmart black Friday and came out without a scratch.”&lt;br&gt;
For me dynamic nature is red flag nowdays, especially when there such beatiful languages such Elm, Ocaml, Haskell and maybe Gleam if it woud not have so many braces.&lt;br&gt;
Here are really titans of Clojure world in terms of numbers of stars.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/metabase/metabase" rel="noopener noreferrer"&gt;metabase&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Stars: &lt;strong&gt;37.4k&lt;/strong&gt;&lt;br&gt;
Very popular tool for work with data for non-technical people. It let to get and visualize simple data without SQL, but for more complex queries SQL is required. One technical person can make views and all non-technical part of a team can use it.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://github.com/logseq/logseq" rel="noopener noreferrer"&gt;logseq&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Stars: &lt;strong&gt;31.1k&lt;/strong&gt;&lt;br&gt;
A privacy-first, open-source platform for knowledge management and collaboration. &lt;br&gt;
Notion and Obsidian like alternative.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://github.com/penpot/penpot" rel="noopener noreferrer"&gt;penpot&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Stars: &lt;strong&gt;29.5k&lt;/strong&gt;&lt;br&gt;
The open-source tool for design and code collaboration.&lt;br&gt;
Figma alternative.&lt;br&gt;
By number of stars we can assume that IT world at least admired this tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://elm-lang.org/" rel="noopener noreferrer"&gt;Elm&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Appeared at 2012. Extremely efficient and deligtful to use to build browser UI. Not popular now - in its afterhype period of time, but definitaly impactful. Can be seen as more simple and compact child of Haskell and OCaml. Has elegant type system. Can be learn in a weekend. &lt;br&gt;
There are elm-ui, elm-review popular libraries. And there is not much activity on official site actually, but languages is alive. In &lt;a href="https://www.youtube.com/watch?v=XZ3w_jec1v8" rel="noopener noreferrer"&gt;talk&lt;/a&gt;  Evan told that he made compiler for servers, but he really struggles to make sustainable financial model. Also seems like Evan does not like online marketing his language still loving conferences. Personnaly I agree with him and I think much people prefer real events to virtual ones but it is important lesson for language designers: online presense matters.&lt;br&gt;
Check &lt;a href="https://elmcraft.org/" rel="noopener noreferrer"&gt;Elmcraft&lt;/a&gt; and oficial forum for latest news and inspiration. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.haskell.org/" rel="noopener noreferrer"&gt;Haskell&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The most academic language in the list. From the beginning made with good type design comparing to the most other popular languages where types were introduced on the go.&lt;br&gt;
Highly admired by creator of ROC language - Richard Feldman. He also praises Elm by the way.&lt;br&gt;
This language has a lot of concepts, so it is a good idea to learn language to explore FP ideas in practice. &lt;br&gt;
And I would say that language is excellent for well understood problem that can be something formally described to leverage its strong type system.&lt;br&gt;
Some researches say that there are better language than Haskell like Agda or Idris. Ok, but for many of FP languages Haskell is a progenitor. &lt;br&gt;
The most elegant and concise language in the list, nevertheless it can be unpleasant to use in production due to various ways to do the same thing.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://github.com/koalaman/shellcheck" rel="noopener noreferrer"&gt;ShellCheck&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Stars: &lt;strong&gt;35.6k&lt;/strong&gt;&lt;br&gt;
A static analysis tool for shell scripts adopted by: &lt;br&gt;
Travis CI, Codacy, Code Climate, Code Factor, CircleCI via the ShellCheck Orb&lt;br&gt;
GitHub (only Linux), Trunk Check (universal linter; allows you to explicitly version your shellcheck install) via the shellcheck plugin&lt;br&gt;
And you can use it for too if you work with bash/sh scripts.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://github.com/jgm/pandoc" rel="noopener noreferrer"&gt;pandoc&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Stars: &lt;strong&gt;33.3k&lt;/strong&gt;&lt;br&gt;
Universal markup converter. Supports numerous format from/to. Practical and helpful.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://github.com/PostgREST/postgrest" rel="noopener noreferrer"&gt;PostgREST&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Stars: &lt;strong&gt;22.7k&lt;/strong&gt;&lt;br&gt;
REST API with automatically generated OpenAPI for any PostgreSQL database. Expose database schema with filters and make PostgreSQL views for complex API endpoints.&lt;br&gt;
If you often write CRUD API for database tables manually, it will save you some time.&lt;/p&gt;

&lt;h5&gt;
  
  
  And more less popular projects
&lt;/h5&gt;

&lt;p&gt;Like &lt;a href="https://github.com/hadolint/hadolint" rel="noopener noreferrer"&gt;hadolint: Dockerfile linter, validate inline bash, written in Haskell&lt;/a&gt;; Purescript, Unison, Idris languages implemented in Haskell.&lt;br&gt;
I recommend to check ideas behinds those projects. Especially Unison's mind-blowing something naive idea about infinite computational resources.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.scala-lang.org/" rel="noopener noreferrer"&gt;Scala&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Brings FP to Java land. Good path for whom looking for functional language to code and the best job opportunities. But not elegant language at all in my humble opinion. &lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://github.com/apache/spark" rel="noopener noreferrer"&gt;spark&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Stars: 40k&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Apache Spark™ is a multi-language engine for executing data engineering, data science, and machine learning on single-node machines or clusters.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Created in 2009 at UC Berkeley's AMPLab, open-sourced in 2010 - quite some time. De facto standard for big data processing making use of Scala's functionality. Adopted by Netflix, Uber, Pinterest, Alibaba. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/enso-org/enso" rel="noopener noreferrer"&gt;Enso&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Stars: 7k&lt;br&gt;
Interesting analytical tool &lt;strong&gt;and&lt;/strong&gt; language with one-to-one visual counterpart. Its IDE has some bugs, and requiring login for some reason, but it is worth checking.&lt;br&gt;
And can be used for "Detecting Credit Card Fraud with Enso" as stated in their blog &lt;a href="https://medium.com/@enso_org/detecting-credit-card-fraud-with-enso-830605751b35" rel="noopener noreferrer"&gt;post&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python with returns lib
&lt;/h2&gt;

&lt;p&gt;Python is not functional language itself. And as I can relate does not want to be: look at lambda for instance. But this package allows to write more robust applications.&lt;br&gt;
Link to lib: &lt;a href="https://github.com/dry-python/returns/tree/master" rel="noopener noreferrer"&gt;GitHub - dry-python/returns: Make your functions return something meaningful, typed, and safe!&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  In closing
&lt;/h2&gt;

&lt;p&gt;It is safe to say that functional language can be used in almost any domain excluding maybe system engineering, if not &lt;a href="https://rust-unofficial.github.io/patterns/functional/" rel="noopener noreferrer"&gt;counting&lt;/a&gt; Rust as functional language.&lt;br&gt;
You may wonder after all why then functional programming languages are not dominating everywhere if it is so good? So Richard gave a good answer to it: &lt;a href="https://youtu.be/QyJZzq0v7Z4?si=R8jJpX7Amc2Ad-cI" rel="noopener noreferrer"&gt;Why Isn't Functional Programming the Norm? – Richard Feldman - YouTube&lt;/a&gt;.  Let it brew.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do you want full stack type safe scalable app?
&lt;/h3&gt;

&lt;p&gt;Look closer at Gleam or Phoenix. It has good balance of simplicity and FP feature along side with good development experience. Maybe add CouchDB since it runs on BEAM too.&lt;br&gt;
Great &lt;a href="https://crowdhailer.me/2024-10-04/6-years-with-gleam/" rel="noopener noreferrer"&gt;article&lt;/a&gt; on using Gleam for a long time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do you want a queue?
&lt;/h3&gt;

&lt;p&gt;RabbitMQ for general use, EMQX for IoT.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do you want analytics?
&lt;/h3&gt;

&lt;p&gt;Give Enso or MetaBase a shot.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do you want complex reliable backend for WEB or for CLI?
&lt;/h3&gt;

&lt;p&gt;Look at Haskell or OCaml. Which one specifically? There is a good &lt;a href="https://dev.to/chshersh/8-months-of-ocaml-after-8-years-of-haskell-in-production-h96"&gt;article&lt;/a&gt; comparing from an experienced developer in both languages.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do you want frontend?
&lt;/h3&gt;

&lt;p&gt;Elm or Elm inspired frameworks. Fortunately there are infinitely many Elm inspired frameworks like mentioned Lustre or something esoteric like Unison lang &lt;a href="https://share.unison-lang.org/@hojberg/html" rel="noopener noreferrer"&gt;library&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do you want to try FP in TS or Python?
&lt;/h3&gt;

&lt;p&gt;fp-ts for TypeScript, returns for Python.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do you want insane Data/ML stuff?
&lt;/h3&gt;

&lt;p&gt;Spark&lt;/p&gt;

&lt;p&gt;P.S. Radar version of this article would be good.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;John McCarthy, 1979, History of Lisp&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://research.microsoft.com/~simonpj/papers/history-of-haskell/history.pdf" rel="noopener noreferrer"&gt;Hudak, Paul; Hughes, John; Peyton Jones, Simon; Wadler, Philip (2007). "A history of Haskell"&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://paulgraham.com/avg.html" rel="noopener noreferrer"&gt;Beating the Averages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/0if71HOyVjY?si=5eri2O_O04u-NBYb" rel="noopener noreferrer"&gt;Functional Programming in 40 Minutes • Russ Olsen • GOTO 2018 - YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=LkqTLJK2API" rel="noopener noreferrer"&gt;Why algebraic data types are important - Bartosz Milewski&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>scala</category>
      <category>functional</category>
      <category>haskell</category>
      <category>elixir</category>
    </item>
    <item>
      <title>Rate my python async snippet</title>
      <dc:creator>RomanMizulin</dc:creator>
      <pubDate>Sat, 27 Apr 2024 22:20:11 +0000</pubDate>
      <link>https://dev.to/roman_m/rate-my-python-async-snippet-mh4</link>
      <guid>https://dev.to/roman_m/rate-my-python-async-snippet-mh4</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9huyyg04ehmevaczycbn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9huyyg04ehmevaczycbn.jpg" alt="Image description" width="800" height="50"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>asynchronous</category>
      <category>programming</category>
      <category>coding</category>
    </item>
    <item>
      <title>Simple tips for predictable code</title>
      <dc:creator>RomanMizulin</dc:creator>
      <pubDate>Mon, 22 Apr 2024 10:25:35 +0000</pubDate>
      <link>https://dev.to/roman_m/simple-tips-for-predictable-code-2c8l</link>
      <guid>https://dev.to/roman_m/simple-tips-for-predictable-code-2c8l</guid>
      <description>&lt;p&gt;Functional programming is a complex topic in Python, but here are simple rules, that anyone can stick to and write more reliable and readable functions from my 4y+ experience:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write type annotations.&lt;/li&gt;
&lt;li&gt;Do not mutate input data.&lt;/li&gt;
&lt;li&gt;Use less classes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsxw02e8xaey99nxie4uk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsxw02e8xaey99nxie4uk.png" alt="simple example" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it!&lt;/p&gt;

&lt;p&gt;P.S. Yes, there are standard and 3rd party libraries which can enhance productivity, but see tips above as a general rule and common ground.&lt;/p&gt;

</description>
      <category>python</category>
    </item>
    <item>
      <title>Platform engineering</title>
      <dc:creator>RomanMizulin</dc:creator>
      <pubDate>Sun, 07 Apr 2024 19:24:47 +0000</pubDate>
      <link>https://dev.to/roman_m/platform-engineering-1i67</link>
      <guid>https://dev.to/roman_m/platform-engineering-1i67</guid>
      <description>&lt;h1&gt;
  
  
  Definition
&lt;/h1&gt;

&lt;p&gt;Platform engineering - is a process of crafting of an &lt;em&gt;internal&lt;/em&gt; portal and related DevOps tools for &lt;em&gt;developers&lt;/em&gt;. The goal is to encompass infrastructure technologies in a way to reduce developer's cognitive load via meeting developer's needs. &lt;br&gt;
How does it differ from DevOps? While DevOps is related more to approach or philosophy of making and managing products in collaborative manner with shared responsibility between developers and operations, platform engineering is focused on solving specific problems of internal developer teams by providing set of tools. So platform engineering contributes to DevOps.&lt;/p&gt;

&lt;h1&gt;
  
  
  Who need and when
&lt;/h1&gt;

&lt;p&gt;When there are emerging different tools and approaches for common problems from different teams, several problems and intuitive intentions come:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unifying development tools for

&lt;ul&gt;
&lt;li&gt;easy onboarding&lt;/li&gt;
&lt;li&gt;cross team workforce exchange&lt;/li&gt;
&lt;li&gt;to have common ground for tools and processes that will be build on top of these tools &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Finding "golden path" that enables developers to work efficiently with pleasant development experience (DevExp) &lt;/li&gt;
&lt;li&gt;Managing services, i.e. keep track of ownership, technical requirements and other meta information.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  What platform engineer should know
&lt;/h1&gt;

&lt;p&gt;This field necessitates a dual expertise: infrastructure knowledge(mostly cloud) and programming prowess. Also you &lt;em&gt;should&lt;/em&gt; love DevExp. If you use ancient tools and have no intentions to make it better even for personal use then maybe platform engineering is not for you really. &lt;/p&gt;

&lt;h1&gt;
  
  
  Technologies and tools
&lt;/h1&gt;

&lt;p&gt;Of course, you can build everything from the scratch, but there are already popular technologies in this field.&lt;br&gt;&lt;br&gt;
One of the them which is must-know is Backstage - &lt;strong&gt;framework&lt;/strong&gt; offering basic necessity, a lot of community driven plugins such an integration with Gitlab/Github and a basement for company specific needs by developing own plugins.&lt;br&gt;
That said, after gathering development needs, develop section inside backstage in backstage via React, Typescript and choose plugin architecture pattern one of 3.&lt;/p&gt;

&lt;p&gt;Another quite widespread technology is Argo CD - a declarative, GitOps continuous delivery tool for Kubernetes. Using Git repositories as the source of truth for defining the desired application state. You define tracking strategy once or when need, you push, Argo updates target environment.&lt;br&gt;
Overall, complete solution can look complicated. Be sure to evaluate what you really need depends on company size and already used instruments. Check out &lt;br&gt;
catalog of platform tools  &lt;a href="https://platformengineering.org/platform-tooling"&gt;Platform Tooling&lt;/a&gt;!&lt;br&gt;
And of course, try to avoid companies with old/boring technologies at all cost.&lt;/p&gt;

&lt;h1&gt;
  
  
  Backstage showcase
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://demo.backstage.io/"&gt;Backstage Demo&lt;/a&gt;&lt;br&gt;
How adoptation of the service can look like.&lt;/p&gt;

&lt;h1&gt;
  
  
  What reports say
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Security is number 1 consideration&lt;/li&gt;
&lt;li&gt;Product manager of internal platform matters&lt;/li&gt;
&lt;li&gt;It requires both time and effort before an Internal Developer Portal (IDP) starts to generate tangible value for developers.
# Certification&lt;/li&gt;
&lt;li&gt;Simple introduction into Backstage &lt;a href="https://training.linuxfoundation.org/training/introduction-to-backstage-developer-portals-made-easy-lfs142x/"&gt;Introduction to Backstage: Developer Portals Made Easy (LFS142x) - Linux Foundation - Training&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Any certificates for developing kubernetes applications&lt;/li&gt;
&lt;li&gt;Any cloud certificates
# What looks like typical vacancy
From requirement we can see that tech stack can be anything, but some kind of Cloud, Container orchestrator, Programming language&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;AWS / Azure ADO, Terraform, KMS and Cognito, Grafana, AWS Cloudwatch &amp;amp; Cloudtrail, MS SQL/SSIS / Aurora Postgres, ASP .NET, Hangfire, Entity Framework, Dapper, Redis, Amazon ElastiCache, Amazon EC2, Rabbit MQ, AWS QuickSight, Azure Active Directory, Amazon CloudWatch, Azure Active Directory, SCCS: Git, Argo CD. Programming Languages: React, C# .NET, Python.&lt;/p&gt;
&lt;h1&gt;
  
  
  Author social links
&lt;/h1&gt;

&lt;p&gt;Feel free to write a comments or remarks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/r-matveev/"&gt;linkedin.com/in/r-matveev/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.instagram.com/mizulinshina/"&gt;Roman (@mizulinshina) • Instagram photos and videos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/RomanMatweenko"&gt;Profile / X&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Communities
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Slack - big and active space [Join Platform Engineering on Slack | Slack](&lt;a href="https://join.slack.com/t/platformengin-b0m7058/shared_invite/zt-2fbb2ci12-uURYT_JMYQ%7E_gQ%7EIKNYd0Q"&gt;https://join.slack.com/t/platformengin-b0m7058/shared_invite/zt-2fbb2ci12-uURYT_JMYQ~_gQ~IKNYd0Q&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  References and futher reading list
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://argo-cd.readthedocs.io/en/stable/"&gt;Argo CD - Declarative GitOps CD for Kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.puppet.com/blog/platform-engineering-vs-devops"&gt;Platform Engineering vs. DevOps: Explaining Differences + Uses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.puppet.com/success/resources/state-of-platform-engineering"&gt;2024 State of DevOps Report: Success | Puppet by Perforce&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://platformengineering.org/platform-tooling"&gt;Platform Tooling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.qovery.com/blog/the-10-platform-engineering-tools-to-use-in-2022/"&gt;Top 10 Platform Engineering Tools You Should Consider in 2024 - Qovery&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>platformengineering</category>
      <category>devops</category>
      <category>idp</category>
      <category>internaldeveloperportal</category>
    </item>
    <item>
      <title>Practices and tools for a startup</title>
      <dc:creator>RomanMizulin</dc:creator>
      <pubDate>Thu, 23 Mar 2023 01:20:09 +0000</pubDate>
      <link>https://dev.to/roman_m/practices-and-tools-for-a-startup-39h7</link>
      <guid>https://dev.to/roman_m/practices-and-tools-for-a-startup-39h7</guid>
      <description>&lt;p&gt;Approaches needed for a start-up are absolutely not suitable for large companies like Yahoo, Google or Amazon. &lt;/p&gt;

&lt;p&gt;The purpose of the article is to give a general idea of the "right" approaches when creating a startup.&lt;/p&gt;

&lt;h3&gt;
  
  
  What approaches are needed for a startup?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Making a feature fastly is more important than following "best practice".&lt;/li&gt;
&lt;li&gt;You can choose unstable libraries, but more convenient and functional which help for rapid evolution.&lt;/li&gt;
&lt;li&gt;Bet on people who can make a feature here and now rather than on those who will do it right, but for longer.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These approaches work well in the short term, but after a relatively short time, problems may begin slowing down the pace of development:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Coupling and cohesion of the code&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;You can't just figure out what's going on in the code section without making 10 deep jumps. The speed of development gradually decreases.&lt;/li&gt;
&lt;li&gt;It is impossible to split the code, to separate it into separate entities or modules or services because technical and business entities are closely intertwined with each other or because the module takes over too much.&lt;/li&gt;
&lt;li&gt;In a couple of years, it will be easier to rewrite the entire project from scratch than to try to refresh and refactor the current code base. Examples: Photoshop, khan academy. You can name a few by yourself.&lt;/li&gt;
&lt;li&gt;It may be necessary to rebuild the application a little differently for a new hypothesis. Again, high connectivity will prevent this. Instead of building the necessary application from the components brick by brick with improvements, you will have to copy-paste and make small changes in a lot of code sections. And God willing, you will have time to write tests before that.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bad DevExp&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Increasing cognitive load.&lt;/li&gt;
&lt;li&gt;Semi-automated deployment -- every time you need to keep in mind some technical elements such as environment variables in order to perform a step-by-step algorithm that could be generally speaking automated at the level of a Bash script or CI\CD.&lt;/li&gt;
&lt;li&gt;Partly manual formatting of the code. There are auto-formatters for almost all languages used in production. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Insufficient elaboration of the task before its transfer to development&lt;/strong&gt;
It is fraught with repeatedly redoing the features, or the programmer will be forced to think about the possible states and transitions between them himself, taking into account the business domain nuances, which can take a lot of time, not to mention the increased cognitive load. Maybe this is a programmer in a startup?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The recipe for overcoming problems is quite simple:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;If possible, write isolated code - low-coupling with high cohesion.&lt;/li&gt;
&lt;li&gt;Automate processes. The ideal is a ready-to-use development platform in which most technical issues are solved, which allows developers to focus on business-specific tasks. For small teams it is a luxury, for big teams it is crucial.
In a startup, start with strict naming conventions\paths\approaches - do not forget to document, or even better at the level of checks in the CI\CD, put into auto-formatters, pyinfra and look at &lt;a href="https://about%20.gitlab.com/topics/gitops%20/"&gt;gitops&lt;/a&gt;, when the transition to Kubernetes is ripe.
Ideally, automate some checks at the pre-commit stage of a project based on agreements and force devs to use pre-commit.&lt;/li&gt;
&lt;li&gt;Detail tasks before transferring to development or lay down time for study in development.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A balance between long-term and short-term goals. Naturally, if possible, because most startups are constantly on the verge of collapse. There are things that, if not laid down at the very beginning, then they will shoot at an inconvenient moment - they will significantly slow down development if they do not force them to fix bugs most of the time.&lt;/p&gt;

&lt;p&gt;We start a project from business entities. Our task is to clearly reflect business entities in technical models and implement business logic tolerably from the point of view of speed. You can rent or buy impressive capacities for relatively little money, and it is unlikely that it will be cheap to write a product from scratch. Therefore, you can choose not the fastest language like Python or Javascript and related abstract magic technologies, but you will fork out for a powerful server. It is the best way to build MVP for checking hypotheses than writing incredibly fast bulletproof code for most cases. &lt;/p&gt;

&lt;h3&gt;
  
  
  Selection of tools
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Use what the team is best able to work with, or lay down time for transition and adaptation.&lt;/li&gt;
&lt;li&gt;Get acquainted with &lt;a href="https://stackshare.io/posts/top-developer-tools-2022"&gt;new&lt;/a&gt; related solutions that can solve some problems and speed up the development of a type of auto-generation of elements for the frontend based on design, or tools for creating internal tools,  specific CI\CD for mobile applications.&lt;/li&gt;
&lt;li&gt;You can use tools that are currently in beta, nevertheless, these tools should already have a living ecosystem and an active contributor.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Monolith or microservices?
&lt;/h3&gt;

&lt;p&gt;Of course, firstly it is better to make a good monolith with clear interfaces for the libraries\modules than full-fledged microservices for all the best of the best practices. Maybe your product will not live up to the need for microservices, and it most likely will not live, but if it does, then you have low-coupling code and, possibly, autotests, which will make it easy to cut the monolith piece by piece into microservices.&lt;/p&gt;

&lt;h3&gt;
  
  
  Environment
&lt;/h3&gt;

&lt;p&gt;There is no more painful thing than repetitive necessary time-consuming steps to run or build an application. The environment should not make you suffer by doing monotonous actions to launch the service and test a new feature or catch a bug. Ideally, this is one command - and written in a README file - for each environment without a long wait, when the service code is checked for quality, assembled and rolled out to dev stand.&lt;br&gt;
&lt;a href="https://pyinfra.com%20/"&gt;pyinfra&lt;/a&gt; -- take a closer look to automate processes at the initial stage.&lt;/p&gt;

&lt;h3&gt;
  
  
  ORM or NOT for ORM?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;There are a lot of ORM libraries for various especially high-level languages. It is okay for a really simple CRUD application. For something at least somewhat complex (2+ JOINs) and/or especially performance - only raw SQL queries I would suggest.&lt;/li&gt;
&lt;li&gt;There is an additional level of abstraction between the technology and your code, which may limit you or, most unpleasant of all, it will put an unobvious bug after updating the library at the most inconvenient moment.&lt;/li&gt;
&lt;li&gt;ORM dialect can be updated to the major version and, surprise, all your ORM code has become a legacy. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  GraphQL or REST API?
&lt;/h3&gt;

&lt;p&gt;Selection criterias: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developer's experience.&lt;/li&gt;
&lt;li&gt;Configuration of backs\fronts. Where do you want to shift the work of getting data from the backup? &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;IMHO, it is better REST in most cases, because the frontend focuses on designing, and endpoints can be written around business entities, thereby creating a clear visual structure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Database
&lt;/h3&gt;

&lt;p&gt;Most likely, you will have enough of SQLITE to test the hypothesis. If you are creating a mobile application, then take a closer look at &lt;a href="https://firebase.google.com%20/"&gt;firebase&lt;/a&gt; or &lt;a href="https://pocketbase.io%20/"&gt;PocketBase&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;PostgreSQL is a wonderful database, but take into account the overhead costs of hosting, monitoring, configurations and dumps -- administration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Containers
&lt;/h3&gt;

&lt;p&gt;Docker - must-have. It has a lot of documentation and a large community, any issue can be solved very quickly.&lt;br&gt;
Docker-compose - when containers become more than 1.&lt;br&gt;
Kubernetes + &lt;a href="//www.rancher.com"&gt;rancher&lt;/a&gt; -- when you have money for a DevOps engineer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Low code, no code
&lt;/h3&gt;

&lt;p&gt;There are a lot of solutions on the market for websites, &lt;a href="https://flutterflow.io%20/"&gt;mobile applications&lt;/a&gt;, frontends (&lt;a href="//locofy.ai"&gt;locofy&lt;/a&gt;), backends.&lt;br&gt;
Keep in mind that powerful and low-code multifunctional solutions without code sometimes require a long study. And, again, this is an additional level of abstraction, which means less control and restrictions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Internal tools
&lt;/h3&gt;

&lt;p&gt;For what? To automate internal business and technical processes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://budibase.com%20/"&gt;budibase&lt;/a&gt; low-level open-source code platform for creating internal tools, workflows and admin panels in minutes. Supports PostgreSQL, MongoDB, Rest API, Docker, K8s and more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://retool.com%20/"&gt;re-tool&lt;/a&gt; is not open source, but also good.&lt;/p&gt;

&lt;h3&gt;
  
  
  Monitoring and metrics
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/louislam/uptime-kuma"&gt;uptime-kuma&lt;/a&gt; -- a minimalistic multifunctional thing to understand that your service is alive. There are integrations for alerts.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://prometheus.io%20/"&gt;prometheus&lt;/a&gt; + &lt;a href="https://grafana.com%20/"&gt;grafana&lt;/a&gt; -- the earlier, the better. It will give an idea of how your service is used by technical and business metrics.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Files
&lt;/h3&gt;

&lt;p&gt;If you just have files, then any s3-like bucket will suit you. If you need to store media files and especially do transformations with them, then take a closer look at &lt;a href="//download.io"&gt;download.io&lt;/a&gt; and &lt;a href="https://cloudinary.com/"&gt;https://cloudinary.com/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  PWA
&lt;/h3&gt;

&lt;p&gt;Maybe PWA is suitable for the first version instead of a mobile application? You will save a lot of time, and you are unlikely to get to the top of apps store quickly.&lt;br&gt;
In addition, some solutions also allow you to build a native application from the PWA.&lt;/p&gt;

&lt;h2&gt;
  
  
  Uber starter pack for MVP
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/charliermarsh/ruff"&gt;ruff&lt;/a&gt; for Python, &lt;a href="https://github.com/rome/tools"&gt;rome/tools&lt;/a&gt; for JS&lt;/li&gt;
&lt;li&gt;sqlite / pocketbase / firebase&lt;/li&gt;
&lt;li&gt;piinfra&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pre-commit&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Gitlab git flow&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>python</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
