Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 70 additions & 38 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,21 @@

# Technology Stack

The software and systems we use to build the **`dwyl`** platform.
The software and systems we use to build **`@dwyl`**.

![la-rel-easter-KuCGlBXjH_o-unsplash](https://user-images.githubusercontent.com/194400/184178915-302f5a0e-96ab-46c9-9731-ca82affefc7e.jpg "La-Rel Easter - Child stacking blocks")
![la-rel-easter-KuCGlBXjH_o-unsplash](https://user-images.githubusercontent.com/194400/184178915-302f5a0e-96ab-46c9-9731-ca82affefc7e.jpg "La-Rel Easter - Child stacking blocks")
<!-- Photo Credit: https://unsplash.com/photos/KuCGlBXjH_o -->
</div>

<details>
<summary>Contents [click to expand]</summary>

- [Technology Stack](#technology-stack)
- [Why?](#why)
- [What?](#what)
- [The `PETAL` Stack](#the-petal-stack)
- [**`Phoenix`**](#phoenix)
- [`Phoenix` the "Most Loved" Framework in 2022](#phoenix-the-most-loved-framework-in-2022)
- [`Phoenix` the "Most Loved" Framework](#phoenix-the-most-loved-framework)
- [**`Elixir`**](#elixir)
- [`Elixir` is `#2` in 2022](#elixir-is-2-in-2022)
- [**`Tailwind CSS`**](#tailwind-css)
Expand Down Expand Up @@ -50,27 +53,33 @@ The software and systems we use to build the **`dwyl`** platform.
- [Other Tech/Tools?](#other-techtools)
- [How to Propose `NEW` Tech/Tools?](#how-to-propose-new-techtools)

<br />
</details>

# Why?

As a ***team of people***
using technology
As a ***team of people***
using technology
to **_make_ digital products**, <br />
it's _essential_ to **be _unambiguous_**
about the **stack/tools** we use, <br />
**so that _everyone_** is **clear**
what we _all_ need to master.<br />
**so that _everyone_** is **clear**
what we _all_ need to
[**master**](https://www.google.com/search?q=definition+of+mastery).<br />

<!--
to make product(s) that are
**functional, fast, beautiful, useable and reliable**!
-->

> _If **anything** is **unclear** or you have **any questions** please_
[***ask***](https://github.com/dwyl/technology-stack/issues).
[***ask***](https://github.com/dwyl/technology-stack/issues). <br />
We are always happy to answer tech stack related questions. <br />
But please make sure you read the whole doc first.

# What?

This document + diagrams _describe_
This document + diagrams _describe_
the full "**`PETAL`**" Technology Stack
we use for **`dwyl`** products/projects.

Expand All @@ -84,12 +93,12 @@ and ***world-class quality***!

![dwyl-technology-stack-diagram-PETAL](https://user-images.githubusercontent.com/194400/184719877-a6112c04-7cd9-441f-a293-e6b133d4b67c.png)

"PETAL" is an acronym<sup>1</sup>
"PETAL" is an acronym<sup>1</sup>
for the following elements:

### **`Phoenix`**

**`Phoenix`** is a Web Application Framework
**`Phoenix`** is a Web Application Framework
that does not compromise
on speed, reliability or maintainability!
**`Phoenix`** is the "_successor_"
Expand All @@ -103,16 +112,21 @@ The list of ***benefits*** Phoenix has over
Please see:
[dwyl/**learn-phoenix-framework**#our-**top-10-reasons**-why-phoenix](https://github.com/dwyl/learn-phoenix-framework#our-top-10-reasons-why-phoenix) <br />

#### `Phoenix` the "Most Loved" Framework in 2022
#### `Phoenix` the "Most Loved" Framework

`Phoenix` tops the list of "Most Loved" Frameworks
on the 2022 StackOverflow Community Survey ❤️
`Phoenix` tops the list of "**Most Loved**" Frameworks
on the
[2025 StackOverflow Community Survey](https://survey.stackoverflow.co/2025/technology#2-web-frameworks-and-technologies). ❤️
This is the **3<sup>rd</sup> year in a row**.

https://survey.stackoverflow.co/2022/#section-most-loved-dreaded-and-wanted-web-frameworks-and-technologies


![stackoverflow-most-loved-framework-phoenix](https://user-images.githubusercontent.com/194400/184833098-0e9cd055-9e4f-4c93-96ed-4411e1a8154c.png)




### **`Elixir`**

**`Elixir`** is the _functional_ programming language
Expand Down Expand Up @@ -291,29 +305,39 @@ while developing our [`app`](https://github.com/dwyl/app).
1. `Github Pages` deployment:
[dwyl/learn-**github-pages**](https://github.com/dwyl/learn-github-pages)


### Our `MVP`

We have built a fully working MVP version of our App!
Check it out at
[dwyl/**mvp**](https://github.com/dwyl/mvp)!


## Database?

The _reason_ we do not _specify_ our Database
in the "PETAL" Acronym is
that **`Phoenix`** allows us
to use **_any_ Relational Database**.

By _abstracting_ the data layer using "Ecto" the application is "_decoupled_"
The _reason_ we do not _specify_ our Database
in the "PETAL" Acronym is <br />
that **`Phoenix`** abstracts its'
database access via
[`Ecto`](https://phoenix.hexdocs.pm/ecto.html)
to provide built-in support
to the following **databases**:

* `PostgreSQL` (via [`postgrex`](https://github.com/elixir-ecto/postgrex))
* `MySQL` (via [`myxql`](https://github.com/elixir-ecto/myxql))
* `MSSQL` (via [`tds`](https://github.com/livehelpnow/tds))
* `ETS` (via [`etso`](https://github.com/evadne/etso))
* `SQLite3` (via [`ecto_sqlite3`](https://github.com/elixir-sqlite/ecto_sqlite3))

By _abstracting_ the data layer
using "Ecto" the application is "_decoupled_"
from the database. <br />
This means that if a client _asks_ us to deploy to MySQL or
Microsoft SQL Server <br />
This means that if a client _asks_ us to deploy to `MySQL` or
`Microsoft SQL Server` <br />
(_e.g. because they already have in-house capability
for maintaining one of these databases_) <br />
we can easily accommodate that
we can easily accommodate that
without re-writing _any_ of the `Phoenix` app!
Changing a couple of lines of configuration
is all that is needed.

### We _Prefer_ `PostgreSQL`

Expand Down Expand Up @@ -350,9 +374,16 @@ is because the ***community*** is _superb_.
There is a great "_bank_" of _answered_ questions on
[StackOverflow](https://stackoverflow.com/questions/tagged/postgresql)
and new questions get answered _fast_.

From 2023 to 2025 `Postgres` has remained
the **most used** and **most desired** Database:
[survey.stackoverflow.co/2025/technology#2-databases](https://survey.stackoverflow.co/2025/technology#2-databases)
46.5% of respondants use `Postgres`
more than double `MySQL` (20.5%).

## Operating System?

A _"traditional"_
A _"traditional"_
[**LAMP** stack](https://en.wikipedia.org/wiki/LAMP_(software_bundle))
includes the **Linux** Operating System
in the _name_. <br />
Expand Down Expand Up @@ -795,26 +826,27 @@ and reduce the chances of success.

## Other Tech/Tools?

We have written about
our choice of programming language _extensively_ in:
[learn-elixir/issues/102](https://github.com/dwyl/learn-elixir/issues/102).
We have written _extensively_ about
our choice of programming language in:
[learn-elixir#102](https://github.com/dwyl/learn-elixir/issues/102).

Our use of **`Elixir`** is for a **_very_ specific reason**:
we are building **fault-tolerant realtime systems**.
For the type of App we are building,
**`Erlang/OTP`** is the **_undisputed_ king**
on the **server side**.

Our use of **`Elixir`** is for a very specific reason:
we are building fault-tolerant realtime systems.
For the type of App we are building,
`Erlang/OTP` is the _undisputed_ king
on the server side.
We _could_ use almost any other language/framework,
but it would be a _lot_ more work for an inferior result.

If we need to build a **_specific_ feature**
requested by a person _using_ our product,
then we will **100%** consider a technology
If we need to build a **_specific_ feature**
requested by a person _using_ our product/service,
then we will **100%** consider a technology
that enables us to deliver it.

## How to Propose `NEW` Tech/Tools?

The way to _propose_ a specific tech/tool
The way to _propose_ a **specific tech/tool**
is simple:
[open an issue](https://github.com/dwyl/technology-stack/issues)
describe how the tech/tool
Expand Down
Loading