Fix typos and change some grammatical constructions

This commit is contained in:
daniel.motzko
2021-07-02 11:30:20 +02:00
parent 74f3203a4e
commit 8124c567ed
38 changed files with 62 additions and 141 deletions

View File

@@ -2,8 +2,8 @@
title: "ADR"
ring: assess
quadrant: methods-and-patterns
---
Architecture Decision Records
ADR is a lightweight documentation of important architecture decisions taken by the team.

View File

@@ -2,32 +2,19 @@
title: "Akka Streams"
ring: assess
quadrant: languages-and-frameworks
---
In our backend services, we frequently encounter the task to transform data
coming from and uploading to external sources and services.
In our backend services, we frequently encounter the task to transform data coming from and uploading to external sources and services.
Building more complex data transformation processes with Akka Actors has proven
very difficult for us in the past.
Building more complex data transformation processes with Akka Actors has proven very difficult for us in the past.
Seeing this data as a stream of elements could allow handling them piece by
piece and only keeping as much of the data in-process as can currently be
handled.
Seeing this data as a stream of elements could allow handling them piece by piece and only keeping as much of the data in-process as can currently be handled.
[Akka Streams](http://doc.akka.io/docs/akka/current/scala/stream/index.html) is
a [Reactive Streams](http://www.reactive-streams.org/) implementation that
provides a very end-user friendly API for setting up streams for data
processing that are bounded in resource usage and efficient. It uses the Akka
Actor Framework to execute these streams in an asynchronous and parallel
fashion exploiting today's multi-core architectures without having the user to
interact with Actors directly. It handles things such as message resending in
failure cases and preventing message overflow. It is also interoperable with
other Reactive Streams implementations.
[Akka Streams](http://doc.akka.io/docs/akka/current/scala/stream/index.html) is a [Reactive Streams](http://www.reactive-streams.org/) implementation that provides a very end-user friendly API for setting up streams for data processing that are bounded in resource usage and efficient.
It uses the Akka Actor Framework to execute these streams in an asynchronous and parallel fashion exploiting today's multi-core architectures without having the user to interact with Actors directly.
It handles things such as message resending in failure cases and preventing message overflow. It is also interoperable with other Reactive Streams implementations.
Our first trials with Akka Streams were promising but we haven't yet implemented
complex services with it.
Our first trials with Akka Streams were promising but we haven't yet implemented complex services with it.
We will continue looking into it together with the
[Alpakka](/languages-and-frameworks/alpakka.html) Connectors for integration
We will continue looking into it together with the [Alpakka](/languages-and-frameworks/alpakka.html) Connectors for integration
work.

View File

@@ -2,18 +2,10 @@
title: "Alpakka"
ring: assess
quadrant: languages-and-frameworks
---
When using [Akka Streams](/languages-and-frameworks/akka-streams.html) to build
reactive data transformation services you usually need to connect to several
different services such as FTP, S3 buckets, AMQP brokers or different databases.
When using [Akka Streams](/languages-and-frameworks/akka-streams.html) to build reactive data transformation services you usually need to connect to several services such as FTP, S3 buckets, AMQP brokers or different databases.
[Alpakka](https://developer.lightbend.com/docs/alpakka/current/) provides
integration building blocks for Akka Streams to access these services in a
reactive fashion and contains transformations for working with XML, CSV or
JSON structured data.
[Alpakka](https://developer.lightbend.com/docs/alpakka/current/) provides integration building blocks for Akka Streams to access these services in a reactive fashion and contains transformations for working with XML, CSV or JSON structured data.
Combined, Akka Streams and Alpakka enable us to build small reactive
integration services with minimal resource consumption and good performance, and
are a good alternative to larger ESB solutions or integration tools.
Combined, Akka Streams and Alpakka enable us to build small reactive integration services with minimal resource consumption and good performance, and are a good alternative to larger ESB solutions or integration tools.

View File

@@ -2,16 +2,14 @@
title: "Angular"
ring: trial
quadrant: languages-and-frameworks
---
In addition to numerous major upgrades from version 2 to 5, which often needed a "hands-on" approach, a lot has happened in the Angular
ecosystem in 2017. Specifically, the improvements in the HTTP-Client, which now requires less coding effort. Or
the vast improvements on angular.cli such as aot (ahead of time compile) for faster rendering, fewer requests and
much smaller builds, to just name the most important ones.
We have achieved particularly good results using Angular in large and medium-size projects. Actually,
it's our framework-of-choice in our telecommunication sector teams as a single-page application framework (SPA) for microservice front
ends.
In addition to numerous major upgrades from version 2 to 5, which often needed a "hands-on" approach, a lot has happened in the Angular ecosystem in 2017.
Specifically, the improvements in the HTTP-Client, which now requires less coding effort.
Or the vast improvements on angular.cli such as aot (ahead of time compile) for faster rendering, fewer requests and much smaller builds, to just name the most important ones.
The convenient scaffolding of unit- and end-to-end-tests provides a quality-driven workflow.
We have achieved particularly good results using Angular in large and medium-size projects.
Actually, it's our framework-of-choice in our telecommunication sector teams as a single-page application framework (SPA) for microservice front ends.
The convenient scaffolding of unit- and end-to-end-tests provides a quality-driven workflow.
Also, the module- and component architecture helps to keep the codebase understandable end maintainable.

View File

@@ -2,10 +2,7 @@
title: "Artifactory"
ring: adopt
quadrant: platforms-and-aoe-services
---
Artifactory is now used in every newly started project at AOE and plays a
central role as an artifact repository for libraries, applications and docker
images. While cleanup is still an issue, we recommend the adoption of an
artifact repository in all our projects.
Artifactory is now used in every newly started project at AOE and plays a central role as an artifact repository for libraries, applications and docker images.
While cleanup is still an issue, we recommend the adoption of an artifact repository in all our projects.

View File

@@ -2,7 +2,6 @@
title: "AsciiDoc"
ring: assess
quadrant: tools
---
AsciiDoc is a [lightweight markup language](https://en.wikipedia.org/wiki/Lightweight_markup_language) such as Markdown.

View File

@@ -2,7 +2,6 @@
title: "Axure"
ring: trial
quadrant: tools
---
[Axure](https://www.axure.com/) is a tool that enables the creation of flowcharts, wireframes, mockups, user journeys and more.

View File

@@ -4,7 +4,5 @@ ring: adopt
quadrant: languages-and-frameworks
---
We have been using babel for some time now. Since we have started using it, we don't have to
struggle with unimplemented features of ECMAScript. In this regard, JavaScript is
JavaScript, no matter what browser you are using. We we strongly recommend
using Babel or similar solutions (e.g. TypeScript).
We have been using babel for some time now. Since we have started using it, we don't have to struggle with unimplemented features of ECMAScript.
In this regard, JavaScript is JavaScript, no matter what browser you are using. We strongly recommend using Babel or similar solutions (e.g. TypeScript).

View File

@@ -12,6 +12,6 @@ Blameless Post Mortems provide a concept of dealing with failures that inevitabl
Based on trust, and under the assumption that every person involved had good intentions to do the best-possible job given the information at hand, Blameless Post Mortems provide an opportunity to continuously improve the quality of software and infrastructure and the processes to deal with critical situations.
The post mortem documentation usually consists of both a timeline of the events leading to an incident and the steps taken to its remediation, as well as future actions and learnings for increasing reslience and stability of our services.
The post mortem documentation usually consists of both a timeline of the events leading to an incident and the steps taken to its remediation, as well as future actions and learnings for increasing resilience and stability of our services.
At AOE, we strive to conduct a Blameless Post Mortem meeting after every user-visible incident.

View File

@@ -2,7 +2,6 @@
title: "CRC Games"
ring: assess
quadrant: methods-and-patterns
---
Class Responsibility Collaboration Card Games are a method to discuss and align the software design - especially useful for object-oriented software.
@@ -10,7 +9,7 @@ Class Responsibility Collaboration Card Games are a method to discuss and align
A proper software design is one of the most important things to ensure the sucess and the maintainability of your software.
Especially for iterative development methods, where you work on a software task by task, it is important to have designs sessions that also look forward to the next iterations and the conceptional whole.
And for software design to be sucessfull, it is very important that everybody (in the team) has the same understanding of the design and stands behind it.
And for software design to be successful, it is very important that everybody (in the team) has the same understanding of the design and stands behind it.
CRC sessions help to design and align the high-level object design and collaboration of your system with the whole team. During such sessions new team members can learn from the experience and explanations of tropers.
@@ -24,15 +23,11 @@ This is how we often conduct a CRC Session:
* Put the most promising ones on Post-its. (You can add more at any time)
* CRC session:
* 1 or 2 people stand up and try to explain the scenario with the help of the classes.
* This is similar to explaining a sequence diagramm and the cards are put on the table from left to right. During or after this, you can discuss design decisions and alternatives with the team.
* This is similar to explaining a sequence diagram and the cards are put on the table from left to right. During or after this, you can discuss design decisions and alternatives with the team.
* After this, someone else can stand up and present a potential alternative sequence.
* Once the team is aligned on a version they want to implement, it makes sense that it is repeated by different persons. Being exact is very important and avoids the situation where people can have an individual understanding of the model. The model and the collaboration lives in the heads of the people in the team therefore it is important that everyone understands it the same way.
* Closing:
* We are often not too enthusiatic about adding a list of "collaborators" to the cards, since the sequence explains this very well.
* We are often not too enthusiastic about adding a list of "collaborators" to the cards, since the sequence explains this very well.
* So just take a picture and document the result somewhere, so that you can review the status for the next CRC session.
* Maybe some decisions are worth being documented in your [Architecture decision records](/methods-and-patterns/adr.html)

View File

@@ -2,7 +2,6 @@
title: "Docker"
ring: adopt
quadrant: platforms-and-aoe-services
---
Docker has pulled off very quickly and we updated it to "adopt".

View File

@@ -2,8 +2,8 @@
title: "Elasticsearch"
ring: adopt
quadrant: platforms-and-aoe-services
---
We are continuing to use Elasticsearch successfully in [Searchperience®] and have benefited from the aggregation features for related use cases such as rendering category trees.
We are also using Elasticsearch for some microservices as our persistence solution.

View File

@@ -2,9 +2,7 @@
title: "Gatling"
ring: adopt
quadrant: tools
---
Gatling is now the de-facto tool of choice for load testing in all of our
projects, having superseded JMeter completely. We therefore moved it to the
**Adopt** level.
Gatling is now the de-facto tool of choice for load testing in all of our projects, having superseded JMeter completely.
We therefore moved it to the **Adopt** level.

View File

@@ -4,9 +4,9 @@ ring: assess
quadrant: tools
---
Until now, we have been using [Jenkins](https://jenkins.io/) for almost every single task that we have automated. With [Gitlab CI](https://about.gitlab.com/features/gitlab-ci-cd/) on the market, we have a number of new possibilities.
Until now, we have been using [Jenkins](https://jenkins.io/) for almost every single task that we have automated. With [GitLab CI](https://about.gitlab.com/features/gitlab-ci-cd/) on the market, we have a number of new possibilities.
Some of the highlights are:
Some highlights are:
* Multi-platform you can execute builds on Unix, Windows, OSX, and any other platform that supports Go.
* Multi-language build scripts are command-line driven and work with Java, PHP, Ruby, C and any other language.

View File

@@ -4,10 +4,8 @@ ring: trial
quadrant: tools
---
[Gitlab](https://about.gitlab.com/) provides nearly the same feature set as [Github](https://github.com/), but at a lower price. It also provides the possibility of hosting iternally, which is essential for us.
[Gitlab](https://about.gitlab.com/) provides nearly the same feature set as [Github](https://github.com/), but at a lower price. It also provides the possibility of hosting internally, which is essential for us.
We are migrating more and more repositories from [gitolite](http://gitolite.com/gitolite/index.html), even from SVN to gitlab, as it provides a more stable and user friendly interface.
We are migrating more and more repositories from [gitolite](http://gitolite.com/gitolite/index.html), even from SVN to gitlab, as it provides a more stable and user-friendly interface.
Gitlab also makes user/permission handling easier than our old gitolite. We don't need the IT team every time a new repository needs to be set up.

View File

@@ -2,7 +2,6 @@
title: "Go / Golang"
ring: trial
quadrant: languages-and-frameworks
---
We have moved Go to Trial because multiple teams have used Go with success for different services and tools.

View File

@@ -2,13 +2,12 @@
title: "GRPC"
ring: assess
quadrant: languages-and-frameworks
---
gRPC, "A high-performance, Open Source, universal RPC framework," is a framework to easily connect clients and servers in an RPC setup.
gRPC was initially built at Google, and uses protobuf service definitions for method and payload specification.
Essentially, this makes it possible to define methods that a server exposes, with either a single payload or an incoming stream - either as a single response or a stream of responses.
The definition itself is carried out with the help of protobuf to define message types and method signatures, and then client and server interfaces are compiled for the language(s) you want. Currently there is support for languages such as C++, Java, Python, Go and many more.
The definition itself is carried out with the help of protobuf to define message types and method signatures, and then client and server interfaces are compiled for the language(s) you want. Currently, there is support for languages such as C++, Java, Python, Go and many more.
The shared language-neutral protobuf definition allows you to create all code for all languages automatically and helps with the interoperability of different systems.
From a technical point of view, gRPC uses HTTP/2 as a transport, directly benefitting from the default TLS encryption.

View File

@@ -2,8 +2,8 @@
title: "HAL / HATEOAS"
ring: trial
quadrant: methods-and-patterns
---
We still recommend the usage of HAL and HATEOAS.
But, depending on the resource structure, there are some pitfalls to be aware of:

View File

@@ -2,7 +2,6 @@
title: "Helm"
ring: trial
quadrant: tools
---
For managing deployments within Kubernetes we use Helm, which makes templating Kubernetes configuration files super easy (also known as Helm charts).

View File

@@ -2,12 +2,9 @@
title: "Invision"
ring: trial
quadrant: tools
---
Invision is an online tool used to work and collaborate on design and prototypes and to share them between clients and the team.
We use it in many projects now to present prototypes and designs and it helps in understanding the planned user experience.
Also, we use this directly as a reference from the user stories to help the development teams in understanding and implementing the right frontend and backend functionalities.

View File

@@ -2,7 +2,6 @@
title: "Jest"
ring: adopt
quadrant: tools
---
Updated to "adopt".

View File

@@ -3,8 +3,9 @@ title: "Keycloak"
ring: adopt
quadrant: tools
---
Most distributed systems still face a growing demand for user management, authentication, authorization and Single sign-on. In light of a growing security demand and specialization, the Open Source project JBoss Keycloak is a perfect match.
Keyloak has been a growing project from the outset and has a strong community. Keyloak is based on standards such as OAuth2, OIDC and SAML2. Securing a distributed system is supported by adapters, which are provided by Keycloak developers for different technology stacks. If there is no adapter for your technology stack, an integration on the protocol level with a library is simple. Many configurable features require no coding in the integrated projects. The required configuration is managed via code and promoted as usual.
Keycloak has been a growing project from the outset and has a strong community. Keycloak is based on standards such as OAuth2, OIDC and SAML2. Securing a distributed system is supported by adapters, which are provided by Keycloak developers for different technology stacks. If there is no adapter for your technology stack, an integration on the protocol level with a library is simple. Many configurable features require no coding in the integrated projects. The required configuration is managed via code and promoted as usual.
We use Keycloak in our OM3 suite for several authentication-related use cases such as user management for system users and Single sign-on for customers. The OAuth access tokens can be used to secure APIs that access sensitive information. In addition, Keycloak is part of the AOE infrastructure and helps in securing the various services to support employees and customers.

View File

@@ -2,7 +2,6 @@
title: "Kubernetes"
ring: adopt
quadrant: platforms-and-aoe-services
---
Kubernetes has developed into the quasi-standard for container orchestration: Nearly every cloud provider provides managed Kubernetes, and even Docker Enterprise uses Kubernetes.

View File

@@ -2,10 +2,9 @@
title: "Microservices"
ring: adopt
quadrant: methods-and-patterns
---
We continue to belief in the microservices concept and its related patterns and best practices. However, it's worth mentioning that we we had to learn some lessons when it came to resilient thinking and deployment-related dependencies between microservices.
We continue to belief in the microservices concept and its related patterns and best practices. However, it's worth mentioning that we had to learn some lessons when it came to resilient thinking and deployment-related dependencies between microservices.
We feel that our microservice-based applications are more robust than monolithic ones have been. Thanks to the
split of the overall complexity into multiple services, new employees or team members are becoming productive within days or a few weeks.
@@ -13,4 +12,3 @@ split of the overall complexity into multiple services, new employees or team me
In order to get microservices right and to benefit from the advantages, there is a lot more required.
The following "pyramid of need" for microservices shows this:
![microservices pyramid of need](/images/microservices-pyramid.png)

View File

@@ -2,15 +2,14 @@
title: "PACT"
ring: trial
quadrant: tools
---
PACT (http://pact.io/) is a family of frameworks that provides support for *Consumer Driven Contract testing* accross different langauages and frameworks.
PACT (http://pact.io/) is a family of frameworks that provides support for *Consumer Driven Contract testing* across different languages and frameworks.
Consumer Driven Contract testing is a pattern for testing interfaces/boundaries between services.
It allows "consumers" to run tests against a defined Mock and record the defined interactions (=PACT).
It puts "providers" in the position to run the PACT tests inside theire Continuous Integration Pipelines, so that the provider knows if he might break any consumers.
It puts "providers" in the position to run the PACT tests inside their Continuous Integration Pipelines, so that the provider knows if he might break any consumers.
This approach makes sense in organisations where teams collaborate more closely (See [Strategic Domain Driven Design](/methods-and-patterns/strategic-domain-driven-design.html) ), e.g. to build [Microservice oriented architectures](/methods-and-patterns/microservices.html)

View File

@@ -5,7 +5,7 @@ quadrant: methods-and-patterns
---
Ports and Adapters is an architecture or layering approach for software design. As with other layering approaches, it seperates different concerns in different layers, where dependencies are only allowed from the outside to the inside.
Ports and Adapters is an architecture or layering approach for software design. As with other layering approaches, it separates different concerns in different layers, where dependencies are only allowed from the outside to the inside.
We use "ports and adapters" with success for (larger) applications, which contain certain business logic and/or provide several ways to access the services.
We often use the approach hand-in-hand with Domain Driven Design. In comparison with other layering patterns (e.g. layered architecture) it allows you to have a true technology-free core (domain) model. Why? Because, with the concept of "secondary ports" (=interfaces), it inverts the control and allows outer layers to provide adapters (=implementations of the defined interface).

View File

@@ -2,7 +2,6 @@
title: "Puppet Environments"
ring: trial
quadrant: platforms-and-aoe-services
---
Puppet Environments has proven to work well for our projects using Puppet.

View File

@@ -4,8 +4,7 @@ ring: adopt
quadrant: languages-and-frameworks
---
The past months have shown that React is still a great fit for us for frontend-heavy
applications. With its rewritten core in version 16, Facebook shows how
important this framework is for them. Therefore, Facebook is investing a lot of effort into React and a
healthy community. In addition, we **REALLY** enjoy writing React
components so much so, that we have to move this library into **adopt**!
The past months have shown that React is still a great fit for us for frontend-heavy applications.
With its rewritten core in version 16, Facebook shows how important this framework is for them.
Therefore, Facebook is investing a lot of effort into React and a healthy community.
In addition, we **REALLY** enjoy writing React components so much so, that we have to move this library into **adopt**!

View File

@@ -2,33 +2,17 @@
title: "Reactive Programming"
ring: trial
quadrant: methods-and-patterns
---
Classic (web-) applications typically consist of transactions that submit
large forms to the server side, which then processes these and, in response, returns HTML
for the browser to render. Today's applications have more and more
fine-grained 'real-time'-like aspects: A simple modification of a form field
could trigger a complete roundtrip to the server including other services and
persistence. Naturally, all of these transactions should respect the
expectations of a user who wants a highly interactive application.
Classic (web-)applications typically consist of transactions that submit large forms to the server side, which then processes these and, in response, returns HTML for the browser to render.
Today's applications have more and more fine-grained 'real-time'-like aspects: A simple modification of a form field could trigger a complete round trip to the server including other services and persistence.
Naturally, all of these transactions should respect the expectations of a user who wants a highly interactive application.
"Reactive Programming" tries to provide an answer to the challanges mentioned above
by raising the level of abstraction. This allows you to focus on the stream of
events that make up your business logic in a responsive, asynchronous fashion.
"Reactive Programming" tries to provide an answer to the challenges mentioned above by raising the level of abstraction.
This allows you to focus on the stream of events that make up your business logic in a responsive, asynchronous fashion.
There are various descriptions of what Reactive Programming actually is - at
the most general level it is programming with asynchronous data streams and
contains tools to create, manipulate, combine and filter these streams. Under the term
"Reactive Programming", we summarize the principles and implementations that
underlie [ReactiveX](http://reactivex.io/) and the [Reactive
Manifesto](https://www.reactivemanifesto.org/).
There are various descriptions of what Reactive Programming actually is - at the most general level it is programming with asynchronous data streams and contains tools to create, manipulate, combine and filter these streams.
Under the term "Reactive Programming", we summarize the principles and implementations that underlie [ReactiveX](http://reactivex.io/) and the [Reactive Manifesto](https://www.reactivemanifesto.org/).
"Reactive Programming" is employed in many of our services frontend and
backend but not always as an explicitly choosen pattern. As different
plattforms have different means to tackle this style of programming, we choose
to include "Reactive Programming" as a general Method and Patterns Item in
addition to concrete libraries and APIs such as
[Rx.JS](languages-and-frameworks/rxjs.html) or [Akka
Streams](/languages-and-frameworks/akka-streams.html) to highlight the
importance of the approach in general.
"Reactive Programming" is employed in many of our services frontend and backend but not always as an explicitly chosen pattern.
As different platforms have different means to tackle this style of programming, we choose to include "Reactive Programming" as a general Method and Patterns Item in addition to concrete libraries and APIs such as [Rx.JS](languages-and-frameworks/rxjs.html) or [Akka Streams](/languages-and-frameworks/akka-streams.html) to highlight the importance of the approach in general.

View File

@@ -2,7 +2,6 @@
title: "Scala Lang"
ring: adopt
quadrant: languages-and-frameworks
---
Scala is used in many projects at AOE. We have therefore moved it to the **adopt** level.

View File

@@ -2,7 +2,6 @@
title: "Self-service infrastructure"
ring: assess
quadrant: methods-and-patterns
---
With growing teams, growing projects and growing infrastructures, we decided to follow the "You build it, you run it" approach, and when we started to run Kubernetes, where we have a great abstraction layer between infrastructure and applications, we decided to make the developer teams write their own Helm charts.

View File

@@ -2,7 +2,6 @@
title: "SonarQube"
ring: assess
quadrant: tools
---
At AOE, we're evaluating SonarQube to get an historical overview of the code quality of our Projects. With SonarQube, you can get a quick hint about the condition of your code. It analyzes many languages and provides numerous static analysis rules.

View File

@@ -2,9 +2,7 @@
title: "Spring Boot"
ring: trial
quadrant: languages-and-frameworks
---
We have had good experiences with Spring Boot, and already have several Spring Boot-based services running in
production. We like the ease of kickstarting new services and the variety of tools in the Spring ecosystem.
production. We like the ease of kick-starting new services and the variety of tools in the Spring ecosystem.

View File

@@ -2,7 +2,6 @@
title: "Styleguide Driven Development"
ring: adopt
quadrant: methods-and-patterns
---
Updated to "adopt".

View File

@@ -2,11 +2,10 @@
title: "Terraform"
ring: trial
quadrant: tools
---
For the infrastructure of our OM3 projects we run multiple Kubernetes clusters, and to orchestrate the infrastructure provisioning we quickly decided to go with Terraform.
Terraform allows us to easily manage our infrastructure, from AWS EC2 instances to RabbitMQ message queues.
Also, the Kops installer for Kubernetes on AWS uses Terraform as its main building brick, and we can trigger Kops via Terraform.
We bring terraform together with [Helm](/tools/helm.html) to manage similar parts of the infrastructure, for example a shared file with domainname to application mappings allows us to provision Route 53 DNS entries via Terraform and then roll out Kubernetes Ingress definitions with the appropriate hostname to service mapping via Helm.
We bring terraform together with [Helm](/tools/helm.html) to manage similar parts of the infrastructure, for example a shared file with domain name to application mappings allows us to provision Route 53 DNS entries via Terraform and then roll out Kubernetes Ingress definitions with the appropriate hostname to service mapping via Helm.

View File

@@ -2,7 +2,6 @@
title: "Vue.js"
ring: trial
quadrant: languages-and-frameworks
---
Updated to "trial".

View File

@@ -4,9 +4,6 @@ ring: adopt
quadrant: tools
---
In the last few years, Webpack has grown to become the de-facto standard for Web
bundling in the JavaScript-Ecosystem. With Version 3, Webpack is a more robust
and better documented bundler with nice new features such as
[scope hoisting](https://webpack.js.org/plugins/module-concatenation-plugin/).
Because of this, and because of the continuously growing community, we have adopted Webpack for nearly
every single-page application we have.
In the last few years, Webpack has grown to become the de-facto standard for Web bundling in the JavaScript-Ecosystem.
With Version 3, Webpack is a more robust and better documented bundler with nice new features such as [scope hoisting](https://webpack.js.org/plugins/module-concatenation-plugin/).
Because of this, and because of the continuously growing community, we have adopted Webpack for nearly every single-page application we have.

View File

@@ -2,8 +2,8 @@
title: "Yarn"
ring: trial
quadrant: tools
---
Yarn is a dependency management tool for frontend (node) projects similar to npm. It also uses the npm registry and
infrastructure. According to Yarn, the benefits are that Yarn is much faster, automatically writes a .lock file and
builds up a local cache to be even faster when installing packages again.