From f94c3c8ef630f24d89b44f5569ce6160c6f7594f Mon Sep 17 00:00:00 2001 From: syoul Date: Tue, 2 Dec 2025 17:42:43 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20int=C3=A9grer=20le=20radar=20business?= =?UTF-8?q?=20dans=20la=20configuration=20principale?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remplacement de config.json par config-business.json - Remplacement du contenu radar/ par les blips business - Ajout du script serve-business.sh pour le déploiement local --- config.json | 156 +++++++----------- radar/2017-03-01/akeneo.md | 17 -- radar/2017-03-01/akka.md | 13 -- radar/2017-03-01/angular.md | 15 -- radar/2017-03-01/ant.md | 13 -- radar/2017-03-01/anypoint-platform.md | 18 -- radar/2017-03-01/api-first-design-approach.md | 25 --- radar/2017-03-01/artifactory.md | 24 --- radar/2017-03-01/aws-lambda.md | 13 -- radar/2017-03-01/babel.md | 35 ---- radar/2017-03-01/bower.md | 13 -- radar/2017-03-01/client-side-error-logging.md | 16 -- radar/2017-03-01/consul.md | 14 -- radar/2017-03-01/container-based-builds.md | 17 -- radar/2017-03-01/dagger.md | 10 -- radar/2017-03-01/datadog.md | 10 -- radar/2017-03-01/decoupling-via-messaging.md | 12 -- radar/2017-03-01/devops-practices.md | 40 ----- radar/2017-03-01/docker.md | 18 -- radar/2017-03-01/elasticsearch.md | 10 -- radar/2017-03-01/elk-stack.md | 19 --- radar/2017-03-01/evil-user-stories.md | 15 -- radar/2017-03-01/explicit-test-strategy.md | 21 --- radar/2017-03-01/flow.md | 15 -- radar/2017-03-01/galen.md | 13 -- radar/2017-03-01/gatling.md | 17 -- radar/2017-03-01/go-lang.md | 18 -- radar/2017-03-01/gradle.md | 14 -- radar/2017-03-01/groovy.md | 9 - radar/2017-03-01/grunt.md | 21 --- radar/2017-03-01/gulp.md | 53 ------ radar/2017-03-01/hal-hateoas.md | 24 --- radar/2017-03-01/hystrix.md | 16 -- radar/2017-03-01/imgix.md | 11 -- radar/2017-03-01/infrastructure-as-code.md | 11 -- radar/2017-03-01/jest.md | 21 --- radar/2017-03-01/job-dsl.md | 11 -- radar/2017-03-01/keycloak.md | 17 -- radar/2017-03-01/kubernetes.md | 10 -- .../maintain-third-party-packages.md | 9 - radar/2017-03-01/microservices.md | 21 --- radar/2017-03-01/neo4j.md | 18 -- radar/2017-03-01/node-js.md | 17 -- radar/2017-03-01/npm.md | 26 --- radar/2017-03-01/oro-platform.md | 15 -- radar/2017-03-01/pair-working.md | 14 -- radar/2017-03-01/phan.md | 14 -- radar/2017-03-01/php7-over-php5.md | 16 -- radar/2017-03-01/pin-external-dependencies.md | 39 ----- radar/2017-03-01/pipeline-as-code.md | 11 -- radar/2017-03-01/play-framework.md | 15 -- radar/2017-03-01/postcss.md | 16 -- radar/2017-03-01/protobuf.md | 13 -- radar/2017-03-01/puppet.md | 9 - radar/2017-03-01/rabbitmq.md | 13 -- radar/2017-03-01/raml.md | 11 -- radar/2017-03-01/react.md | 19 --- radar/2017-03-01/redux.md | 13 -- radar/2017-03-01/resilience-thinking.md | 19 --- radar/2017-03-01/rest-assured.md | 14 -- radar/2017-03-01/rxjava.md | 8 - radar/2017-03-01/rxjs.md | 15 -- radar/2017-03-01/sass.md | 30 ---- radar/2017-03-01/scala-lang.md | 13 -- radar/2017-03-01/settings-injection.md | 11 -- radar/2017-03-01/sparkpost.md | 13 -- radar/2017-03-01/spock_geb.md | 15 -- radar/2017-03-01/spring-boot.md | 15 -- radar/2017-03-01/spring-rest-docs.md | 11 -- .../strategic-domain-driven-design.md | 17 -- .../styleguide-driven-development.md | 13 -- radar/2017-03-01/symfony-components.md | 9 - radar/2017-03-01/typescript.md | 21 --- radar/2017-03-01/typo3-as-a-framework.md | 10 -- radar/2017-03-01/vue.md | 11 -- radar/2017-03-01/webpack.md | 26 --- radar/2017-03-01/wiremock.md | 15 -- radar/2017-03-01/xataface.md | 9 - radar/2017-03-01/xmlunit.md | 9 - radar/2018-03-01/adr.md | 27 --- radar/2018-03-01/akka-streams.md | 20 --- radar/2018-03-01/alpakka.md | 11 -- radar/2018-03-01/angular.md | 16 -- radar/2018-03-01/artifactory.md | 8 - radar/2018-03-01/asciidoc.md | 11 -- radar/2018-03-01/axure.md | 16 -- radar/2018-03-01/babel.md | 8 - radar/2018-03-01/blameless-post-mortems.md | 17 -- radar/2018-03-01/consul.md | 6 - radar/2018-03-01/crc.md | 33 ---- radar/2018-03-01/docker.md | 7 - radar/2018-03-01/elasticsearch.md | 10 -- radar/2018-03-01/flow.md | 6 - radar/2018-03-01/gatling.md | 8 - radar/2018-03-01/gitlab-ci.md | 16 -- radar/2018-03-01/gitlab.md | 11 -- radar/2018-03-01/go-lang.md | 11 -- radar/2018-03-01/grafana.md | 9 - radar/2018-03-01/grpc.md | 16 -- radar/2018-03-01/gulp.md | 6 - radar/2018-03-01/hal-hateoas.md | 12 -- radar/2018-03-01/helm.md | 7 - radar/2018-03-01/imgix.md | 6 - radar/2018-03-01/invision.md | 11 -- radar/2018-03-01/jest.md | 8 - radar/2018-03-01/keycloak.md | 12 -- radar/2018-03-01/kubernetes.md | 14 -- .../maintain-third-party-packages.md | 6 - radar/2018-03-01/microfrontends.md | 17 -- radar/2018-03-01/microservices.md | 15 -- radar/2018-03-01/neo4j.md | 6 - radar/2018-03-01/oro-platform.md | 6 - radar/2018-03-01/pact.md | 16 -- radar/2018-03-01/pair-working.md | 9 - radar/2018-03-01/phan.md | 6 - radar/2018-03-01/php7-over-php5.md | 6 - radar/2018-03-01/pipeline-as-code.md | 10 -- radar/2018-03-01/ports-and-adapters.md | 33 ---- radar/2018-03-01/puppet.md | 7 - radar/2018-03-01/react.md | 11 -- radar/2018-03-01/reactive-programming.md | 18 -- radar/2018-03-01/scala-lang.md | 7 - .../2018-03-01/self-service-infrastructure.md | 11 -- radar/2018-03-01/sonarqube.md | 7 - radar/2018-03-01/sparkpost.md | 6 - radar/2018-03-01/spring-boot.md | 8 - .../styleguide-driven-development.md | 7 - radar/2018-03-01/terraform.md | 10 -- radar/2018-03-01/typo3-as-a-framework.md | 6 - radar/2018-03-01/vue.md | 7 - radar/2018-03-01/webpack.md | 10 -- radar/2018-03-01/xataface.md | 6 - radar/2018-03-01/yarn.md | 11 -- radar/2019-11-01/akeneo.md | 6 - radar/2019-11-01/akka-streams.md | 8 - radar/2019-11-01/alpakka.md | 8 - radar/2019-11-01/ant.md | 6 - radar/2019-11-01/anypoint-platform.md | 8 - radar/2019-11-01/apache-camel.md | 10 -- radar/2019-11-01/apollo-client.md | 9 - radar/2019-11-01/asciidoc.md | 6 - radar/2019-11-01/aws-lambda.md | 6 - radar/2019-11-01/blameless-post-mortems.md | 6 - radar/2019-11-01/bower.md | 6 - radar/2019-11-01/cockpit.md | 7 - radar/2019-11-01/concourse-ci.md | 14 -- radar/2019-11-01/container-based-builds.md | 7 - radar/2019-11-01/cypress.md | 40 ----- radar/2019-11-01/dagger.md | 6 - radar/2019-11-01/datadog.md | 6 - radar/2019-11-01/decoupling-via-messaging.md | 8 - radar/2019-11-01/dependency-update-scan.md | 18 -- radar/2019-11-01/distributed-tracing.md | 11 -- radar/2019-11-01/eks.md | 15 -- radar/2019-11-01/event-storming.md | 24 --- radar/2019-11-01/explicit-test-strategy.md | 6 - radar/2019-11-01/falco.md | 11 -- radar/2019-11-01/flamingo.md | 35 ---- radar/2019-11-01/flowtype.md | 8 - radar/2019-11-01/flux.md | 9 - radar/2019-11-01/galen.md | 6 - radar/2019-11-01/gitflow.md | 18 -- radar/2019-11-01/gitlab-ci.md | 7 - radar/2019-11-01/gitlab.md | 8 - radar/2019-11-01/go-lang.md | 8 - radar/2019-11-01/grafana.md | 8 - radar/2019-11-01/graphql.md | 26 --- radar/2019-11-01/groovy.md | 7 - radar/2019-11-01/grpc.md | 8 - radar/2019-11-01/grunt.md | 6 - radar/2019-11-01/hal-hateoas.md | 9 - radar/2019-11-01/helm.md | 7 - radar/2019-11-01/hystrix.md | 8 - radar/2019-11-01/infrastructure-as-code.md | 8 - radar/2019-11-01/jaeger.md | 13 -- radar/2019-11-01/job-dsl.md | 6 - radar/2019-11-01/kotlin.md | 16 -- radar/2019-11-01/microfrontends.md | 12 -- radar/2019-11-01/next-js.md | 7 - radar/2019-11-01/nosql.md | 9 - radar/2019-11-01/npm.md | 6 - radar/2019-11-01/open-api.md | 21 --- radar/2019-11-01/packer.md | 16 -- radar/2019-11-01/plant-uml.md | 11 -- radar/2019-11-01/play-framework.md | 6 - radar/2019-11-01/ports-and-adapters.md | 8 - radar/2019-11-01/postgres.md | 8 - radar/2019-11-01/postman.md | 12 -- radar/2019-11-01/protobuf.md | 6 - radar/2019-11-01/rabbitmq.md | 7 - radar/2019-11-01/raml.md | 9 - radar/2019-11-01/reactive-programming.md | 11 -- .../2019-11-01/self-service-infrastructure.md | 8 - radar/2019-11-01/sonarqube.md | 10 -- radar/2019-11-01/spring-boot.md | 8 - radar/2019-11-01/storybook.md | 9 - radar/2019-11-01/stride-threat-modeling.md | 19 --- .../styleguide-driven-development.md | 6 - radar/2019-11-01/symfony-components.md | 6 - radar/2019-11-01/temporal-modeling.md | 18 -- radar/2019-11-01/terraform.md | 14 -- radar/2019-11-01/typescript.md | 10 -- radar/2019-11-01/vault.md | 9 - radar/2019-11-01/vuex.md | 7 - radar/2019-11-01/xmlunit.md | 6 - radar/2019-11-01/yarn.md | 6 - radar/2019-11-01/zero-trust.md | 50 ------ radar/2021-07-01/adr.md | 9 - radar/2021-07-01/akeneo.md | 12 -- radar/2021-07-01/angular.md | 12 -- radar/2021-07-01/apicurio.md | 10 -- radar/2021-07-01/apm.md | 13 -- radar/2021-07-01/artifactory.md | 8 - radar/2021-07-01/checkov.md | 19 --- radar/2021-07-01/cockpit.md | 8 - radar/2021-07-01/complexity-management.md | 34 ---- radar/2021-07-01/conventionalcommits.md | 15 -- radar/2021-07-01/css-in-js.md | 47 ------ radar/2021-07-01/cypress.md | 13 -- radar/2021-07-01/ddev.md | 16 -- radar/2021-07-01/dependency-update-scan.md | 13 -- radar/2021-07-01/dgs.md | 13 -- radar/2021-07-01/diagrams-as-code.md | 13 -- radar/2021-07-01/docker.md | 15 -- radar/2021-07-01/drupal.md | 12 -- radar/2021-07-01/eks.md | 19 --- radar/2021-07-01/elk-stack.md | 7 - radar/2021-07-01/figma.md | 10 -- radar/2021-07-01/flowtype.md | 8 - radar/2021-07-01/fluentd.md | 10 -- radar/2021-07-01/flutter.md | 17 -- radar/2021-07-01/gatling.md | 9 - radar/2021-07-01/graalnative.md | 13 -- radar/2021-07-01/helm.md | 10 -- radar/2021-07-01/k6.md | 15 -- radar/2021-07-01/kafka.md | 12 -- radar/2021-07-01/kubernetes-operators.md | 17 -- radar/2021-07-01/loki.md | 12 -- radar/2021-07-01/microfrontends.md | 11 -- radar/2021-07-01/mlops.md | 15 -- radar/2021-07-01/nats.md | 12 -- radar/2021-07-01/next-js.md | 12 -- radar/2021-07-01/node-js.md | 6 - radar/2021-07-01/nx.md | 15 -- radar/2021-07-01/oci-container.md | 18 -- radar/2021-07-01/open-policy-agent.md | 19 --- radar/2021-07-01/pact.md | 9 - radar/2021-07-01/page-composing.md | 17 -- radar/2021-07-01/pin-external-dependencies.md | 6 - radar/2021-07-01/plant-uml.md | 6 - radar/2021-07-01/postman.md | 9 - radar/2021-07-01/prometheus.md | 19 --- radar/2021-07-01/protobuf.md | 6 - radar/2021-07-01/pulumi.md | 22 --- radar/2021-07-01/python-for-infrastructure.md | 18 -- radar/2021-07-01/redux.md | 6 - radar/2021-07-01/renovate.md | 15 -- radar/2021-07-01/rust.md | 19 --- radar/2021-07-01/rxjs.md | 14 -- radar/2021-07-01/scala3.md | 33 ---- radar/2021-07-01/semver2.md | 12 -- radar/2021-07-01/service-mesh.md | 21 --- radar/2021-07-01/settings-injection.md | 6 - radar/2021-07-01/shared-responsibility.md | 10 -- radar/2021-07-01/sitespeed.md | 14 -- radar/2021-07-01/sketch.md | 8 - radar/2021-07-01/state-management-pattern.md | 16 -- radar/2021-07-01/storybook.md | 16 -- radar/2021-07-01/strapi.md | 17 -- radar/2021-07-01/tailwindcss.md | 22 --- radar/2021-07-01/team-start-page.md | 21 --- radar/2021-07-01/vue.md | 8 - radar/2021-07-01/vuex.md | 6 - radar/2021-07-01/wiremock.md | 8 - radar/2021-07-01/zero-trust.md | 8 - radar/2022-03-28/api-first-design-approach.md | 17 -- radar/2022-03-28/argocd.md | 24 --- radar/2022-03-28/aws_fargate.md | 8 - radar/2022-03-28/babel.md | 6 - radar/2022-03-28/backstage.md | 16 -- radar/2022-03-28/bareid.md | 10 -- radar/2022-03-28/colima.md | 23 --- radar/2022-03-28/container-based-builds.md | 6 - radar/2022-03-28/conventionalcommits.md | 14 -- radar/2022-03-28/crc.md | 6 - radar/2022-03-28/css-in-js.md | 7 - radar/2022-03-28/dependency-update-scan.md | 12 -- radar/2022-03-28/dgs.md | 10 -- radar/2022-03-28/drupal.md | 6 - radar/2022-03-28/elasticsearch.md | 6 - radar/2022-03-28/evil-user-stories.md | 6 - radar/2022-03-28/gitlab-ci.md | 8 - radar/2022-03-28/gitlab.md | 8 - radar/2022-03-28/groovy.md | 7 - radar/2022-03-28/inner-source.md | 20 --- radar/2022-03-28/jaeger.md | 6 - radar/2022-03-28/k6.md | 15 -- radar/2022-03-28/lighthouse-ci.md | 11 -- radar/2022-03-28/mob-programming.md | 12 -- radar/2022-03-28/monorepo.md | 21 --- radar/2022-03-28/nocode-lowcode.md | 47 ------ radar/2022-03-28/nx.md | 8 - radar/2022-03-28/packer.md | 6 - radar/2022-03-28/pipeline-as-code.md | 18 -- radar/2022-03-28/playwright.md | 8 - radar/2022-03-28/postcss.md | 6 - radar/2022-03-28/rabbitmq.md | 6 - radar/2022-03-28/raml.md | 6 - radar/2022-03-28/reactive-programming.md | 6 - radar/2022-03-28/remix.md | 16 -- radar/2022-03-28/renovate.md | 8 - radar/2022-03-28/resilience-thinking.md | 27 --- radar/2022-03-28/rest-assured.md | 6 - radar/2022-03-28/rust.md | 6 - radar/2022-03-28/rxjs.md | 6 - radar/2022-03-28/sass.md | 15 -- radar/2022-03-28/scala-lang.md | 6 - radar/2022-03-28/scala3.md | 8 - radar/2022-03-28/semanticore.md | 20 --- radar/2022-03-28/sitespeed.md | 6 - radar/2022-03-28/sonarqube.md | 10 -- radar/2022-03-28/spock_geb.md | 18 -- radar/2022-03-28/spring-rest-docs.md | 11 -- radar/2022-03-28/stitches.md | 18 -- radar/2022-03-28/tailwindcss.md | 8 - radar/2022-03-28/unleash.md | 16 -- radar/2022-03-28/vault.md | 11 -- radar/2022-03-28/vistecture.md | 19 --- radar/2023-02-23/ansible.md | 16 -- radar/2023-02-23/apisix.md | 17 -- radar/2023-02-23/apollo-client.md | 7 - radar/2023-02-23/checkov.md | 7 - radar/2023-02-23/client-side-error-logging.md | 8 - radar/2023-02-23/concourse-ci.md | 7 - radar/2023-02-23/csharp.md | 11 -- radar/2023-02-23/ddev.md | 7 - radar/2023-02-23/design-system.md | 21 --- radar/2023-02-23/dgs.md | 7 - radar/2023-02-23/flutter.md | 32 ---- radar/2023-02-23/graphql.md | 13 -- radar/2023-02-23/harbor.md | 14 -- radar/2023-02-23/helm.md | 15 -- radar/2023-02-23/hotchocolate.md | 10 -- radar/2023-02-23/java.md | 19 --- radar/2023-02-23/ldap-login.md | 15 -- radar/2023-02-23/open-digital-architecture.md | 19 --- radar/2023-02-23/playwright.md | 24 --- radar/2023-02-23/pnpm.md | 12 -- radar/2023-02-23/policy-as-code.md | 24 --- radar/2023-02-23/remix.md | 6 - radar/2023-02-23/semanticore.md | 8 - radar/2023-02-23/specflow.md | 11 -- radar/2023-02-23/svelte.md | 12 -- radar/2023-02-23/trivy.md | 15 -- radar/2023-02-23/turborepo.md | 12 -- radar/2023-11-01/adobe-creative-cloud.md | 8 - radar/2023-11-01/akka.md | 6 - radar/2023-11-01/alpakka.md | 7 - radar/2023-11-01/angular.md | 12 -- radar/2023-11-01/ansible.md | 9 - radar/2023-11-01/artifactory.md | 8 - radar/2023-11-01/assisted-ai.md | 52 ------ radar/2023-11-01/axure.md | 7 - radar/2023-11-01/azure_container_instances.md | 14 -- radar/2023-11-01/blameless-post-mortems.md | 19 --- radar/2023-11-01/css-in-js.md | 16 -- radar/2023-11-01/deno.md | 17 -- radar/2023-11-01/design-system.md | 8 - radar/2023-11-01/devops-practices.md | 7 - radar/2023-11-01/diagrams-as-code.md | 15 -- radar/2023-11-01/dora-metrics.md | 28 ---- radar/2023-11-01/fluentd.md | 10 -- radar/2023-11-01/flux.md | 13 -- radar/2023-11-01/gitlab.md | 7 - radar/2023-11-01/gradle.md | 8 - radar/2023-11-01/green-it.md | 35 ---- radar/2023-11-01/harbor.md | 11 -- radar/2023-11-01/infrastructure-as-code.md | 7 - radar/2023-11-01/jest.md | 7 - radar/2023-11-01/kubernetes-operators.md | 9 - radar/2023-11-01/ldap-login.md | 7 - radar/2023-11-01/loki.md | 13 -- radar/2023-11-01/microfrontends.md | 20 --- radar/2023-11-01/microservices.md | 7 - radar/2023-11-01/mlops.md | 7 - radar/2023-11-01/monorepo.md | 29 ---- radar/2023-11-01/nats.md | 7 - radar/2023-11-01/next-js.md | 12 -- radar/2023-11-01/nx.md | 7 - radar/2023-11-01/open-policy-agent.md | 9 - radar/2023-11-01/pipeline-as-code.md | 7 - radar/2023-11-01/playwright.md | 18 -- radar/2023-11-01/pnpm.md | 7 - radar/2023-11-01/pulumi.md | 9 - radar/2023-11-01/react-native.md | 10 -- radar/2023-11-01/react-server-components.md | 16 -- radar/2023-11-01/react.md | 21 --- radar/2023-11-01/sbom.md | 24 --- radar/2023-11-01/serverless.md | 32 ---- radar/2023-11-01/service-mesh.md | 8 - radar/2023-11-01/sigstore.md | 12 -- radar/2023-11-01/sketch.md | 9 - radar/2023-11-01/sonarqube.md | 9 - radar/2023-11-01/specflow.md | 7 - radar/2023-11-01/spock_geb.md | 9 - radar/2023-11-01/state-management-pattern.md | 14 -- radar/2023-11-01/stitches.md | 8 - radar/2023-11-01/svelte.md | 12 -- radar/2023-11-01/team-start-page.md | 7 - radar/2023-11-01/typescript.md | 12 -- radar/2023-11-01/vite.md | 14 -- radar/2023-11-01/vue.md | 12 -- radar/2023-11-01/webpack.md | 9 - radar/2023-11-01/yarn.md | 13 -- radar/2023-11-01/zero-trust.md | 8 - radar/2024-07-10/12-factor-apps.md | 35 ---- radar/2024-07-10/adr.md | 7 - radar/2024-07-10/akka.md | 7 - radar/2024-07-10/angular.md | 16 -- radar/2024-07-10/api-first-design-approach.md | 7 - radar/2024-07-10/apisix.md | 15 -- radar/2024-07-10/apm.md | 7 - radar/2024-07-10/appium.md | 18 -- radar/2024-07-10/argocd.md | 8 - radar/2024-07-10/assisted-ai.md | 21 --- radar/2024-07-10/bun.md | 10 -- radar/2024-07-10/client-side-error-logging.md | 7 - radar/2024-07-10/conventionalcommits.md | 7 - radar/2024-07-10/css-in-js.md | 8 - radar/2024-07-10/cypress.md | 15 -- radar/2024-07-10/decoupling-via-messaging.md | 13 -- radar/2024-07-10/dependency-update-scan.md | 7 - radar/2024-07-10/design-system.md | 7 - radar/2024-07-10/devspace.md | 14 -- radar/2024-07-10/elk-stack.md | 9 - radar/2024-07-10/falco.md | 7 - radar/2024-07-10/fitness-functions.md | 23 --- radar/2024-07-10/flutter.md | 7 - radar/2024-07-10/gitflow.md | 7 - radar/2024-07-10/github-copilot.md | 17 -- radar/2024-07-10/graalnative.md | 7 - radar/2024-07-10/graphql.md | 7 - radar/2024-07-10/harbor.md | 8 - radar/2024-07-10/invision.md | 9 - radar/2024-07-10/k3d.md | 8 - radar/2024-07-10/langchain.md | 19 --- radar/2024-07-10/microsilos.md | 17 -- radar/2024-07-10/mob-programming.md | 9 - radar/2024-07-10/monolith-first.md | 19 --- radar/2024-07-10/nocode-lowcode.md | 7 - radar/2024-07-10/oci-container.md | 7 - radar/2024-07-10/ollama.md | 16 -- radar/2024-07-10/open-api.md | 29 ---- radar/2024-07-10/opentofu.md | 8 - radar/2024-07-10/page-composing.md | 7 - radar/2024-07-10/panda-css.md | 22 --- radar/2024-07-10/pkl.md | 12 -- radar/2024-07-10/ports-and-adapters.md | 7 - radar/2024-07-10/puppet.md | 9 - radar/2024-07-10/react-native.md | 7 - radar/2024-07-10/remix.md | 12 -- radar/2024-07-10/renovate.md | 7 - radar/2024-07-10/resilience-thinking.md | 7 - .../retrieval-augmented-generation.md | 26 --- radar/2024-07-10/rxjava.md | 7 - radar/2024-07-10/scala3.md | 7 - .../2024-07-10/self-service-infrastructure.md | 7 - radar/2024-07-10/service-mesh.md | 10 -- radar/2024-07-10/socketio.md | 8 - radar/2024-07-10/spring-boot.md | 14 -- radar/2024-07-10/spring-rest-docs.md | 7 - .../strategic-domain-driven-design.md | 16 -- radar/2024-07-10/stride-threat-modeling.md | 7 - radar/2024-07-10/stylex.md | 19 --- radar/2024-07-10/supply-chain-security.md | 23 --- radar/2024-07-10/svelte.md | 7 - radar/2024-07-10/temporal-modeling.md | 7 - radar/2024-07-10/terraform.md | 13 -- radar/2024-07-10/trivy.md | 9 - radar/2024-07-10/turborepo.md | 7 - radar/2024-07-10/unleash.md | 7 - radar/2024-07-10/vistecture.md | 7 - radar/2024-07-10/visual-regression-tests.md | 16 -- radar/2025-04-10/Ansible.md | 17 -- radar/2025-04-10/CMDBuild.md | 12 -- radar/2025-04-10/NetBoxOSS.md | 13 -- radar/2025-04-10/docker.md | 8 - radar/2025-04-10/jetsonorinnano.md | 13 -- radar/2025-04-10/macminim4.md | 15 -- radar/2025-04-10/myos.md | 14 -- radar/2025-04-10/netbird.md | 14 -- radar/2025-04-10/openziti.md | 10 -- radar/2025-04-10/osquery.md | 12 -- radar/bash.md | 37 +++++ radar/cryptographie.md | 37 +++++ radar/dart.md | 37 +++++ radar/docker.md | 37 +++++ radar/flutter.md | 37 +++++ radar/gitlab-ci-cd.md | 37 +++++ radar/ipfs.md | 37 +++++ radar/javascript-typescript.md | 43 +++++ radar/kubernetes.md | 37 +++++ radar/linux.md | 37 +++++ radar/netlifycms.md | 40 +++++ radar/nostr.md | 37 +++++ radar/nuxt-js.md | 40 +++++ radar/postgresql.md | 37 +++++ radar/proxmox.md | 37 +++++ radar/python.md | 41 +++++ radar/rust.md | 42 +++++ radar/serverless.md | 37 +++++ radar/squid.md | 40 +++++ radar/substrate-framework.md | 39 +++++ radar/vue-js.md | 37 +++++ radar/wordup-cms.md | 42 +++++ scripts/serve-business.sh | 44 +++++ 516 files changed, 953 insertions(+), 6404 deletions(-) delete mode 100644 radar/2017-03-01/akeneo.md delete mode 100644 radar/2017-03-01/akka.md delete mode 100644 radar/2017-03-01/angular.md delete mode 100644 radar/2017-03-01/ant.md delete mode 100644 radar/2017-03-01/anypoint-platform.md delete mode 100644 radar/2017-03-01/api-first-design-approach.md delete mode 100644 radar/2017-03-01/artifactory.md delete mode 100644 radar/2017-03-01/aws-lambda.md delete mode 100644 radar/2017-03-01/babel.md delete mode 100644 radar/2017-03-01/bower.md delete mode 100644 radar/2017-03-01/client-side-error-logging.md delete mode 100644 radar/2017-03-01/consul.md delete mode 100644 radar/2017-03-01/container-based-builds.md delete mode 100644 radar/2017-03-01/dagger.md delete mode 100644 radar/2017-03-01/datadog.md delete mode 100644 radar/2017-03-01/decoupling-via-messaging.md delete mode 100644 radar/2017-03-01/devops-practices.md delete mode 100644 radar/2017-03-01/docker.md delete mode 100644 radar/2017-03-01/elasticsearch.md delete mode 100644 radar/2017-03-01/elk-stack.md delete mode 100644 radar/2017-03-01/evil-user-stories.md delete mode 100644 radar/2017-03-01/explicit-test-strategy.md delete mode 100644 radar/2017-03-01/flow.md delete mode 100644 radar/2017-03-01/galen.md delete mode 100644 radar/2017-03-01/gatling.md delete mode 100644 radar/2017-03-01/go-lang.md delete mode 100644 radar/2017-03-01/gradle.md delete mode 100644 radar/2017-03-01/groovy.md delete mode 100644 radar/2017-03-01/grunt.md delete mode 100644 radar/2017-03-01/gulp.md delete mode 100644 radar/2017-03-01/hal-hateoas.md delete mode 100644 radar/2017-03-01/hystrix.md delete mode 100644 radar/2017-03-01/imgix.md delete mode 100644 radar/2017-03-01/infrastructure-as-code.md delete mode 100644 radar/2017-03-01/jest.md delete mode 100644 radar/2017-03-01/job-dsl.md delete mode 100644 radar/2017-03-01/keycloak.md delete mode 100644 radar/2017-03-01/kubernetes.md delete mode 100644 radar/2017-03-01/maintain-third-party-packages.md delete mode 100644 radar/2017-03-01/microservices.md delete mode 100644 radar/2017-03-01/neo4j.md delete mode 100644 radar/2017-03-01/node-js.md delete mode 100644 radar/2017-03-01/npm.md delete mode 100644 radar/2017-03-01/oro-platform.md delete mode 100644 radar/2017-03-01/pair-working.md delete mode 100644 radar/2017-03-01/phan.md delete mode 100644 radar/2017-03-01/php7-over-php5.md delete mode 100644 radar/2017-03-01/pin-external-dependencies.md delete mode 100644 radar/2017-03-01/pipeline-as-code.md delete mode 100644 radar/2017-03-01/play-framework.md delete mode 100644 radar/2017-03-01/postcss.md delete mode 100644 radar/2017-03-01/protobuf.md delete mode 100644 radar/2017-03-01/puppet.md delete mode 100644 radar/2017-03-01/rabbitmq.md delete mode 100644 radar/2017-03-01/raml.md delete mode 100644 radar/2017-03-01/react.md delete mode 100644 radar/2017-03-01/redux.md delete mode 100644 radar/2017-03-01/resilience-thinking.md delete mode 100644 radar/2017-03-01/rest-assured.md delete mode 100644 radar/2017-03-01/rxjava.md delete mode 100644 radar/2017-03-01/rxjs.md delete mode 100644 radar/2017-03-01/sass.md delete mode 100644 radar/2017-03-01/scala-lang.md delete mode 100644 radar/2017-03-01/settings-injection.md delete mode 100644 radar/2017-03-01/sparkpost.md delete mode 100644 radar/2017-03-01/spock_geb.md delete mode 100644 radar/2017-03-01/spring-boot.md delete mode 100644 radar/2017-03-01/spring-rest-docs.md delete mode 100644 radar/2017-03-01/strategic-domain-driven-design.md delete mode 100644 radar/2017-03-01/styleguide-driven-development.md delete mode 100644 radar/2017-03-01/symfony-components.md delete mode 100644 radar/2017-03-01/typescript.md delete mode 100644 radar/2017-03-01/typo3-as-a-framework.md delete mode 100644 radar/2017-03-01/vue.md delete mode 100644 radar/2017-03-01/webpack.md delete mode 100644 radar/2017-03-01/wiremock.md delete mode 100644 radar/2017-03-01/xataface.md delete mode 100644 radar/2017-03-01/xmlunit.md delete mode 100644 radar/2018-03-01/adr.md delete mode 100644 radar/2018-03-01/akka-streams.md delete mode 100644 radar/2018-03-01/alpakka.md delete mode 100644 radar/2018-03-01/angular.md delete mode 100644 radar/2018-03-01/artifactory.md delete mode 100644 radar/2018-03-01/asciidoc.md delete mode 100644 radar/2018-03-01/axure.md delete mode 100644 radar/2018-03-01/babel.md delete mode 100644 radar/2018-03-01/blameless-post-mortems.md delete mode 100644 radar/2018-03-01/consul.md delete mode 100644 radar/2018-03-01/crc.md delete mode 100644 radar/2018-03-01/docker.md delete mode 100644 radar/2018-03-01/elasticsearch.md delete mode 100644 radar/2018-03-01/flow.md delete mode 100644 radar/2018-03-01/gatling.md delete mode 100644 radar/2018-03-01/gitlab-ci.md delete mode 100644 radar/2018-03-01/gitlab.md delete mode 100644 radar/2018-03-01/go-lang.md delete mode 100644 radar/2018-03-01/grafana.md delete mode 100644 radar/2018-03-01/grpc.md delete mode 100644 radar/2018-03-01/gulp.md delete mode 100644 radar/2018-03-01/hal-hateoas.md delete mode 100644 radar/2018-03-01/helm.md delete mode 100644 radar/2018-03-01/imgix.md delete mode 100644 radar/2018-03-01/invision.md delete mode 100644 radar/2018-03-01/jest.md delete mode 100644 radar/2018-03-01/keycloak.md delete mode 100644 radar/2018-03-01/kubernetes.md delete mode 100644 radar/2018-03-01/maintain-third-party-packages.md delete mode 100644 radar/2018-03-01/microfrontends.md delete mode 100644 radar/2018-03-01/microservices.md delete mode 100644 radar/2018-03-01/neo4j.md delete mode 100644 radar/2018-03-01/oro-platform.md delete mode 100644 radar/2018-03-01/pact.md delete mode 100644 radar/2018-03-01/pair-working.md delete mode 100644 radar/2018-03-01/phan.md delete mode 100644 radar/2018-03-01/php7-over-php5.md delete mode 100644 radar/2018-03-01/pipeline-as-code.md delete mode 100644 radar/2018-03-01/ports-and-adapters.md delete mode 100644 radar/2018-03-01/puppet.md delete mode 100644 radar/2018-03-01/react.md delete mode 100644 radar/2018-03-01/reactive-programming.md delete mode 100644 radar/2018-03-01/scala-lang.md delete mode 100644 radar/2018-03-01/self-service-infrastructure.md delete mode 100644 radar/2018-03-01/sonarqube.md delete mode 100644 radar/2018-03-01/sparkpost.md delete mode 100644 radar/2018-03-01/spring-boot.md delete mode 100644 radar/2018-03-01/styleguide-driven-development.md delete mode 100644 radar/2018-03-01/terraform.md delete mode 100644 radar/2018-03-01/typo3-as-a-framework.md delete mode 100644 radar/2018-03-01/vue.md delete mode 100644 radar/2018-03-01/webpack.md delete mode 100644 radar/2018-03-01/xataface.md delete mode 100644 radar/2018-03-01/yarn.md delete mode 100644 radar/2019-11-01/akeneo.md delete mode 100644 radar/2019-11-01/akka-streams.md delete mode 100644 radar/2019-11-01/alpakka.md delete mode 100644 radar/2019-11-01/ant.md delete mode 100644 radar/2019-11-01/anypoint-platform.md delete mode 100644 radar/2019-11-01/apache-camel.md delete mode 100644 radar/2019-11-01/apollo-client.md delete mode 100644 radar/2019-11-01/asciidoc.md delete mode 100644 radar/2019-11-01/aws-lambda.md delete mode 100644 radar/2019-11-01/blameless-post-mortems.md delete mode 100644 radar/2019-11-01/bower.md delete mode 100644 radar/2019-11-01/cockpit.md delete mode 100644 radar/2019-11-01/concourse-ci.md delete mode 100644 radar/2019-11-01/container-based-builds.md delete mode 100644 radar/2019-11-01/cypress.md delete mode 100644 radar/2019-11-01/dagger.md delete mode 100644 radar/2019-11-01/datadog.md delete mode 100644 radar/2019-11-01/decoupling-via-messaging.md delete mode 100644 radar/2019-11-01/dependency-update-scan.md delete mode 100644 radar/2019-11-01/distributed-tracing.md delete mode 100644 radar/2019-11-01/eks.md delete mode 100644 radar/2019-11-01/event-storming.md delete mode 100644 radar/2019-11-01/explicit-test-strategy.md delete mode 100644 radar/2019-11-01/falco.md delete mode 100644 radar/2019-11-01/flamingo.md delete mode 100644 radar/2019-11-01/flowtype.md delete mode 100644 radar/2019-11-01/flux.md delete mode 100644 radar/2019-11-01/galen.md delete mode 100644 radar/2019-11-01/gitflow.md delete mode 100644 radar/2019-11-01/gitlab-ci.md delete mode 100644 radar/2019-11-01/gitlab.md delete mode 100644 radar/2019-11-01/go-lang.md delete mode 100644 radar/2019-11-01/grafana.md delete mode 100644 radar/2019-11-01/graphql.md delete mode 100644 radar/2019-11-01/groovy.md delete mode 100644 radar/2019-11-01/grpc.md delete mode 100644 radar/2019-11-01/grunt.md delete mode 100644 radar/2019-11-01/hal-hateoas.md delete mode 100644 radar/2019-11-01/helm.md delete mode 100644 radar/2019-11-01/hystrix.md delete mode 100644 radar/2019-11-01/infrastructure-as-code.md delete mode 100644 radar/2019-11-01/jaeger.md delete mode 100644 radar/2019-11-01/job-dsl.md delete mode 100644 radar/2019-11-01/kotlin.md delete mode 100644 radar/2019-11-01/microfrontends.md delete mode 100644 radar/2019-11-01/next-js.md delete mode 100644 radar/2019-11-01/nosql.md delete mode 100644 radar/2019-11-01/npm.md delete mode 100644 radar/2019-11-01/open-api.md delete mode 100644 radar/2019-11-01/packer.md delete mode 100644 radar/2019-11-01/plant-uml.md delete mode 100644 radar/2019-11-01/play-framework.md delete mode 100644 radar/2019-11-01/ports-and-adapters.md delete mode 100644 radar/2019-11-01/postgres.md delete mode 100644 radar/2019-11-01/postman.md delete mode 100644 radar/2019-11-01/protobuf.md delete mode 100644 radar/2019-11-01/rabbitmq.md delete mode 100644 radar/2019-11-01/raml.md delete mode 100644 radar/2019-11-01/reactive-programming.md delete mode 100644 radar/2019-11-01/self-service-infrastructure.md delete mode 100644 radar/2019-11-01/sonarqube.md delete mode 100644 radar/2019-11-01/spring-boot.md delete mode 100644 radar/2019-11-01/storybook.md delete mode 100644 radar/2019-11-01/stride-threat-modeling.md delete mode 100644 radar/2019-11-01/styleguide-driven-development.md delete mode 100644 radar/2019-11-01/symfony-components.md delete mode 100644 radar/2019-11-01/temporal-modeling.md delete mode 100644 radar/2019-11-01/terraform.md delete mode 100644 radar/2019-11-01/typescript.md delete mode 100644 radar/2019-11-01/vault.md delete mode 100644 radar/2019-11-01/vuex.md delete mode 100644 radar/2019-11-01/xmlunit.md delete mode 100644 radar/2019-11-01/yarn.md delete mode 100644 radar/2019-11-01/zero-trust.md delete mode 100644 radar/2021-07-01/adr.md delete mode 100644 radar/2021-07-01/akeneo.md delete mode 100644 radar/2021-07-01/angular.md delete mode 100644 radar/2021-07-01/apicurio.md delete mode 100644 radar/2021-07-01/apm.md delete mode 100644 radar/2021-07-01/artifactory.md delete mode 100644 radar/2021-07-01/checkov.md delete mode 100644 radar/2021-07-01/cockpit.md delete mode 100644 radar/2021-07-01/complexity-management.md delete mode 100644 radar/2021-07-01/conventionalcommits.md delete mode 100644 radar/2021-07-01/css-in-js.md delete mode 100644 radar/2021-07-01/cypress.md delete mode 100644 radar/2021-07-01/ddev.md delete mode 100644 radar/2021-07-01/dependency-update-scan.md delete mode 100644 radar/2021-07-01/dgs.md delete mode 100644 radar/2021-07-01/diagrams-as-code.md delete mode 100644 radar/2021-07-01/docker.md delete mode 100644 radar/2021-07-01/drupal.md delete mode 100644 radar/2021-07-01/eks.md delete mode 100644 radar/2021-07-01/elk-stack.md delete mode 100644 radar/2021-07-01/figma.md delete mode 100644 radar/2021-07-01/flowtype.md delete mode 100644 radar/2021-07-01/fluentd.md delete mode 100644 radar/2021-07-01/flutter.md delete mode 100644 radar/2021-07-01/gatling.md delete mode 100644 radar/2021-07-01/graalnative.md delete mode 100644 radar/2021-07-01/helm.md delete mode 100644 radar/2021-07-01/k6.md delete mode 100644 radar/2021-07-01/kafka.md delete mode 100644 radar/2021-07-01/kubernetes-operators.md delete mode 100644 radar/2021-07-01/loki.md delete mode 100644 radar/2021-07-01/microfrontends.md delete mode 100644 radar/2021-07-01/mlops.md delete mode 100644 radar/2021-07-01/nats.md delete mode 100644 radar/2021-07-01/next-js.md delete mode 100644 radar/2021-07-01/node-js.md delete mode 100644 radar/2021-07-01/nx.md delete mode 100644 radar/2021-07-01/oci-container.md delete mode 100644 radar/2021-07-01/open-policy-agent.md delete mode 100644 radar/2021-07-01/pact.md delete mode 100644 radar/2021-07-01/page-composing.md delete mode 100644 radar/2021-07-01/pin-external-dependencies.md delete mode 100644 radar/2021-07-01/plant-uml.md delete mode 100644 radar/2021-07-01/postman.md delete mode 100644 radar/2021-07-01/prometheus.md delete mode 100644 radar/2021-07-01/protobuf.md delete mode 100644 radar/2021-07-01/pulumi.md delete mode 100644 radar/2021-07-01/python-for-infrastructure.md delete mode 100644 radar/2021-07-01/redux.md delete mode 100644 radar/2021-07-01/renovate.md delete mode 100644 radar/2021-07-01/rust.md delete mode 100644 radar/2021-07-01/rxjs.md delete mode 100644 radar/2021-07-01/scala3.md delete mode 100644 radar/2021-07-01/semver2.md delete mode 100644 radar/2021-07-01/service-mesh.md delete mode 100644 radar/2021-07-01/settings-injection.md delete mode 100644 radar/2021-07-01/shared-responsibility.md delete mode 100644 radar/2021-07-01/sitespeed.md delete mode 100644 radar/2021-07-01/sketch.md delete mode 100644 radar/2021-07-01/state-management-pattern.md delete mode 100644 radar/2021-07-01/storybook.md delete mode 100644 radar/2021-07-01/strapi.md delete mode 100644 radar/2021-07-01/tailwindcss.md delete mode 100644 radar/2021-07-01/team-start-page.md delete mode 100644 radar/2021-07-01/vue.md delete mode 100644 radar/2021-07-01/vuex.md delete mode 100644 radar/2021-07-01/wiremock.md delete mode 100644 radar/2021-07-01/zero-trust.md delete mode 100644 radar/2022-03-28/api-first-design-approach.md delete mode 100644 radar/2022-03-28/argocd.md delete mode 100644 radar/2022-03-28/aws_fargate.md delete mode 100644 radar/2022-03-28/babel.md delete mode 100644 radar/2022-03-28/backstage.md delete mode 100644 radar/2022-03-28/bareid.md delete mode 100644 radar/2022-03-28/colima.md delete mode 100644 radar/2022-03-28/container-based-builds.md delete mode 100644 radar/2022-03-28/conventionalcommits.md delete mode 100644 radar/2022-03-28/crc.md delete mode 100644 radar/2022-03-28/css-in-js.md delete mode 100644 radar/2022-03-28/dependency-update-scan.md delete mode 100644 radar/2022-03-28/dgs.md delete mode 100644 radar/2022-03-28/drupal.md delete mode 100644 radar/2022-03-28/elasticsearch.md delete mode 100644 radar/2022-03-28/evil-user-stories.md delete mode 100644 radar/2022-03-28/gitlab-ci.md delete mode 100644 radar/2022-03-28/gitlab.md delete mode 100644 radar/2022-03-28/groovy.md delete mode 100644 radar/2022-03-28/inner-source.md delete mode 100644 radar/2022-03-28/jaeger.md delete mode 100644 radar/2022-03-28/k6.md delete mode 100644 radar/2022-03-28/lighthouse-ci.md delete mode 100644 radar/2022-03-28/mob-programming.md delete mode 100644 radar/2022-03-28/monorepo.md delete mode 100644 radar/2022-03-28/nocode-lowcode.md delete mode 100644 radar/2022-03-28/nx.md delete mode 100644 radar/2022-03-28/packer.md delete mode 100644 radar/2022-03-28/pipeline-as-code.md delete mode 100644 radar/2022-03-28/playwright.md delete mode 100644 radar/2022-03-28/postcss.md delete mode 100644 radar/2022-03-28/rabbitmq.md delete mode 100644 radar/2022-03-28/raml.md delete mode 100644 radar/2022-03-28/reactive-programming.md delete mode 100644 radar/2022-03-28/remix.md delete mode 100644 radar/2022-03-28/renovate.md delete mode 100644 radar/2022-03-28/resilience-thinking.md delete mode 100644 radar/2022-03-28/rest-assured.md delete mode 100644 radar/2022-03-28/rust.md delete mode 100644 radar/2022-03-28/rxjs.md delete mode 100644 radar/2022-03-28/sass.md delete mode 100644 radar/2022-03-28/scala-lang.md delete mode 100644 radar/2022-03-28/scala3.md delete mode 100644 radar/2022-03-28/semanticore.md delete mode 100644 radar/2022-03-28/sitespeed.md delete mode 100644 radar/2022-03-28/sonarqube.md delete mode 100644 radar/2022-03-28/spock_geb.md delete mode 100644 radar/2022-03-28/spring-rest-docs.md delete mode 100644 radar/2022-03-28/stitches.md delete mode 100644 radar/2022-03-28/tailwindcss.md delete mode 100644 radar/2022-03-28/unleash.md delete mode 100644 radar/2022-03-28/vault.md delete mode 100644 radar/2022-03-28/vistecture.md delete mode 100644 radar/2023-02-23/ansible.md delete mode 100644 radar/2023-02-23/apisix.md delete mode 100644 radar/2023-02-23/apollo-client.md delete mode 100644 radar/2023-02-23/checkov.md delete mode 100644 radar/2023-02-23/client-side-error-logging.md delete mode 100644 radar/2023-02-23/concourse-ci.md delete mode 100644 radar/2023-02-23/csharp.md delete mode 100644 radar/2023-02-23/ddev.md delete mode 100644 radar/2023-02-23/design-system.md delete mode 100644 radar/2023-02-23/dgs.md delete mode 100644 radar/2023-02-23/flutter.md delete mode 100644 radar/2023-02-23/graphql.md delete mode 100644 radar/2023-02-23/harbor.md delete mode 100644 radar/2023-02-23/helm.md delete mode 100644 radar/2023-02-23/hotchocolate.md delete mode 100644 radar/2023-02-23/java.md delete mode 100644 radar/2023-02-23/ldap-login.md delete mode 100644 radar/2023-02-23/open-digital-architecture.md delete mode 100644 radar/2023-02-23/playwright.md delete mode 100644 radar/2023-02-23/pnpm.md delete mode 100644 radar/2023-02-23/policy-as-code.md delete mode 100644 radar/2023-02-23/remix.md delete mode 100644 radar/2023-02-23/semanticore.md delete mode 100644 radar/2023-02-23/specflow.md delete mode 100644 radar/2023-02-23/svelte.md delete mode 100644 radar/2023-02-23/trivy.md delete mode 100644 radar/2023-02-23/turborepo.md delete mode 100644 radar/2023-11-01/adobe-creative-cloud.md delete mode 100644 radar/2023-11-01/akka.md delete mode 100644 radar/2023-11-01/alpakka.md delete mode 100644 radar/2023-11-01/angular.md delete mode 100644 radar/2023-11-01/ansible.md delete mode 100644 radar/2023-11-01/artifactory.md delete mode 100644 radar/2023-11-01/assisted-ai.md delete mode 100644 radar/2023-11-01/axure.md delete mode 100644 radar/2023-11-01/azure_container_instances.md delete mode 100644 radar/2023-11-01/blameless-post-mortems.md delete mode 100644 radar/2023-11-01/css-in-js.md delete mode 100644 radar/2023-11-01/deno.md delete mode 100644 radar/2023-11-01/design-system.md delete mode 100644 radar/2023-11-01/devops-practices.md delete mode 100644 radar/2023-11-01/diagrams-as-code.md delete mode 100644 radar/2023-11-01/dora-metrics.md delete mode 100644 radar/2023-11-01/fluentd.md delete mode 100644 radar/2023-11-01/flux.md delete mode 100644 radar/2023-11-01/gitlab.md delete mode 100644 radar/2023-11-01/gradle.md delete mode 100644 radar/2023-11-01/green-it.md delete mode 100644 radar/2023-11-01/harbor.md delete mode 100644 radar/2023-11-01/infrastructure-as-code.md delete mode 100644 radar/2023-11-01/jest.md delete mode 100644 radar/2023-11-01/kubernetes-operators.md delete mode 100644 radar/2023-11-01/ldap-login.md delete mode 100644 radar/2023-11-01/loki.md delete mode 100644 radar/2023-11-01/microfrontends.md delete mode 100644 radar/2023-11-01/microservices.md delete mode 100644 radar/2023-11-01/mlops.md delete mode 100644 radar/2023-11-01/monorepo.md delete mode 100644 radar/2023-11-01/nats.md delete mode 100644 radar/2023-11-01/next-js.md delete mode 100644 radar/2023-11-01/nx.md delete mode 100644 radar/2023-11-01/open-policy-agent.md delete mode 100644 radar/2023-11-01/pipeline-as-code.md delete mode 100644 radar/2023-11-01/playwright.md delete mode 100644 radar/2023-11-01/pnpm.md delete mode 100644 radar/2023-11-01/pulumi.md delete mode 100644 radar/2023-11-01/react-native.md delete mode 100644 radar/2023-11-01/react-server-components.md delete mode 100644 radar/2023-11-01/react.md delete mode 100644 radar/2023-11-01/sbom.md delete mode 100644 radar/2023-11-01/serverless.md delete mode 100644 radar/2023-11-01/service-mesh.md delete mode 100644 radar/2023-11-01/sigstore.md delete mode 100644 radar/2023-11-01/sketch.md delete mode 100644 radar/2023-11-01/sonarqube.md delete mode 100644 radar/2023-11-01/specflow.md delete mode 100644 radar/2023-11-01/spock_geb.md delete mode 100644 radar/2023-11-01/state-management-pattern.md delete mode 100644 radar/2023-11-01/stitches.md delete mode 100644 radar/2023-11-01/svelte.md delete mode 100644 radar/2023-11-01/team-start-page.md delete mode 100644 radar/2023-11-01/typescript.md delete mode 100644 radar/2023-11-01/vite.md delete mode 100644 radar/2023-11-01/vue.md delete mode 100644 radar/2023-11-01/webpack.md delete mode 100644 radar/2023-11-01/yarn.md delete mode 100644 radar/2023-11-01/zero-trust.md delete mode 100644 radar/2024-07-10/12-factor-apps.md delete mode 100644 radar/2024-07-10/adr.md delete mode 100644 radar/2024-07-10/akka.md delete mode 100644 radar/2024-07-10/angular.md delete mode 100644 radar/2024-07-10/api-first-design-approach.md delete mode 100644 radar/2024-07-10/apisix.md delete mode 100644 radar/2024-07-10/apm.md delete mode 100644 radar/2024-07-10/appium.md delete mode 100644 radar/2024-07-10/argocd.md delete mode 100644 radar/2024-07-10/assisted-ai.md delete mode 100644 radar/2024-07-10/bun.md delete mode 100644 radar/2024-07-10/client-side-error-logging.md delete mode 100644 radar/2024-07-10/conventionalcommits.md delete mode 100644 radar/2024-07-10/css-in-js.md delete mode 100644 radar/2024-07-10/cypress.md delete mode 100644 radar/2024-07-10/decoupling-via-messaging.md delete mode 100644 radar/2024-07-10/dependency-update-scan.md delete mode 100644 radar/2024-07-10/design-system.md delete mode 100644 radar/2024-07-10/devspace.md delete mode 100644 radar/2024-07-10/elk-stack.md delete mode 100644 radar/2024-07-10/falco.md delete mode 100644 radar/2024-07-10/fitness-functions.md delete mode 100644 radar/2024-07-10/flutter.md delete mode 100644 radar/2024-07-10/gitflow.md delete mode 100644 radar/2024-07-10/github-copilot.md delete mode 100644 radar/2024-07-10/graalnative.md delete mode 100644 radar/2024-07-10/graphql.md delete mode 100644 radar/2024-07-10/harbor.md delete mode 100644 radar/2024-07-10/invision.md delete mode 100644 radar/2024-07-10/k3d.md delete mode 100644 radar/2024-07-10/langchain.md delete mode 100644 radar/2024-07-10/microsilos.md delete mode 100644 radar/2024-07-10/mob-programming.md delete mode 100644 radar/2024-07-10/monolith-first.md delete mode 100644 radar/2024-07-10/nocode-lowcode.md delete mode 100644 radar/2024-07-10/oci-container.md delete mode 100644 radar/2024-07-10/ollama.md delete mode 100644 radar/2024-07-10/open-api.md delete mode 100644 radar/2024-07-10/opentofu.md delete mode 100644 radar/2024-07-10/page-composing.md delete mode 100644 radar/2024-07-10/panda-css.md delete mode 100644 radar/2024-07-10/pkl.md delete mode 100644 radar/2024-07-10/ports-and-adapters.md delete mode 100644 radar/2024-07-10/puppet.md delete mode 100644 radar/2024-07-10/react-native.md delete mode 100644 radar/2024-07-10/remix.md delete mode 100644 radar/2024-07-10/renovate.md delete mode 100644 radar/2024-07-10/resilience-thinking.md delete mode 100644 radar/2024-07-10/retrieval-augmented-generation.md delete mode 100644 radar/2024-07-10/rxjava.md delete mode 100644 radar/2024-07-10/scala3.md delete mode 100644 radar/2024-07-10/self-service-infrastructure.md delete mode 100644 radar/2024-07-10/service-mesh.md delete mode 100644 radar/2024-07-10/socketio.md delete mode 100644 radar/2024-07-10/spring-boot.md delete mode 100644 radar/2024-07-10/spring-rest-docs.md delete mode 100644 radar/2024-07-10/strategic-domain-driven-design.md delete mode 100644 radar/2024-07-10/stride-threat-modeling.md delete mode 100644 radar/2024-07-10/stylex.md delete mode 100644 radar/2024-07-10/supply-chain-security.md delete mode 100644 radar/2024-07-10/svelte.md delete mode 100644 radar/2024-07-10/temporal-modeling.md delete mode 100644 radar/2024-07-10/terraform.md delete mode 100644 radar/2024-07-10/trivy.md delete mode 100644 radar/2024-07-10/turborepo.md delete mode 100644 radar/2024-07-10/unleash.md delete mode 100644 radar/2024-07-10/vistecture.md delete mode 100644 radar/2024-07-10/visual-regression-tests.md delete mode 100644 radar/2025-04-10/Ansible.md delete mode 100644 radar/2025-04-10/CMDBuild.md delete mode 100644 radar/2025-04-10/NetBoxOSS.md delete mode 100644 radar/2025-04-10/docker.md delete mode 100644 radar/2025-04-10/jetsonorinnano.md delete mode 100644 radar/2025-04-10/macminim4.md delete mode 100644 radar/2025-04-10/myos.md delete mode 100644 radar/2025-04-10/netbird.md delete mode 100644 radar/2025-04-10/openziti.md delete mode 100644 radar/2025-04-10/osquery.md create mode 100644 radar/bash.md create mode 100644 radar/cryptographie.md create mode 100644 radar/dart.md create mode 100644 radar/docker.md create mode 100644 radar/flutter.md create mode 100644 radar/gitlab-ci-cd.md create mode 100644 radar/ipfs.md create mode 100644 radar/javascript-typescript.md create mode 100644 radar/kubernetes.md create mode 100644 radar/linux.md create mode 100644 radar/netlifycms.md create mode 100644 radar/nostr.md create mode 100644 radar/nuxt-js.md create mode 100644 radar/postgresql.md create mode 100644 radar/proxmox.md create mode 100644 radar/python.md create mode 100644 radar/rust.md create mode 100644 radar/serverless.md create mode 100644 radar/squid.md create mode 100644 radar/substrate-framework.md create mode 100644 radar/vue-js.md create mode 100644 radar/wordup-cms.md create mode 100755 scripts/serve-business.sh diff --git a/config.json b/config.json index 54cb3e3..cb2cebc 100644 --- a/config.json +++ b/config.json @@ -1,7 +1,7 @@ { - "basePath": "/", + "basePath": "/business", "baseUrl": "", - "editUrl": "https://git.open.us.org/syoul/TechradarDev/_edit/main/radar/{release}/{id}.md", + "editUrl": "https://git.open.us.org/syoul/TechradarDev/_edit/main/radar-business/{release}/{id}.md", "logoFile": "logo.svg", "jsFile": "", "toggles": { @@ -13,140 +13,112 @@ "sections": ["radar", "tags", "list"], "colors": { "foreground": "#fff", - "background": "#173d7a", - "highlight": "#029df7", + "background": "#1a4d3a", + "highlight": "#2ecc71", "content": "#fff", "text": "#575757", - "link": "#029df7", + "link": "#2ecc71", "border": "rgba(255, 255, 255, 0.1)", "tag": "rgba(255, 255, 255, 0.1)" }, "quadrants": [ { - "id": "languages-and-frameworks", - "title": "Languages & Frameworks", - "description": "This quadrant includes programming languages (e.g., Java and Golang) and frameworks (e.g., React and Spring Boot) that are at the core of custom software development.", - "color": "#84BFA4" + "id": "technologies-differentiantes", + "title": "Technologies Différenciantes", + "description": "Technologies qui créent un avantage concurrentiel et de la valeur différenciante pour le business. Ce sont les technologies qui permettent de se distinguer sur le marché.", + "color": "#2ecc71" }, { - "id": "methods-and-patterns", - "title": "Methods & Patterns", - "description": "This quadrant covers methods and patterns related to software development, including architecture, security, testing, organizational methodologies, and more.", - "color": "#248EA6" + "id": "technologies-commodite", + "title": "Technologies de Commodité", + "description": "Technologies nécessaires mais non différenciantes. Elles sont essentielles au fonctionnement mais ne créent pas d'avantage concurrentiel. À optimiser pour réduire les coûts.", + "color": "#3498db" }, { - "id": "platforms-and-aoe-services", - "title": "Platforms & Operations", - "description": "This quadrant clusters technologies focused on the operation of software, related platforms, tools, infrastructure, and services.", - "color": "#F25244" + "id": "technologies-risque", + "title": "Technologies à Risque", + "description": "Technologies obsolètes, coûteuses ou présentant des risques techniques ou business. À migrer ou remplacer pour réduire les risques et les coûts.", + "color": "#e74c3c" }, { - "id": "tools", - "title": "Tools", - "description": "This quadrant features a variety of tools, from small utilities to large-scale software projects.", - "color": "#F2A25C" + "id": "technologies-emergentes", + "title": "Technologies Émergentes", + "description": "Technologies prometteuses représentant des opportunités futures. À évaluer et potentiellement adopter pour créer de nouveaux avantages compétitifs.", + "color": "#f39c12" } ], "rings": [ { - "id": "adopt", - "title": "Adopt", - "description": "We can clearly recommend this technology. We have used it for longer period of time in many teams and it has proven to be stable and useful.", - "color": "#5cb449", + "id": "core", + "title": "Core", + "description": "Technologies critiques pour le business model. Indispensables au fonctionnement et à la création de valeur. Investissement prioritaire en maintenance et évolution.", + "color": "#27ae60", "radius": 0.5, "strokeWidth": 5 }, { - "id": "trial", - "title": "Trial", - "description": "We have used it with success and recommend to have a closer look at the technology in this ring. The goal of items here is to look at them more closely, with the goal to bring them to the adopt level.", - "color": "#faa03d", + "id": "strategic", + "title": "Strategic", + "description": "Technologies stratégiques pour la croissance et le développement. Investissements importants pour renforcer la position concurrentielle.", + "color": "#3498db", "radius": 0.69, + "strokeWidth": 4 + }, + { + "id": "support", + "title": "Support", + "description": "Technologies de support nécessaires mais non critiques. À maintenir à un niveau fonctionnel sans sur-investissement.", + "color": "#95a5a6", + "radius": 0.85, "strokeWidth": 3 }, { - "id": "assess", - "title": "Assess", - "description": "We have tried it out and we find it promising. We recommend having a look at these items when you face a specific need for the technology in your project.", - "color": "#029df7", - "radius": 0.85, - "strokeWidth": 2 - }, - { - "id": "hold", - "title": "Hold", - "description": "This category is a bit special. Unlike the others, we recommend to stop doing or using something. That does not mean that they are bad and it often might be ok to use them in existing projects. But we move things here if we think we shouldn't do them anymore - because we see better options or alternatives now.", - "color": "#688190", + "id": "legacy", + "title": "Legacy", + "description": "Technologies à remplacer. Présentent des risques techniques, des coûts élevés ou sont obsolètes. Planifier la migration vers des alternatives modernes.", + "color": "#c0392b", "radius": 1, - "strokeWidth": 0.75 + "strokeWidth": 2 } ], "flags": { "new": { "color": "#f1235a", - "title": "New", + "title": "Nouveau", "titleShort": "N", - "description": "New in this version" + "description": "Nouveau dans cette version" }, "changed": { "color": "#40a7d1", - "title": "Changed", - "titleShort": "C", - "description": "Recently changed" + "title": "Modifié", + "titleShort": "M", + "description": "Récemment modifié" }, "default": { - "description": "Unchanged" + "description": "Inchangé" } }, "chart": { "size": 800, "blipSize": 12 }, - "social": [ - { - "href": "https://www.facebook.com/aoepeople", - "icon": "facebook" - }, - { - "href": "https://twitter.com/aoepeople", - "icon": "x" - }, - { - "href": "https://www.linkedin.com/company/aoe", - "icon": "linkedIn" - }, - { - "href": "https://www.xing.com/company/aoe", - "icon": "xing" - }, - { - "href": "https://www.instagram.com/aoepeople", - "icon": "instagram" - }, - { - "href": "https://www.youtube.com/user/aoepeople", - "icon": "youtube" - }, - { - "href": "https://github.com/aoepeople", - "icon": "github" - } - ], - "imprint": "https://www.aoe.com/en/imprint.html", + "social": [], + "imprint": "", "labels": { - "title": "CoeurBox by AJR", - "imprint": "Legal Information", + "title": "Radar Stratégique Business - Duniter/Ğ1", + "imprint": "Informations légales", "quadrant": "Quadrant", - "quadrantOverview": "Quadrant Overview", - "zoomIn": "Zoom in", - "filterByTag": "Filter by Tag", - "footer": "AJR is a leading global provider of services for digital transformation and digital business models. AJR relies exclusively on established Enterprise Open Source technologies. This leads to innovative solutions, digital products and portals in agile software projects, and helps build long-lasting, strategic partnerships with our customers.", - "notUpdated": "This item was not updated in last three versions of the Radar. Should it have appeared in one of the more recent editions, there is a good chance it remains pertinent. However, if the item dates back further, its relevance may have diminished and our current evaluation could vary. Regrettably, our capacity to consistently revisit items from past Radar editions is limited.", - "notFound": "404 - Page not found", - "pageAbout": "How to use a CoeurBox ?", - "pageOverview": "Technologies Overview", - "pageSearch": "Search", - "searchPlaceholder": "What are you looking for?", - "metaDescription": "Stay at the forefront of web dev software and trends with AJR." + "quadrantOverview": "Vue d'ensemble des quadrants", + "zoomIn": "Zoomer", + "filterByTag": "Filtrer par tag", + "footer": "Radar stratégique pour analyser les technologies de l'écosystème Duniter/Ğ1 et définir une stratégie d'évolution technique alignée avec les objectifs business.", + "notUpdated": "Cet élément n'a pas été mis à jour dans les trois dernières versions du Radar.", + "notFound": "404 - Page non trouvée", + "pageAbout": "Comment utiliser le Radar Business ?", + "pageOverview": "Vue d'ensemble des technologies", + "pageSearch": "Recherche", + "searchPlaceholder": "Que recherchez-vous ?", + "metaDescription": "Radar stratégique business pour l'écosystème Duniter/Ğ1 - Analyse des technologies et définition de la stratégie d'évolution." } } + diff --git a/radar/2017-03-01/akeneo.md b/radar/2017-03-01/akeneo.md deleted file mode 100644 index 6f143f2..0000000 --- a/radar/2017-03-01/akeneo.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Akeneo" -ring: assess -quadrant: tools ---- - -Akeneo is a Product Information Management system (also known as PIM, PCM or Product MDM) and helps centralize and harmonize all the technical and marketing information of products. - -We use Akeneo with success in our projects and products (For example in OM3), where it is responsible for: - -- Keeping product data separate from other applications - such as E-Commerce systems -- Managing lifecycles of products and managing product portfolios with their category structures -- Managing attributes and families and therefore acting as attribute master for the suite - -The system has a modern and friendly user interface and product managers find things such as completeness check, translation views and mass editing very helpful. - -With delta export and import capabilities and the usage of Mongo DB as persistence backend, the performance is acceptable. We miss a richer API - but the system is extendable and based on PHP/Symfony 2. diff --git a/radar/2017-03-01/akka.md b/radar/2017-03-01/akka.md deleted file mode 100644 index ee14a09..0000000 --- a/radar/2017-03-01/akka.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Akka" -ring: trial -quadrant: languages-and-frameworks -tags: [coding] ---- - -With the growing adoption of microservice-based architectures, the interest in frameworks and tools that make building systems that follow the reactive manifesto possible has increased. - -Akka provides you a toolkit and runtime based on the Actor model known from Erlang to reach this goal. - -It's one of the most-adopted toolkits in its space with its key contributors being heavily involved in the overall movement of the reactive community as well. -At AOE, we use Akka when we need high-performance, efficient data processing or where its finite state machine plays nicely with the domain of the application. It is worth mentioning that the actor model might come with extra complexity and therefore should be used in problem spaces where the advantages of this approach bring enough value and no accidental complexity. diff --git a/radar/2017-03-01/angular.md b/radar/2017-03-01/angular.md deleted file mode 100644 index 5e70db4..0000000 --- a/radar/2017-03-01/angular.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Angular" -ring: assess -quadrant: languages-and-frameworks ---- - -The latest version of the Angular Framework, which is used for large single-page applications. - -[Angular](https://angular.io/) is a complete rewrite of Angular 1 — many things have changed compared to the first version. The latest best practices and toolings from the JavaScript community have found their way into Angular. - -It supports DI (dependency injection), it has a clean inheritance and a good separation of concerns. Angular follows the [web component standards](https://www.w3.org/standards/techs/components#w3c_all) to avoid negative side effects between components. - -We think that Angular is well-structured on both a development and an application level. - -When talking about Angular, we must consider the [angular.cli](https://cli.angular.io/) as well, which provides a huge level of intelligent automation along the development process and project setup. diff --git a/radar/2017-03-01/ant.md b/radar/2017-03-01/ant.md deleted file mode 100644 index a5a8361..0000000 --- a/radar/2017-03-01/ant.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Ant" -ring: hold -quadrant: tools ---- - -Apache Ant was build in 1997 to have something like Make in the C/C++ world for Java. -Ant uses xml files to describe steps required to produce executable artifacts from source code. -The main concepts of tasks and targets are programmable in an imperative style. - -Apache Ant was and is widely used by large software projects. -Our recommendation is to stop using Apache Ant for new projects. -If you are free to choose, we recommend Gradle as an Apache Ant replacement. diff --git a/radar/2017-03-01/anypoint-platform.md b/radar/2017-03-01/anypoint-platform.md deleted file mode 100644 index 3c9ef49..0000000 --- a/radar/2017-03-01/anypoint-platform.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Anypoint platform" -ring: trial -quadrant: tools ---- - -[Anypoint platform](https://www.mulesoft.com/integration-resources) (formerly known as Mule or Mule ESB) is an Enterprise Integration Platform written in Java. - -Anypoint provides tools to use Enterprise Integration Patterns (EAI) and has a high number of ready-to-use connectors to communicate with software tools such as SAP, Salesforce, etc. - -Anypoint Community Version is Open Source and contribution is possible. -The platform is pluggable with own connectors. -Mulesoft is also driving the [RAML](/languages-and-frameworks/raml/) specification and related Open Source tools. - -AOE is a Mulesoft Partner and we use both the Community and Enterprise Versions of Anypoint. -We use Anypoint as an API Gateway to combine and transform data from multiple backends. -We use it as ESB or Integration platform for loose coupling of software components. -We also use it as legacy modernization to provide modern APIs for legacy or external software. diff --git a/radar/2017-03-01/api-first-design-approach.md b/radar/2017-03-01/api-first-design-approach.md deleted file mode 100644 index 4611b8c..0000000 --- a/radar/2017-03-01/api-first-design-approach.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "API-First Design Approach" -ring: trial -quadrant: methods-and-patterns ---- - -The API-First Design Approach puts the API design at the beginning of the implementation without any constraints, for example, from the current IT infrastructure or the implementation itself. -The idea is to design the API in a way that it serves its purpose best and the consumers are enabled to work efficiently. - -There are several advantages to this approach. For example, it can help to avoid reflecting the internal structure of the application or any internal constraints. -Furthermore, as one of the most important design aspects is consistency, one can define features such as the behavior of security, URL schemes, and API keys upfront. -It also helps speed up parallel implementation. -A team that consumes the API can start working directly after the API design because it can easily be mocked. - -There are several tools for modelling an API, but here at AOE we mainly use [RAML](/languages-and-frameworks/raml/) as it provides a rich set of tools for generating documentation, mocking and more. -For mocking we use [WireMock](/tools/wiremock/), for example. - -Related to the "API-First" approach is the "Headless" approach where an existing application (with or without existing API) is used as a backend for a separate frontend. -We used this with sucess for Magento-based E-Commerce platforms. -This allows encapsulating the core features of that application, while integrating it into a larger landscape of components using its API as a unified way to interact between components. -Decoupling the core logic from its presentation layer allows picking the best technology stack for the various parts independently. - -For further reading see: -* [Understanding API First Design](https://www.programmableweb.com/api-university/understanding-api-first-design) -* [When crafting your API strategy, put design first](http://www.techradar.com/news/software/applications/when-crafting-your-api-strategy-put-design-first-1262043?src=rss&attr=all) diff --git a/radar/2017-03-01/artifactory.md b/radar/2017-03-01/artifactory.md deleted file mode 100644 index 4e6da34..0000000 --- a/radar/2017-03-01/artifactory.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "Artifactory" -ring: trial -quadrant: platforms-and-aoe-services ---- - -JFrog [Artifactory](https://www.jfrog.com/open-source/)is a software tool, which, in the end, manages and stores (binary) artifacts. -In addition to storage, it provides a managing interface, which also allows to store build information, properties as well as dependencies per artifact which are organized within repositories. -A fine grained security system enables easy management of which artifacts are available to whom. -The artifacts are exposed via an HTTP(S)-Url Artifactory, which can generate package-manager compatible manifests for the repositories. -AOE utilizes Artifactory to serve Maven, Apt, npm, Composer and Docker Repositories. - -In addition to storing own assets, Artifactory is able to proxy remote Repository for and cache resolved artifacts locally. -This results in an increased build performance and decouples builds from external service dependencies and ensures builds still work even if they utilize outdated dependencies that might not be publicly available anymore. - -Artifactory provides a powerful REST-API for managing Artifacts including a powerful search AQL. -It is utilized to provide complex release processes based on QA-Attributes on an artifact level. - -Artifactory at AOE currently comes with some problems, too: -* Cleanup in Artifactory has to be done manually. Therefore, if every build is pushed to Artifactory it currently pollutes disk space since old or unused versions are never removed. -* The Composer Integration mirroring GitHub proves to be slower than directly connecting to GitHub. - -AOE is using the Professional version for a central instance that can be used by different teams. -We encourage teams to use Artifactory instead of Jenkins to store and manage build artifacts - and to take care of cleaning up old artifacts automatically. diff --git a/radar/2017-03-01/aws-lambda.md b/radar/2017-03-01/aws-lambda.md deleted file mode 100644 index 20fda46..0000000 --- a/radar/2017-03-01/aws-lambda.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "AWS Lambda" -ring: trial -quadrant: platforms-and-aoe-services ---- - -AWS Lambda is one of the exciting new "cloud-native" / serverless ways to run code without worrying about infrastructure. -While it is possible to directly respond to web requests using the API Gateway, our teams are currently using AWS Lambda mostly for tasks outside the critical path. -As a custom resource for CloudFormation, it allows us to manage all aspects of a deployment in an elegant way by simply deploying a new CloudFormation stack. -Baking AMIs and doing green/blue switches are only two of the many use cases where AWS Lambda comes in very handy. - -In addition to deployment automation, we're using AWS Lambda to process incoming data. -Being able to respond to events from various sources such as S3 Buckets, SNS topics, Kinesis streams and HTTP endpoints it's a perfect match to process, transform and forward incoming data almost in real time at a fraction of the cost of running an ESB. diff --git a/radar/2017-03-01/babel.md b/radar/2017-03-01/babel.md deleted file mode 100644 index 82741e2..0000000 --- a/radar/2017-03-01/babel.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: "Babel" -ring: trial -quadrant: languages-and-frameworks ---- - -[Babel](https://babeljs.io/) gives you the possibility to use the latest features from JavaScript ([ECMAScript](https://en.wikipedia.org/wiki/ECMAScript)) in the browser of your choice. - -Without Babel you had to use the feature set of your oldest browser or use feature detections such as [modernizr](https://modernizr.com/) or write polyfills on your own. - -In general, Babel is split in 2 ways to bring you the new goodies you want. - -1. New syntax will be compiled to old EcmaScript 5 code e.g.: - - * [arrow-functions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions) - * [generators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator) - * [destructuring](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment) - * [template literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) - * [...](https://babeljs.io/learn-es2015/) - -2. New globals and functions are provided by [babel-polyfill](http://babeljs.io/docs/usage/polyfill/) e.g.: - - * [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) - * [Array.find](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find) - * [Array.includes](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes) - * [...](https://github.com/zloirock/core-js#index) - -The configuration is really simple due to the [plugin system](http://babeljs.io/docs/plugins/). You can choose which ECMAScript version and [stage presets](http://babeljs.io/docs/plugins/#presets) you want to use. - -* for the latest ECMAScript version use [babel-preset-env](https://babeljs.io/docs/plugins/preset-env/) -* for version 2015 only use [babel-preset-2015](https://babeljs.io/docs/plugins/preset-es2015/) - -To know what you need you can practice ECMAScript 6 by doing it with [es6katas](http://es6katas.org/) and ask [caniuse](http://caniuse.com/). - -If you are using [TypeScript](/languages-and-frameworks/typescript/), Babel is not necessary since you already get the new features with TypeScript. \ No newline at end of file diff --git a/radar/2017-03-01/bower.md b/radar/2017-03-01/bower.md deleted file mode 100644 index 311ecc6..0000000 --- a/radar/2017-03-01/bower.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Bower" -ring: hold -quadrant: tools ---- - -[Bower](https://bower.io/) is a package manager for frontend resources such as JavaScript libraries and CSS frameworks. Compared to [npm](https://www.npmjs.com/), it has a somewhat different approach to loading and resolving the packages, resulting in a smaller and cleaner folder structure. - -In small web projects, this approach is good and sufficient, but larger projects will need more dependencies such as task runners or testing frameworks, which are not available through Bower. -As most of the frontend libraries are also available through npm, it's not surprising that we ask ourselves why Bower is still needed. - -At AOE, we decided to use npm as the only package manager to avoid having multiple tools doing similar things. -Developers only need to deal with one solution, which makes the project easier to maintain. diff --git a/radar/2017-03-01/client-side-error-logging.md b/radar/2017-03-01/client-side-error-logging.md deleted file mode 100644 index cc166c2..0000000 --- a/radar/2017-03-01/client-side-error-logging.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Client-Side Error Logging" -ring: trial -quadrant: methods-and-patterns -tags: [architecture, frontend] ---- - -More and more business logic is done client-side with various web and app technologies. -How do we know if everything works in production? -We can easily track backend exceptions in the server logs, but what about client-side errors in the user's browser or mobile app? - -With client-side error logging, we send errors to a central server to see instantly what is going wrong. -With this method errors can be found and resolved quickly before they affect even more users. - -At AOE, we use the Open Source solution [Sentry](https://sentry.io/welcome/).io. -It can handle multiple projects and teams and integrates well with other services such as Mattermost/Slack and Issue Tracking Systems. diff --git a/radar/2017-03-01/consul.md b/radar/2017-03-01/consul.md deleted file mode 100644 index 5ac05ca..0000000 --- a/radar/2017-03-01/consul.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Consul" -ring: assess -quadrant: tools ---- - -Consul is a lightweight service to provide a service discovery registry with failure detection (health checks) for circuit breakers. It also provides configuration management with key/value storage.\ -The typical way to use it is that a consul master cluster takes care of the update and write processes and consul clients run locally on the apps host - data is shared across the complete Consul cluster. -The data can be accessed by using DNS and HTTP APIs. - -At AOE, we use Consul for settings distribution with consul-template as a way to do [Settings Injection](/methods-and-patterns/settings-injection/) during deployment. -Consul is also used as service discovery between apps inside [microservice](/methods-and-patterns/microservices/) environments. - -With Vault there is another tool that can be used to manage and share secrets. diff --git a/radar/2017-03-01/container-based-builds.md b/radar/2017-03-01/container-based-builds.md deleted file mode 100644 index be0b50e..0000000 --- a/radar/2017-03-01/container-based-builds.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Container-based builds" -ring: assess -quadrant: methods-and-patterns ---- - -Running your builds in isolated containers keeps your build servers clean. -It allows you to even run them with multiple versions of a framework or programming language. -You don't need additional machines like you would for running builds with PHP5 or PHP7 at the same time or running some legacy builds. - -Note that you need to think about some kind of caching mechanism for your dependencies to avoid downloading them in every build, which would cause long build times. - -At AOE, we are currently starting to use this approach for building services and it is especially useful if your build has special dependencies. -Also, it's possible to use GitLab as a build tool or use Docker with the new Jenkins pipeline. -For caching we are evaluating minio as a cache server. -We noticed that our builds run quite rapidly and reliably with that. -Also, the complexity of the builds decreased since we don't need any workarounds, which were caused by having everything installed on one build server. diff --git a/radar/2017-03-01/dagger.md b/radar/2017-03-01/dagger.md deleted file mode 100644 index 2ba4030..0000000 --- a/radar/2017-03-01/dagger.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Dagger" -ring: adopt -quadrant: tools ---- - -[Dagger](https://google.github.io/dagger/) is a fully static, compile-time [dependency injection](http://en.wikipedia.org/wiki/Dependency_injection) framework for both Java and Android. [Dagger](https://google.github.io/dagger/) doesn't use reflections at runtime, it saves resources. -For us, it is a perfect match for Android development. - -We at AOE use it as a base framework for every Android project. diff --git a/radar/2017-03-01/datadog.md b/radar/2017-03-01/datadog.md deleted file mode 100644 index add70c8..0000000 --- a/radar/2017-03-01/datadog.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Datadog" -ring: assess -quadrant: platforms-and-aoe-services ---- - -After realizing that AWS CloudWatch isn't flexible enough, and running our own metrics aggregation, monitoring and altering isn't something we want to do ourselves, we decided to give Datadog a try. -Datadog is very simple to set up and retrieves metrics from the AWS API (and many other integrations) and from an agent running on the EC2 instances. -On top of that, it comes with many plugins for services such as Apache, NGINX and ElasticSearch, allowing us to track all important metrics without much effort. -Creating dashboards, setting up alarms and integrating into other applications (such as ticket systems) is easy to do and works fine. diff --git a/radar/2017-03-01/decoupling-via-messaging.md b/radar/2017-03-01/decoupling-via-messaging.md deleted file mode 100644 index 8767531..0000000 --- a/radar/2017-03-01/decoupling-via-messaging.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Decoupling via Messaging" -ring: trial -quadrant: methods-and-patterns -tags: [architecture, devops] ---- - -In [Microservices](/methods-and-patterns/microservices/), we have already covered the trend that modern architectures are moving away from big monolithic applications to distributed software suites. The result of splitting our software and infrastructure into smaller parts is the need for these parts to communicate with each other. This can be done through direct communication or message-based asynchronous communication. - -While synchronous communication allows for more predictable "real-time" response times of the overall systems, asynchronous communication significantly increases the resilience and stability of the system and allows for the use of other integration and scaling patterns. However, it often comes with additional complexity. - -Most IaaS Cloud providers offer messaging services, such as [AWS SQS](https://aws.amazon.com/sqs/), which provide the possibility to decouple our infrastructure via messaging. Additionally, we use [RabbitMQ](/tools/rabbitmq/) as a messaging and broker solution within our applications. The decision to use messaging and messaging patterns as an integration strategy can be made as part of [strategic design](/methods-and-patterns/strategic-domain-driven-design/) considerations. diff --git a/radar/2017-03-01/devops-practices.md b/radar/2017-03-01/devops-practices.md deleted file mode 100644 index 6714df6..0000000 --- a/radar/2017-03-01/devops-practices.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "Devops practices" -ring: adopt -quadrant: methods-and-patterns -tags: [devops] ---- - -DevOps is a term that has been around for some years now. -We understand DevOps as a philosophy and culture with related practices and tools - all with the aim of bringing (IT) Operations closer to Development. - -Jez Humble described the devops movement like this: "a cross-functional community of practice dedicated to the study of building, evolving and operating rapidly changing, secure, resilient systems at scale". - -With the size of software projects and the effects of agile development, the need to also deliver operation and infrastructure in an agile way increases more and more. - -We have been using the following practices with success: - -**Cross-functional Teams "you build it, you run it"** - -In the past year, we have moved from a more centralistic or standalone IT and operations service team to cross-functional teams with Infrastructure experts working in and with the development team (admins joining the project team). - -And, we changed to cross-functional teams and a "you build it, you run it" approach for the bigger projects. -We have seen that this leads to the following positive effects: -* Software application architecture demands a certain infrastructure and the other way around. Having all the know-how in one team leads to more major decisions and implementations. Also, solving of root causes for problems works better. -* Rotating operation and incident management inside the whole team brings everyone into closer contact with the day-to-day operation of their software. This results in a shared and improved responsibility and commitment to the complete platform in the team. In addition, this brings developers into contact with the customer - which is an important feedback loop as well. -* Increased flexibility in the infrastructure: Implementations and adjustments in the infrastructure are faster and can be done together with the ongoing agile development of the platform. -* Developers also explicitly think of operation issues when building the application - since they are responsible for operation. For example, logging concept, monitoring aspects and resilience patterns are now explicitly optimized continuously and improve faster. -Important enabler of such an approach is the size and available budget for the project (not every project allows for having a continuous cross-functional teams that carries out ongoing development and operations). Also, this requires a certain amount of independence for the team. - -As always, we are establishing "community of interests" to improve and promote the knowledge transfer between different teams. - -**Increase of relevant tools** - -Another important aspect and also enabler of DevOps practices is the increase of certain tool and methods - some of them are also represented in the Tech Radar. For example: Puppet Environments; Docker; Cloud Services, Terraform, Consul etc. - -**Dev Setup = Prod Setup, [Infrastructure as a Code](/methods-and-patterns/infrastructure-as-code/)** - -Keeping the development infrastructure setup close to production is also a commonly implemented practice and a direct result of the "Infrastructure as Code" method. -Handling infrastructure and the required changes and innovations in ways similar to those used for applications is important; you can ready more about this here: Infrastructure as Code - -We encourage all teams to adopt devops practices in the teams and to take care that there is a true collaboration between the different experts in a team and no invisible wall. diff --git a/radar/2017-03-01/docker.md b/radar/2017-03-01/docker.md deleted file mode 100644 index 929a084..0000000 --- a/radar/2017-03-01/docker.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Docker" -ring: assess -quadrant: platforms-and-aoe-services ---- - -Docker is currently the most-used solution for creating and managing container-based infrastructures and deployments. - -Essentially, Docker is a platform to build container images, distribute them and run them as an isolated process (using Linux kernel cgroups, network namespaces and custom mounts). - -In a DevOps environment, this helps a lot as we can run the exact same software and runtime (such as PHP) on both production and locally while developing. This enables us to debug our software much easier. - -Also, Docker allows us to keep our development setup much smaller and faster; instead of VirtualBox setups on a per-project base, we can compose our project development setup out of small containers. -A CI environment building the containers allows us to package and test the whole environment instead of different software components on different runtimes in a much more stable way. - -Backed by services such as [Kubernetes](/platforms-and-aoe-services/kubernetes/), we can deploy Docker containers on a flexible infrastructure and enable our developers to test their software more easily in different environments. - -Here at AOE, we assess Docker in different projects to become more flexible and faster, which increases our focus on development of even better and more stable software. diff --git a/radar/2017-03-01/elasticsearch.md b/radar/2017-03-01/elasticsearch.md deleted file mode 100644 index 67a01a1..0000000 --- a/radar/2017-03-01/elasticsearch.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Elasticsearch" -ring: trial -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -Elasticsearch is a REST-based search and analytics engine based on [Lucene](https://lucene.apache.org/). Unlike its competitor [Apache Solr](https://solr.apache.org/), it was developed from the beginning with clustering and scaling in mind. It allows you to create complex queries while still delivering results very quickly. - -At AOE, we use Elasticsearch for logging as well as our own search solution, [Searchperience®](http://www.searchperience.com/). We recently moved the Searchperience stack from Solr to Elasticsearch and believe this was the right decision. Especially in terms of scaling, ease of use, and performance, Elasticsearch really shines. Additionally, the API design incorporates learnings from Apache Solr - for example, the queryDSL is a powerful way of describing different search use cases with highly flexible support for aggregations, etc. diff --git a/radar/2017-03-01/elk-stack.md b/radar/2017-03-01/elk-stack.md deleted file mode 100644 index 8a46540..0000000 --- a/radar/2017-03-01/elk-stack.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "ELK Stack" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -The [ELK Stack](https://www.elastic.co/de/elastic-stack) is a powerful trio of tools that work together to provide a comprehensive solution for logging, searching, visualizing, and analyzing data in real time: - -- **[Elasticsearch](/platforms-and-aoe-services/elasticsearch/)**: A search and analytics engine that indexes and stores data. -- **Logstash**: A data processing pipeline that ingests and transforms various data formats. -- **Kibana**: A visualization tool that creates interactive dashboards and reports. - -In today's complex IT environments, having a centralized logging solution is essential. It allows you to: -- Gain a unified view of system activities. -- Detect correlations between different events more easily. -- Extract valuable KPIs and visualize them on customizable dashboards. - -At AOE, we have been using the ELK Stack for years in various projects and infrastructure setups. It has proven invaluable for visualizing traffic, tracking KPIs, and analyzing application logs. We highly recommend that all teams adopt this solution and focus on generating meaningful logs in their applications. diff --git a/radar/2017-03-01/evil-user-stories.md b/radar/2017-03-01/evil-user-stories.md deleted file mode 100644 index a4c0be8..0000000 --- a/radar/2017-03-01/evil-user-stories.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Evil User Stories" -ring: assess -quadrant: methods-and-patterns ---- - -With Evil User Stories, we aim to raise the project teams' (PO, Dev-Team, QA) and clients' awareness for security topics and introduce a security-by-design principle. - -The first step is to identify business use cases of potential vulnerabilities in our software product. The next step is to write an Evil User Story for this use case, from the perspective of an evil persona, e.g. "John Badboy who wants to hack our software". The idea behind this is to take a look at specific parts (business logic) of the software from a perspective that would otherwise not be considered when working on standard user stories. - -So how would this work? To illustrate this, let's consider the following user story: "As Emma Shopping I am be able to pay for a product in my checkout using a credit card". To get that story done, we might have to persist some payment data somewhere. But within the context of an Evil user story we now also need to consider the security for the credit card and payment handling in our application. So, for that reason, we write an Evil User Story, which in this case could, for example, be "As John Badboy, I want to steal payment data" or more specifically "As John Badboy, I want to do to sql inject to get the payment token". - -Before implementation of this particular user story starts, developers should think about how they can secure potentially vulnerable parts of the software to prevent attacks such as sql injections. In this case, one approach should be the use of prepared statements for sql queries. When the development is finished, we should then be able to test the story using an automated testing approach with a penetration testing tool such as [sqlmap](http://sqlmap.org/) to confirm that our database queries are not vulnerable to sql injections. - -Additionally, both solutions should be checked during the development process using code reviews to identify and correct potentially buggy code. diff --git a/radar/2017-03-01/explicit-test-strategy.md b/radar/2017-03-01/explicit-test-strategy.md deleted file mode 100644 index 888c4f7..0000000 --- a/radar/2017-03-01/explicit-test-strategy.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Explicit test strategy" -ring: assess -quadrant: methods-and-patterns ---- - -According to the [ISTQB Glossar](https://glossary.istqb.org/)- a **Test Strategy** is an abstract specification that comprises the designated test levels (unit, integration, system and acceptance tests) and the implementation of each level for a whole organization or for an application. This test strategy can be applicable to one or more projects. - -At AOE, we established an explicit test strategy for many of our projects. The coordination of the test levels improves the effectivity of test runs and helps to avoid testing gaps, double inspection and overhead. Every test level has a different focus. Tests that are executed on one level don't have to be implemented on others. - -These are the test levels that we implement as a standard in the software deployment pipeline of our projects and that handle multiple integrated components and services: - -- **Unit Test:** The unit level tests verify the functionality of a specific section of code, usually at the function level. We use static as well as dynamic test methods such as code reviews, style or complexity checks and white-box testing. -- **Module Tests:** Module Tests focus on testing the functionality that a service or component provides in isolation to other components or services that this service depends on. This test stage finds errors in a component. It should never fail due to a consumed service that is not reachable or has been altered. Therefore, all dependencies of these components are mocked or stubbed on some level. Tests are most commonly conducted through interfaces using black-box testing. -- **Integration Tests:** On the integration level, individual software modules are combined and tested as a group. The integration testing verifies functional, performance and reliability requirements. These tests are also most commonly conducted through interfaces using black-box testing. In case there is a great number of (external) subsystems, we mock these systems outside of the defined context and use contract-based testing to verify the interfaces. All contract-based tests that focus on testing the interface contracts between services are also executed on this test level. -- **System Level Tests:** On the system level, tests are performed on a complete, integrated system, where they evaluate the system's compliance with its specified requirements. System tests not only verify the design, but they also check the system's behavior in general and even the assumed expectations of the customer. They are intended to test up to and beyond the bounds defined by the explicit system requirements. -- **Client Acceptance Tests:** The client acceptance level includes all testing done by the customer and is the last one in the succession of the five test levels. The objective is to evaluate the system's compliance with the business requirements and to assess whether it is acceptable for delivery. - -As a rule, we automate the execution of tests where it is feasible and sensible. Related to the test strategy are the test concept, test data management and the usage of a test case management tool that allows one to assess and categorize functional test cases. - -Due to the practical usefulness of having a sound test strategy for a project, we classify the explicit test strategy for projects with assess. diff --git a/radar/2017-03-01/flow.md b/radar/2017-03-01/flow.md deleted file mode 100644 index 610b33f..0000000 --- a/radar/2017-03-01/flow.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Flow" -ring: hold -quadrant: languages-and-frameworks ---- - -[Flow](https://flow.neos.io/) is a PHP web application framework developed for the [Neos](https://www.neos.io/) project. - -We used Flow in a couple of projects and decided to put it on hold for the following reasons: - -* slow during development and hard to debug because of its need to "compile" the application to integrate e.g. AOP -* limited documentation and community -* development of the framework is closely coupled to the progress of the Neos project - -Although it could be that some of the above-mentioned aspects have improved in the past, we decided to use other PHP frameworks such as [Symfony](http://symfony.com/) or other Languages (See [Go](/languages-and-frameworks/go-lang/); [Play Framework](/languages-and-frameworks/play-framework/); [Spring Boot](/languages-and-frameworks/spring-boot/)) diff --git a/radar/2017-03-01/galen.md b/radar/2017-03-01/galen.md deleted file mode 100644 index aa27992..0000000 --- a/radar/2017-03-01/galen.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Galen" -ring: assess -quadrant: tools ---- - -With [Galen Framework](http://galenframework.com/), layout testing can be automated to save you a lot of manual work. With its own specification language (Galen Spec), you can write tests to verify the correct look of the web page as well as the location and alignment of specific elements on a page. - -So, you can write simple tests such as "The button should be green" as well as more complex behavior specifications such as "On mobile devices the button should be inside the viewport". Especially when testing a responsive website on multiple devices, browsers and resolutions, the manual testing effort gets expensive. To help with that, Galen runs its specifications fully automated with Selenium against the required browsers and devices. - -Whenever a test fails Galen writes a test report with screenshots to show the mismatching areas on the page to help testers and developers become aware of the problem. - -At AOE, the Galen Framework helps us to continuously test the UI for potential regression bugs introduced by new features. diff --git a/radar/2017-03-01/gatling.md b/radar/2017-03-01/gatling.md deleted file mode 100644 index 1146387..0000000 --- a/radar/2017-03-01/gatling.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Gatling" -ring: trial -quadrant: tools ---- - -[Gatling](http://gatling.io/) is a highly capable load testing tool. It is designed for ease of use, maintainability and high performance. - -Out of the box, Gatling comes with excellent support of the HTTP protocol that makes it a tool of choice for load testing any HTTP server. As the core engine is actually protocol agnostic, it is perfectly possible to implement support for other protocols. For example, Gatling currently also ships [JMS support](http://gatling.io/docs/current/). - -Gatling is built with [Scala Lang](/languages-and-frameworks/scala-lang/) and [Akka](/languages-and-frameworks/akka/). By making good use of Scala's native language features (such as as the extensive type system), it makes writing tests feel natural and expressive, instead of writing load tests based on a DSL encoded in some special syntax. - -This allows us to use all native Scala features to work with, with the focus on the ability to structure your tests as pure code, and actually unit test your load tests. - -Besides the very good performance, we definitely like the pure code-based approach. Gatling creates HTML-based reports with nice graphs and metrics about how and what was tested. - -We use Gatling as an alternative to Jmeter with success in some of our projects. We encourage teams to try Gatling for future load testing. There is an integrated test recorder similiar to what other test frameworks have to get you started with a basic test case. diff --git a/radar/2017-03-01/go-lang.md b/radar/2017-03-01/go-lang.md deleted file mode 100644 index 68e143c..0000000 --- a/radar/2017-03-01/go-lang.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Go / Golang" -ring: assess -quadrant: languages-and-frameworks -tags: [academy training, coding] ---- - -2016 was the year of Go, with many open-source projects gaining significant attention, and numerous companies started to adopt it. - -Go jumped from #54 to #13 on the [TIOBE index](http://www.tiobe.com/tiobe-index/) in January 2017, earning the title of TIOBE programming language of the year 2016. - -Here at AOE, we rely on several services written in Go on a daily basis, such as Mattermost, Docker, Consul, and Kubernetes. Moreover, more and more applications, like GitLab, are incorporating Go-based services to handle heavy workloads. - -Go, as a programming language, offers several compelling features, including native support for concurrency (goroutines), statically compiled binaries with a minimal memory footprint, cross-compiling, and more. One significant advantage of Go is its shallow learning curve, enabling developers from more dynamic languages such as PHP to become proficient in a short time. - -If you're interested in getting a feel for Go, you should start with the [online tour](https://tour.golang.org/welcome/1). Within a day, you'll gain a good understanding of the core concepts, syntax, etc. This is partly because the language often provides only one simple way of doing things; an example of this is the defined code formatting and styling (though not enforced as in Python). Additionally, Go itself is very opinionated; for instance, composition is the preferred way of defining data structures for object-oriented programming in Go, and some developers may miss advanced concepts such as inheritance. - -Currently, we use Go for projects and microservices where we require flexibility and performance. diff --git a/radar/2017-03-01/gradle.md b/radar/2017-03-01/gradle.md deleted file mode 100644 index 3f9fd61..0000000 --- a/radar/2017-03-01/gradle.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Gradle" -ring: adopt -quadrant: tools -tags: [ci/cd, coding] ---- - -Gradle is a build automation tool originating in the Java space, providing declarative dependency management (like Maven) and support for custom functionality (like Ant). It has superb multi-project support and is extremely extensible via third-party plugins and also via self-written extensions and plugins that make it outstanding in its area. - -It uses a Groovy-based DSL to declaratively model your problem domain (Build automation) and provides a rich object model with extension points to customize the build logic. Because it is extremely easy to extend this DSL, you can easily provide a declarative interface to your customizations and add-ons. - -While providing plugins for building libs, apps and webapps in Java, Groovy and Scala out of the box it is not tied to the JVM as target platform, which is impressively shown by the native build support for C / C++. - -At AOE, it is used in various places already: to build [Anypoint](/tools/anypoint-platform/) and [Spring Boot](/languages-and-frameworks/spring-boot/) based applications; to build Android Apps; to automate the creation of Jenkins Jobs; to create Docker images and Debian packages and also do some deployment scripting with it. diff --git a/radar/2017-03-01/groovy.md b/radar/2017-03-01/groovy.md deleted file mode 100644 index f415072..0000000 --- a/radar/2017-03-01/groovy.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Groovy" -ring: trial -quadrant: languages-and-frameworks ---- - -Groovy is a dynamically typed compiled language running on the JVM. It is easy to learn as it provides a familiar syntax for Java programmers, but also offers advanced features such as closures and makes some mandatory Java syntax requirements optional to enhance the conciseness of the code. These features make Groovy especially well-suited for scripting and domain-specific languages. This is used by popular tools such as Gradle or Spock. - -At AOE, Groovy is used in many projects and areas. We use Gradle as a build system, we carry out unit and integration testing with Spock and Geb, we generate Jenkins jobs with JobDSL and we implement complete services with Groovy and [Spring Boot](/languages-and-frameworks/spring-boot/). diff --git a/radar/2017-03-01/grunt.md b/radar/2017-03-01/grunt.md deleted file mode 100644 index 458b8b2..0000000 --- a/radar/2017-03-01/grunt.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Grunt" -ring: hold -quadrant: tools ---- - -Grunt is a JavaScript task runner that automates repetitive tasks. While Grunt served us well for a good amount of projects, -other alternatives such as [Gulp](http://gulpjs.com/) emerged in the meantime and proved to be a better pick for the -majority of our teams. - -We have two main reasons for discarding Grunt in favor of other tools: - -### Speed -If a decent amount of tasks is reached, Grunt is known to run slower than other tools, because it heavily relies on I/O operations and -always stores the result of one task as files on the disk. - -### Configuration -On large projects where a lot of automation is required, it can get very tedious to maintain complex and parallel running tasks. -The grunt configuration files sometimes simply don´t gave us the flexibility that we needed. - -Currently, our preferred way to go is either simply use [npm scripts](https://docs.npmjs.com/misc/scripts) or rely on [Webpack loaders](https://webpack.js.org/concepts/loaders/) for file preprocessing. For non-webpack projects we also utilize Gulp. diff --git a/radar/2017-03-01/gulp.md b/radar/2017-03-01/gulp.md deleted file mode 100644 index 0c1fb7d..0000000 --- a/radar/2017-03-01/gulp.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "Gulp" -ring: adopt -quadrant: tools ---- - -Gulp is a JavaScript task runner much like Grunt. The tasks are written in JavaScript code. - -It is a tool that helps you automate numerous tasks surrounding web development. -A typical use is to configure preprocessors for Sass, to compile CSS or to optimize CSS, JavaScript and Images. - -With Gulp and its many plugins you can also do stuff such as start a web server and reload the browser if changes happen. - -To get started you need to install Gulp on your machine via npm. - -```javascript -npm install gulp -g - -``` - -You also need it locally in your project, so you have to install it as a dependency in your project . - -```javascript -npm install gulp --save-dev - -``` - -You can split your tasks into various smaller sub-tasks and even split it up into smaller files. - -A basic Gulp task can look like this: - -```javascript -const gulp = require('gulp'); -// Requires the gulp-sass plugin -const sass = require('gulp-sass'); -const autoprefixer = require('gulp-autoprefixer'); -const cssnano = require('gulp-cssnano'); - -gulp.task('sass', function(){ - return gulp.src('app/scss/**/*.scss') // tell gulp where your source files are - .pipe(sass()) // Converts sass into css with the help of a gulp plugin called gulp-sass - .pipe(autoprefixer({browsers: ['last 2 versions']})) // auto prefixes the css for the last 2 versions of browser, like ie9 specific css - .pipe(cssnano()) // minify the css - .pipe(gulp.dest('app/css')) // tell gulp where to put the converted file. this is the first time where a file is written -}); - -``` - -You can now run this task simply by executing the following command in your terminal: - -```javascript -gulp sass -``` diff --git a/radar/2017-03-01/hal-hateoas.md b/radar/2017-03-01/hal-hateoas.md deleted file mode 100644 index 4cc2d04..0000000 --- a/radar/2017-03-01/hal-hateoas.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "HAL / HATEOAS" -ring: assess -quadrant: methods-and-patterns ---- - -Hypermedia As The Engine Of Application State or in short HATEOAS is a pattern that helps to organize dependencies and resources in a RESTful API. The basic idea of HATEOAS is that an API consumer do not have to know how dependencies of resources are connected and how to get them. A consumer must only be familiar with the basics of hypermedia. - -Let's assume we have a bank account and an action to deposit money on that account. Everything you need to know is that the account resource has an action for a deposit. The URL of that action can then fetched from the link attribute with the corresponding relation. - -``` - - 12345 - -25.00 - - -``` - -Besides from HATEOAS there is an alternative implementation called Hypertext Application Language, in short HAL, which has much more features than the basic HATEOAS. - -With HAL you are allowed to also define parametrized links, embedded resources and documentation relations (which are called curies). You can find the specification here. -[http://stateless.co/hal_specification.html](http://stateless.co/hal_specification.html) - -If you want to link different api endpoints or resource locations in your API responses you should use this standard. \ No newline at end of file diff --git a/radar/2017-03-01/hystrix.md b/radar/2017-03-01/hystrix.md deleted file mode 100644 index c5a16f7..0000000 --- a/radar/2017-03-01/hystrix.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Hystrix" -ring: assess -quadrant: tools ---- - -Hystrix is a very powerful library for handling failures, fallbacks and latency management within complex distributed environments. Netflix developed it and after years of experience, they are using it in almost each of their microservices. It evolved to a great library for handling resilience in complex architectures and covers solutions for the most common resilience patterns like: - -- Fail fasts -- Fail silent -- Circuit Breaker -- Fallbacks (Static, Stubbed) - -Beside from that purposes Hystrix also offers some helpful features like parallel and asynchronous execution, In-Request-Caching and other useful features for working with distributed systems. - -Another useful component that you are able to use with Hystrix is his dashboard that give you the ability of real time monitoring of external dependencies and how they behave. Alerting is also able via the dashboard. diff --git a/radar/2017-03-01/imgix.md b/radar/2017-03-01/imgix.md deleted file mode 100644 index a19a45a..0000000 --- a/radar/2017-03-01/imgix.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "imgix" -ring: assess -quadrant: platforms-and-aoe-services ---- - -[Imgix](https://www.imgix.com/) is an SaaS solution for delivering and processing images. When developing responsive websites, you will quickly reach the point where you need various versions of your images to achieve a good responsive user interface. You want high quality versions for retina displays but small versions for mobile devices with a slow Internet connection. - -Especially when dealing with user-generated uploads, it is getting hard to create different versions for any supported device and breakpoint of your web page. Doing this manually is hardly an option. - -At AOE, we decided to use imgix as an image processing service for some projects to solve this problem. The benefits of imgix are the simple API to create responsive images in real-time as well as the fast delivery over their CDN. diff --git a/radar/2017-03-01/infrastructure-as-code.md b/radar/2017-03-01/infrastructure-as-code.md deleted file mode 100644 index daaabe0..0000000 --- a/radar/2017-03-01/infrastructure-as-code.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Infrastructure as Code" -ring: adopt -quadrant: methods-and-patterns ---- - -Infrastructure as Code (IaC) describes the process of managing all infrastructure resources via code. Treating infrastructure code the same way we treat application code, we can benefit from the same advantages of having a history in our version control system, doing code reviews and rolling out updates via a Continuous Delivery pipeline in a way that closely approaches how we handle application deployments. - -Infrastructure code is often described in a declarative language und the target platforms figure out what to create, update or delete in order to get to the desired state, while doing this in a safe and efficient way. We've worked with [AWS CloudFormation](https://aws.amazon.com/de/cloudformation/) in the past, and while this is a great tool, you can only manage AWS resources with it and you need some more tooling around it in order to automate things nicely and embed it into other processes such as Jenkins Jobs. That's what we created [StackFormation](https://github.com/AOEpeople/StackFormation) for. Another tool that is actively developed is [Terraform](https://www.terraform.io/). Terraform comes with a lot of concepts that make managing environments easier out of the box and nicely embeds into other related tools. Also, Terraform allows you to manage a variety of different infrastructure providers. - -Infrastructure as code should cover everything from orchestration of your infrastructure resources, networking and provisioning as well as monitoring setup. The orchestration tools mentioned above are supplemented by other tools such as Puppet, Chef or simple Bash scripts that take over provisioning the instances after they are booted. diff --git a/radar/2017-03-01/jest.md b/radar/2017-03-01/jest.md deleted file mode 100644 index 68b9f99..0000000 --- a/radar/2017-03-01/jest.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Jest " -ring: assess -quadrant: tools -tags: [frontend, quality assurance] ---- - -[Jest](https://facebook.github.io/jest/) is a JavaScript testing framework by facebook to test JavaScript code **and** React applications / components. - -We started using Jest (and [watchmen](https://github.com/facebook/watchman)) instead of Karma because it: - -- gives us integrated mocking library -- gives us integrated support for testing "promises" -- gives us integrated code coverage report -- automatically runs tests related to changed files (instead of all tests) -- gives us parallel test execution -- gives us snapshot testing for React components - -It is easy to set up. -And even if you have a running setup with Karma/Chai you can easily replace Karma with Jest. -With a small [workaround](https://medium.com/@RubenOostinga/combining-chai-and-jest-matchers-d12d1ffd0303#.3callo273), Chai and Jest test matchers work fine together. diff --git a/radar/2017-03-01/job-dsl.md b/radar/2017-03-01/job-dsl.md deleted file mode 100644 index b50b73f..0000000 --- a/radar/2017-03-01/job-dsl.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Job DSL (Jenkins)" -ring: trial -quadrant: tools ---- - -The [Job DSL](https://wiki.jenkins-ci.org/display/JENKINS/Job+DSL+Plugin)is a plugin for the Jenkins automation server. Jenkins jobs that automate parts of a software project are usually configured using the web interface of Jenkins. If Jenkins is the choice for your project and the number of build jobs tend to grow, the Job DSL plugin is your friend. - -The plugin allows Jenkins jobs to be described by code (Groovy DSL). This code is then used for generating Jenkins jobs. As a consequence, job configuration can be part of the project's source code. During the generation step, existing jobs are synchronized, overwritten or left alone, depending on the configuration. The same configuration manages deleting or ignoring jobs that are not described in code anymore. Jobs can easily be restored in case of data loss and changed without clicking buttons for hours. The automation also makes it easy to seed large numbers of homogeneous components and builds on different branches. - -The ability to treat Jenkins jobs as code is a big advantage. We highly suggest that every team automate the setup of their jobs and their pipelines. Another way of expressing build pipelines as code is the new [Jenkins Pipeline](https://jenkins.io/doc/book/pipeline/) feature - but still we see the need of Job DSL seeder jobs to seed the Jenkins pipeline jobs themselves and any additional jobs. diff --git a/radar/2017-03-01/keycloak.md b/radar/2017-03-01/keycloak.md deleted file mode 100644 index 12b56c3..0000000 --- a/radar/2017-03-01/keycloak.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Keycloak" -ring: trial -quadrant: tools ---- - -User management, authentication, authorization and Single Sign-On are part of most distributed systems nowadays. Building these sensitive and serious parts on your own might be a problem due to knowledge- and budget restrictions. Because of growing requirements in that field (social logins, single sign-on, federation, two-factor authentication, etc.), as well as growing security concerns, building these things on your own has become more challenging during the past decade. - -As a consequence, the recommendation is: use an existing solution and connect it with your project's codebase using provided standards. Our recommended solution is the Open Source project JBoss Keycloak. 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. - -Keycloak is based on standards such as OAuth2, OIDC and SAML2. Securing a distributed system is supported by adapters, which are provided by the Keycloak developers for different technology stacks. If there is no adapter for your technology stack, an integration on protocol level with a library is simple. A lot of configurable features require no coding in the integrated projects. - -By design, the Keycloak project offers customizability and extensibility via so-called SPIs, e.g. a custom authenticator can be implemented to address project specific problems. - -Keycloak normally runs standalone and can use various database products. A docker image is available to start in a containerized environment. - -Keycloak might be overkill, depending on your project needs. For a simple integration with, for instance, a social login provider (Facebock, Twitter, etc.) Keycloak might be too much. For a JVM project, the pac4j library might be an alternative. If a cloud-based solution is preferred and data privacy concerns are not an issue, Auth0 might be the choice. diff --git a/radar/2017-03-01/kubernetes.md b/radar/2017-03-01/kubernetes.md deleted file mode 100644 index 61b795f..0000000 --- a/radar/2017-03-01/kubernetes.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Kubernetes" -ring: assess -quadrant: platforms-and-aoe-services -tags: [academy training, devops] ---- - -Kubernetes is a container orchestration platform that supports many infrastructure providers. It enables you to deploy containers and manages the running, scaling, or self-healing of your applications based on configurations you provide. It is built on years of knowledge and experience gained by Google through its use of containers. - -At AOE, we initially implemented Kubernetes in a test environment on bare metal to experiment with its capabilities. Currently, it is utilized for running internal AOE applications such as dashboards and for running builds in containers. We have also begun using it for upcoming projects to manage several services. There are tools available to automate the setup of Kubernetes in AWS, such as [Cops](https://kubernetes.io/docs/getting-started-guides/kops/). Another helpful tool is [Minikube](https://github.com/kubernetes/minikube), which allows for testing and running Kubernetes locally. diff --git a/radar/2017-03-01/maintain-third-party-packages.md b/radar/2017-03-01/maintain-third-party-packages.md deleted file mode 100644 index 8521e90..0000000 --- a/radar/2017-03-01/maintain-third-party-packages.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Maintain third party packages" -ring: hold -quadrant: platforms-and-aoe-services ---- - -Rebuilding and packaging software from "third parties" (e.g. PHP, MySQL, Redis, Nginx, Java,...) implies starting to maintain the packaging for the desired distribution. - -Even with tool support and targeted for automation, we found that building those packages is very often unstable. The effort to keep up with the upstream changes (security changes, fixes, etc...) exceeds the benefit in most cases. We prefer to not create our own packages and rather use what's available in the distribution repository. diff --git a/radar/2017-03-01/microservices.md b/radar/2017-03-01/microservices.md deleted file mode 100644 index 6b5e03c..0000000 --- a/radar/2017-03-01/microservices.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Microservices" -ring: trial -quadrant: methods-and-patterns ---- - -Microservices as an architecture style is getting very popular recently. At AOE, more and more teams are adding microservices to their existing application architecture or designing applications with microservices. - -We also like the term "self-contained systems" instead of microservices. - -The benefits we see are: - -* better handling of complexity compared to adding features in a monolithic approach -* being able to use the languages and framework that best fit the purpose of the service -* enabling better parallel work in big teams or multi-team projects -* flexibility in deploying changes to production - by just deploying the changed service - -Related patterns are [Strategic Domain Driven Design](/methods-and-patterns/strategic-domain-driven-design/) as an approach to wisely cut your architecture according to useful bounded contexts and decide on the relevant communication and "translation" between the services. -In case you are looking for a small visualisation tool for your microservice architecture you might find [vistecture](https://github.com/AOEpeople/vistecture/) useful. - -Also [Resilience thinking](/methods-and-patterns/resilience-thinking/) is especially important when designing an application as a suite of microservices. diff --git a/radar/2017-03-01/neo4j.md b/radar/2017-03-01/neo4j.md deleted file mode 100644 index ef4acc9..0000000 --- a/radar/2017-03-01/neo4j.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Neo4j" -ring: assess -quadrant: platforms-and-aoe-services ---- - -Neo4j is one of the oldest Open Source Graph Databases. It's one of the rare NoSQL databases that is fully ACID-compliant. We see two main advantages of graph databases: - -* for a lot of domains there is a natural way of modeling this in a graph (the Neo4j website says "everything is a graph"), -* and querying relations between nodes is very efficient in a graph database. - -Neo4j database is implemented in Java and can therefore be embedded in your application if you live on the JVM. - -You can also choose to run it in a classic server mode, which then provides you with the possibility to either use its REST API or connect to it via the BOLT Driver, which has native bindings for the most popular languages. - -The cypher query language which comes with Neo4j is a declarative graph query language that allows for expressive and efficient querying and updating of the graph. - -At AOE, we use Neo4j mostly for explorative, interactive work with weakly structured or highly connected data, also we are evaluating this for knowledge-based recommendations in our [Searchperience](http://www.searchperience.de/home.html) product. diff --git a/radar/2017-03-01/node-js.md b/radar/2017-03-01/node-js.md deleted file mode 100644 index ffe5905..0000000 --- a/radar/2017-03-01/node-js.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "node.js" -ring: trial -quadrant: languages-and-frameworks ---- - -Node.js is a no- browser JavaScript execution runtime. Its basis is Google's V8 engine. [Node](https://nodejs.org/en/) is event-driven and follows a non-blocking I/O model. - -It’s a good choice for restful APIs, realtime purposes or situations where many concurrent connections are expected, where each connection has a lightweight memory footprint. - -Node allows separation of concerns by using its package manager [npm](https://www.npmjs.com/), which is also the largest ecosystem of Open Source libraries (modules). - -Modules are added as dependencies and offer a wide range of functionalities in a range from simple helper functions to mature web frameworks such as [express.js](http://expressjs.com/de/). - -Many PaaS providers (AWS, Google Cloud Platform, Azure) support node, including deployment and monitoring services out of the box for scalable stateless applications. - -At AOE, we successfully use node.js-based applications for smaller services or internal tools such dashboards. diff --git a/radar/2017-03-01/npm.md b/radar/2017-03-01/npm.md deleted file mode 100644 index 6e3e333..0000000 --- a/radar/2017-03-01/npm.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: "npm" -ring: adopt -quadrant: tools ---- - -[npm](https://www.npmjs.com/) is one of, if not the most, popular package manager for JavaScript. Because of the big community, you can find nearly every dependency in npm. - -Instead of other package managers such as [bower](/tools/bower/), you have to write your packages as [modules](https://en.wikipedia.org/wiki/CommonJS). This unifies the way you have to use, test and, of course, understand dependencies. - -npm creates a tree for your dependencies and their nesting dependencies. Because of this, you don't need to handle version conflicts, since every dependency uses there own version of e.g. [webpack](/tools/webpack/). - -With [shrinkwrap](https://docs.npmjs.com/cli/shrinkwrap) you have a robust tool to lock down and manage the versions of your dependencies - following the [Pin (external) dependencies](/methods-and-patterns/pin-external-dependencies/) approach. - -For each package you have to classify your dependencies: - -- dependencies are needed for use without the need of pre compiling, e.g. [lodash](https://lodash.com/) -- devDependencies are needed for development only, e.g. testing frameworks or pre compiler e.g. [babel](/languages-and-frameworks/babel/) -- peerDependencies you have to provide for using the package - -With [scripts](https://docs.npmjs.com/misc/scripts) you get support for the most common build lifecycle steps, e.g. build, start, test ... - -Other useful features: - -- mirror support for your own repository (e.g. [artifactory](/platforms-and-aoe-services/artifactory/)) -- can be used for server and client JavaScript development (see [node.js](/languages-and-frameworks/node-js/) ) diff --git a/radar/2017-03-01/oro-platform.md b/radar/2017-03-01/oro-platform.md deleted file mode 100644 index 0a3c76c..0000000 --- a/radar/2017-03-01/oro-platform.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Oro Platform" -ring: assess -quadrant: tools ---- - -OroPlatform is a framework built on Symfony 2 with the purpose of providing the features you need in every business application that is not your core business logic. Hence, it serves you with a basic application, providing login and complex security, menus and menu management, history, audit trails, settings management, etc. It comes complete with a design and many widgets to be utilized in own entities. Other Features of OroPlatform are, for example, a WebSocket server-driven user interface, queue-based task runners, REST Interface, as well as messaging- and workflow systems. - -One of the central features is that entities, which are to be managed within the system, can be set up completely by configuring them using the UI. This in itself implies that it puts another abstraction layer upon doctrine and symfony defaults. - -As with every framework or application, the general-purpose goals and abstraction comes with drawbacks: In fact, OroPlatform modifies and extends the common way of doing things in Symfony in several places, which makes the developer's life hard at times. Also, the UI and package managing are set in such a way that they are hard to extend or replace. The many additional abstraction layers can result in decreased performance. - -On the other hand, OroPlatform gives you a good head start for prototyping and frees you from rebuilding common requirements - which makes it a relevant choice for business applications with the need to manage several entities in a backend. Also, projects such [Akeneo](/tools/akeneo/) or OroCRM use OroPlatform with success. - -Since the project is still young, the future development and improvements need to be watched. We classified the Framework as ***Assess***. diff --git a/radar/2017-03-01/pair-working.md b/radar/2017-03-01/pair-working.md deleted file mode 100644 index 713f7f9..0000000 --- a/radar/2017-03-01/pair-working.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Pair Working" -ring: trial -quadrant: methods-and-patterns -tags: [agile, coding, devops] ---- - -We have summarized the practices of pair programming and administrating as pair working. - -Derived as a practice from eXtreme Programming (XP), pair programming is a practice that aims for fine-grained feedback within a team. - -At AOE, some developers and operators work in pairs, not constantly, but from time to time. Most teams have positive experiences using this method, but not all teams have tried the by-the-book approach (e.g., driver/navigator pattern). Especially for non-trivial tasks, pair working leads to rapid knowledge sharing and better results with fewer bugs. We encourage the teams to try this approach more often. - -By incorporating pair working into regular routines, teams can improve collaboration and boost productivity. In addition, this practice can help foster a culture of continuous learning and mutual support within the organization. diff --git a/radar/2017-03-01/phan.md b/radar/2017-03-01/phan.md deleted file mode 100644 index 470758f..0000000 --- a/radar/2017-03-01/phan.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "phan" -ring: assess -quadrant: tools ---- - -Phan is a static code analyzer for PHP7, which is very fast, since it uses the PHP 7 AST (abstract syntax tree). Phan basically offers some of the safety that otherwise only compiled type-safe languages have - such as checking function references and return types. - -We expect at least the following benefits: - -- Decreased bug density; possible bugs and issues are found early -- Safer code and higher code quality - -We think Phan can be used in the deployment pipeline or as commit hooks for PHP 7-based applications. For a full Feature list check [here](https://github.com/etsy/phan#features). diff --git a/radar/2017-03-01/php7-over-php5.md b/radar/2017-03-01/php7-over-php5.md deleted file mode 100644 index 911352c..0000000 --- a/radar/2017-03-01/php7-over-php5.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "PHP7 over PHP5" -ring: adopt -quadrant: languages-and-frameworks ---- - -PHP 5 has been around for a very long time, and can be considered as the PHP version that defined where PHP wants to go in the future. -With proper OOP, support for clojures and a steadily improving type system, it has become a very mature language. -However, in the past 3 years, Facebook introduced HHVM, which became a major influence on PHP 7 and eventually brought a lot of improvements not only for the execution speed, but also with proper type hints and other features. - -Here at AOE, we have numerous PHP projects, and we often kept it backwards-compatible to make sure that it will run on older systems. This is comparable to the procedure most frameworks (Magento, OroPlatform and derived projects) use. - -Now, PHP 5 has reached its end--of-life, and it is time to discontinue the backwards-compatibility in favor of better and more stable applications. -Even though we can use the PHP 7 runtime while being PHP 5-compatible, it is not considered good practice anymore, as we can now rely on the PHP 7 features and use all of its advantages. - -One of the major points PHP 7 supports is proper type hinting and return types (apart from PhpDocs), which makes [static analysis](/tools/phan/) much easier and can improve the overall code quality significantly. diff --git a/radar/2017-03-01/pin-external-dependencies.md b/radar/2017-03-01/pin-external-dependencies.md deleted file mode 100644 index 07b70d6..0000000 --- a/radar/2017-03-01/pin-external-dependencies.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: "Pin external dependencies" -ring: adopt -quadrant: methods-and-patterns ---- - -A lot of applications have dependencies on other modules or components. We have -used different approaches regarding how and when these dependencies are resolved -and have agreed on using a method we call "Pin (External) dependencies". - -This is especially relevant for script languages, where the dependency -management references the code and not immutable prebuild binaries - and -therefore resolves the complete transient dependencies on the fly. - -Most of these package- or dependency management solutions support two artefacts: - -* a semantic dependency definition. This defines the compatible versions of the - required dependencies. (Composer: composer.json / npm: package.json) -* a lock file defining the exact revisions of the dependencies and the transient - dependencies (dependencies of dependencies). This is created after running the - tool. (Composer: composer.lock / npm: npm-shrinkwrap.json / yarn: yarn.lock). - -We suggest the following: - -* Keep the dependency definition AND the lock file in version control. This - ensures that chained dependencies are also locked and you have changes of that - file visible in your version control commit history. This helps finding issues - or bugs that might relate to unintended updates in external modules or - transient dependencies. -* Build Step: The application build step should use the the pinned versions - (with the help of the lock file) to ensure that the same revisions of the - dependent packages are used. -* It's also suggested to use local or central caches for the retrieval of - packages. (E.g. - [artifactory as composer and npm cache](/platforms-and-aoe-services/artifactory/)) - -For updating of dependencies define a process in the team. This can either be -done on the dev-system or in a separate automated CI job - both resulting in -updated dependency definitions in the applications VCS. diff --git a/radar/2017-03-01/pipeline-as-code.md b/radar/2017-03-01/pipeline-as-code.md deleted file mode 100644 index 8532585..0000000 --- a/radar/2017-03-01/pipeline-as-code.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Pipeline as Code" -ring: assess -quadrant: methods-and-patterns ---- - -Continuous Integration and Delivery is a critical part of our development and deployment process at AOE. Using Jenkins for many years the "instructions" how to build, test and deploy applications were scattered between many custom scripts and the pipeline was often maintained by manual maintenance of Jenkins jobs. Soon, we realized that we need a more native way to express the full CI/CD pipeline process in code and manage it in version control. - -Being an important part of each project, the pipeline configuration should be managed as code and rolled out automatically - this also allows us to manage the pipeline itself applying the same standards that apply to application code. - -While some teams started using Jenkins' [JobDSL plugin,](https://wiki.jenkins-ci.org/display/JENKINS/Job+DSL+Plugin) others explored the new [Jenkins Pipeline](https://jenkins.io/doc/book/pipeline/) - in both ways, the build artifacts should be published to an artifact repository such as [Artifactory](/platforms-and-aoe-services/artifactory/). diff --git a/radar/2017-03-01/play-framework.md b/radar/2017-03-01/play-framework.md deleted file mode 100644 index 86d0f7e..0000000 --- a/radar/2017-03-01/play-framework.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Play Framework" -ring: adopt -quadrant: languages-and-frameworks ---- - -The Play Framework is a lightweight (web)application framework for Java and [Scala](/languages-and-frameworks/scala-lang/) programmers. - -A developer can choose from different modules to include necessary functionality such s accessing http resources, databases, and so on. As a consequence, the developer can choose, and is not distracted by or clobbered with irrelevant things. This approach is considered as minimalistic, but it is easy to include necessary functionality. - -Regarding the architecture, Play is stateless and built on Akka. As a consequence, Play applications have much lower resource consumption regarding CPU und memory and can scale easily. Play manages concurrency without binding a request to a thread until the response is ready. - -With the use of "[Futures](http://docs.scala-lang.org/overviews/core/futures.html)" in your code you can turn synchronous tasks (such as IO or API call to another service) into asynchronous and you can build non-blocking applications. It is recommended to understand the principles Play uses to achieve performance and scalability. - -Play can act as backend service delivering JSON, for example. For building web applications. The [Twirl](https://www.playframework.com/documentation/2.5.x/ScalaTemplates) template engine enables server-side rendering of HTML pages. These HTML pages can include CSS and JavaScript parts of your own choice. diff --git a/radar/2017-03-01/postcss.md b/radar/2017-03-01/postcss.md deleted file mode 100644 index 30a59d3..0000000 --- a/radar/2017-03-01/postcss.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "PostCSS" -ring: adopt -quadrant: tools ---- - -PostCSS is a tool for transforming stylesheets with JavaScript plugins. It comes with a parser that reads your CSS file into an AST, pipes it through the loaded plugins and finally stringifies it back into a (transformed) CSS output file. - -We at AOE love PostCSS because it gives us the power to use [CSS Modules](https://github.com/css-modules/css-modules), which finally ends the curse of global CSS. - -It also has a huge list of more than 350 other [available plugins](http://postcss.parts/). -Sure, not all of them are useful, but the sheer number of plugins shows how easy it is to write your own plugin for it. -In fact, it´s just a matter of writing a single JS function. - -Finally, PostCSS is very fast and easy to setup because it runs 100% in JavaScript. -Compared to [Sass](/languages-and-frameworks/sass/) as a preprocessor, it feels much more powerful but at the same time less bloated with superfluous functionality because everything comes in its own little plugin diff --git a/radar/2017-03-01/protobuf.md b/radar/2017-03-01/protobuf.md deleted file mode 100644 index c71beac..0000000 --- a/radar/2017-03-01/protobuf.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Protobuf" -ring: assess -quadrant: languages-and-frameworks ---- - -In an increasingly microservice-oriented environment, it is crucial that all parties agree on a common language and wire format for data exchange. - -JSON and XML are two well-known formats for serialization of data; however, they come with a few drawbacks. JSON is completely dynamic without any validation (though there is json-schema) and XML uses an extremely heavyweight syntax, which carries a huge overhead, so parsing and transport becomes quite slow. - -Protobuf, amongst others, is an approach to solving this problem by using well-defined schemas to create language-specific code, which serializes/marshals and deserializes/unmarshals data. One of the key features is the built-in support for evolving schemas; it is easily possible to incrementally extend the definition while staying backwards-compatible and compose messages consisting of several sub-messages. - -If you are looking for a way to have different systems agree on a common protocol on top of a transport layer (such as AMQP or HTTP), Protobuf is definitely worth examining more closely and should be assessed. diff --git a/radar/2017-03-01/puppet.md b/radar/2017-03-01/puppet.md deleted file mode 100644 index 6b2f0ee..0000000 --- a/radar/2017-03-01/puppet.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Puppet" -ring: assess -quadrant: platforms-and-aoe-services ---- - -Puppet is an Open Source configuration management tool. It is used by a wide range of different companies world-wide, e.g. the Wikimedia Foundation, Mozilla, Reddit, CERN, Dell, Rackspace, Twitter, the New York Stock Exchange, PayPal, Disney, Citrix Systems, Spotify, Oracle, the University of California Los Angeles, the University of North Texas, QVC, Intel, Google and others. - -Puppet has been the basic tool to address Continuous Configuration Automation (CCA) in AOE's [Infrastructure as Code](/platforms-and-aoe-services/infrastructure-as-code/) strategy (IaC) for more than 4 years. diff --git a/radar/2017-03-01/rabbitmq.md b/radar/2017-03-01/rabbitmq.md deleted file mode 100644 index 7be8693..0000000 --- a/radar/2017-03-01/rabbitmq.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "RabbitMQ" -ring: trial -quadrant: tools ---- - -RabbitMQ is an Open Source message broker - implementing the Advanced Message Queuing Protocol (AMQP) protocol. It provides a reliable and scalable way to transport data between loosely coupled applications, using different EAI patterns such as the Publish & Subscriber pattern. AMQP supports direct and fan-out exchanges (broadcasts) as well as topics. Queuing mechanisms allow for robust architectures, mitigating the risks of application downtimes. Typically, a RabbitMQ server can easily buffer millions of messages. RabbitMQ supports JMS in addition to AMQP. It is not intended to use JMS for new systems, but it makes RabbitMQ useful for integrating legacy systems. - -There are several alternative solutions to RabbitMQ, e. g. the free Apache ActiveMQ, which is integrated in [Anypoint platform](/tools/anypoint-platform/). ActiveMQ implements a somewhat simpler routing concept than RabbitMQ, but offers more protocols. Commercial products in this area are offered by IBM (Websphere MQ), Fiorano and almost every vendor of ESB products. - -We use RabbitMQ internally for transferring messages safely in our logging ecosystem between [Logstash](/platforms-and-aoe-services/elk-stack/) proxies and servers using direct and fan-out exchanges for delivering messages to appropriate destinations. RabbitMQ is also used to asynchronously trigger Jenkins jobs from our SCMs to mitigate heavy load on the SCMs, usually caused by Jenkins polls for SCM changes. Additionally, some critical events for monitoring are using RabbitMQ for guaranteed notification. - -RabbitMQ is rated "Trial". It fits into our approach to build robust, [resilient systems](/methods-and-patterns/resilience-thinking/) and use [asynchronous messages](/methods-and-patterns/decoupling-via-messaging/) for loosely coupled communications between components. In practice, RabbitMQ proved to be stable and dealt well with service interruptions from failures and maintenance slots. A common pain point is RabbitMQ as a single point of failure disrupting the data flow in a system. This issue is currently approached by setting up a HA cluster for RabbitMQ. The outcome of this approach will clarify the extent of future usage of RabbitMQ in our systems. diff --git a/radar/2017-03-01/raml.md b/radar/2017-03-01/raml.md deleted file mode 100644 index 377fa02..0000000 --- a/radar/2017-03-01/raml.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "RAML" -ring: adopt -quadrant: tools ---- - -[RAML](http://raml.org/) (the RESTful API Modelling Language) is a YAML-based API specification language. It's now available in [version 1.0](https://github.com/raml-org/raml-spec/blob/master/versions/raml-10/raml-10.md#defining-types). The philosophy behind it is to [specify the API before implementation](/methods-and-patterns/api-first-design-approach/). - -If you follow this philosophy, you can design your API and discuss it with your clients and team before implementing a single line of code. API consumers are able to implement against the API before it's really up and running. The [api-console](https://github.com/mulesoft/api-console) provides a beautiful online documentation with "try it" features for your raml definition. - -The RAML ecosystem provides a rich toolset for code generation (e.g. [online editor](http://rawgit.com/mulesoft/api-designer/master/dist/index.html#/?xDisableProxy=true);[ api-workbench](http://apiworkbench.com/)), automatically generated documentation, code generation (e.g. [go-raml](https://github.com/Jumpscale/go-raml)), mocking, testing and much more. We prefer RAML over Swagger because of this. diff --git a/radar/2017-03-01/react.md b/radar/2017-03-01/react.md deleted file mode 100644 index 973218e..0000000 --- a/radar/2017-03-01/react.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "React.js" -ring: trial -quadrant: languages-and-frameworks ---- - -React claims to be "the V in MVC". But for us it is much more than that. React -improved the way we approach frontend applications as we build them. Its -functional way of writing components and its declarative JSX syntax help us to -build interactive UIs very efficiently. React's one-way data flow keeps -everything modular and fast and makes even large applications more readable. - -Components are the central point of React - once we fully started -[thinking in react](https://facebook.github.io/react/docs/thinking-in-react.html), -our components became smaller, more reusable and better testable. - -After some 1.5 years of experience with React and the steady growth of the -community and ecosystem around it, we can confidently say that we still see -great potential to build upcoming projects with React. diff --git a/radar/2017-03-01/redux.md b/radar/2017-03-01/redux.md deleted file mode 100644 index 6910e7f..0000000 --- a/radar/2017-03-01/redux.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Redux" -ring: trial -quadrant: languages-and-frameworks ---- - -[Redux](http://redux.js.org/) helps us to maintain state in our frontend applications in a more predictable and clearer way. It is extendable though middleware, it has a great documentation and some awesome [devtools](https://github.com/gaearon/redux-devtools) that are especially helpful when you are new to Redux. - -The functional concepts for updating the state, combined with immutable data, lead to extremely easy and enjoyable [unit tests](http://redux.js.org/docs/recipes/WritingTests.html) - this is maybe the biggest plus for us developers. - -The official [react-redux bindings](https://github.com/reactjs/react-redux) also made it straightforward to weave Redux into our React applications. For asynchronous actions we use [redux-sagas](https://redux-saga.github.io/redux-saga/) which has proven itself as a better alternative for [redux-thunk](https://github.com/gaearon/redux-thunk). - -Currently, we use Redux only in our React projects, but we are evaluating it together with other frameworks such as Angular or Vue.js, as well. diff --git a/radar/2017-03-01/resilience-thinking.md b/radar/2017-03-01/resilience-thinking.md deleted file mode 100644 index 7f2f922..0000000 --- a/radar/2017-03-01/resilience-thinking.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Resilience Thinking" -ring: trial -quadrant: methods-and-patterns -tags: [architecture] ---- - -Resilience is the capability of an application or service to resist different error scenarios. Especially for distributed systems - where a lot of communication between different services happen - it's very important to explicitly think of implementing resilience. - -There are a lot of different resilience patterns and it is also a matter of the overall software design. Typical patterns and methods used are: - -* Do not hide API calls or any other external communication in your application (for example with unnecessary abstraction) - instead make it explicit that an external communication happens - e.g. by using the Facade Pattern. On the one hand, this makes it obvious that a potential slow and error prone communication is going to happen, and it makes it easier to implement error handling. -* Detect errors explicitly: Check the response message format and configure proper timeouts for external communication -* Handle errors in a smart way: Show a nice error message to your customer or, even better, graceful degrade features - e.g. by showing some fallback text -* Use Message-based communication where useful ([Decoupling via Messaging](/methods-and-patterns/decoupling-via-messaging/)) -* Use Circuit Breaker to Isolate errors and allow system to recover -* Use short activation paths in your strategic architecture - so that there is only a minimal set of communications between your services required for certain features or business requests - -"Embrace Errors" should be the mindset - because it is not a question if errors appear - it's just a question of when. diff --git a/radar/2017-03-01/rest-assured.md b/radar/2017-03-01/rest-assured.md deleted file mode 100644 index 7590725..0000000 --- a/radar/2017-03-01/rest-assured.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "REST Assured" -ring: assess -quadrant: tools ---- - -**[REST Assured](https://github.com/rest-assured/rest-assured)** is a Java DSL for simplifying testing of REST-based services built on top of HTTP Builder. -It supports the most important HTTP request methods and can be used to validate and verify the response of these requests. - -At AOE, we use REST Assured with Spock to automate our API testing. -We appreciate the easy-to-use DSL, which uses the Given-When-Then template (also known as Gherkin language). -This template helps other project members to understand the code/test easily. - -Because of the seamless integration with Spock and our positive experience in one of our major projects, we classify REST Assured as *assess.* diff --git a/radar/2017-03-01/rxjava.md b/radar/2017-03-01/rxjava.md deleted file mode 100644 index 9c208b6..0000000 --- a/radar/2017-03-01/rxjava.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "RxJava" -ring: trial -quadrant: tools -tags: [coding, architecture] ---- - -[RxJava](https://github.com/ReactiveX/RxJava) is the Open Source Java implementation of ReactiveX. The main concept heavily relies on the Observer- (and Subscriber)-Pattern. An Observer emits a stream of data, which can be consumed by Subscribers. The Subscriber reacts (That's where the 'Rx' comes from) asynchronously to those data events. Reactive Extensions were originally developed by Mircosoft's Erik Meijer and his team and have been ported to all major programming languages after being released to the public as Open Source software. We use RxJava (but actually RxAndroid to be precise) in the Congstar Android App to let the UI layer react to changes in the underlying data layer. diff --git a/radar/2017-03-01/rxjs.md b/radar/2017-03-01/rxjs.md deleted file mode 100644 index 0ca1fca..0000000 --- a/radar/2017-03-01/rxjs.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "RxJs" -ring: trial -quadrant: languages-and-frameworks ---- - -RX/JS aka reactive streams - -RxJS is an implementation for the reactive programming paradigm which implements mostly the observer and iterator pattern and follows the functional programming ideas. -The pattern actually got a renaissance because it's not completely new but has new implementations in many frameworks and languages like Angular, Akka, Spring and many more. - -Reason for that attention actually is (in the JavaScript world), that observables can be cancelled (by rules too) and observables can pass (stream) data on multiple events. -Both aspects are not well realizable using promises e.g. and both were also detected as a huge limitation in the JavaScript community — and so it's worth to get an understanding for reactive programming in general. - -We at AOE actually use RxJS in combination with Angular and think that it's worth to dive deeper into this paradigm. diff --git a/radar/2017-03-01/sass.md b/radar/2017-03-01/sass.md deleted file mode 100644 index 685e993..0000000 --- a/radar/2017-03-01/sass.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: "Sass" -ring: adopt -quadrant: languages-and-frameworks ---- - -Sass (Syntactically Awesome Style-Sheets) is an extension to native CSS, which, as a preprocessor, simplifies the generation of CSS by offering features that enable developers to more efficiently write robust, better readable and maintainable CSS. - -Core features of Sass are: - -* Nesting of rules: CSS rules can be indented, reducing redundancy of selectors and increasing readability due to shorter selectors. -* Use of variables: Commonly-used values such as colors can be stored in variables -* Mixins: Often-used CSS blocks can be referenced by using mixins, which work like functions -* Extends: CSS properties can be inherited -* Sass files can be split into modules, which leads to smaller files and better file structures -* Operators: Simple math calculations can be applied to CSS properties -* Easily to integrate in nodejs-environments and build tools such as [npm](/tools/npm/), [Gulp](/tools/gulp/) and [Grunt](/tools/grunt/). - -Sass has been widely adopted for many years and has evolved to an industry-standard backed by an active community since 2006. - -The learning curve is very smooth as Sass is fully compatible to CSS, meaning that all features are optional: -Starting with Sass is as easy as renaming .css-files to .scss in a first step and then refactoring it step-by-step with the use of Sass features. - -At AOE, Sass has been recommended by the frontend COI and is used in nearly every current project. - -More information: - -* [Sass Language](http://sass-lang.com/) -* [SassDoc](http://sassdoc.com/) -* [Improving Sass code quality on](https://www.theguardian.com/info/developer-blog/2014/may/13/improving-sass-code-quality-on-theguardiancom) [theguardian.com](http://theguardian.com) \ No newline at end of file diff --git a/radar/2017-03-01/scala-lang.md b/radar/2017-03-01/scala-lang.md deleted file mode 100644 index 9b9772f..0000000 --- a/radar/2017-03-01/scala-lang.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Scala Lang" -ring: trial -quadrant: languages-and-frameworks ---- - -Besides Java, Scala is the most mature language on the Java Virtual Machine. Its unique blend of object-oriented and functional language features and rich type system with advanced type inference enables one to write concise code. - -It is fully interoperable with Java but has a big ecosystem of tools and frameworks on its own. - -Scala provides one of the best high-level concurrency- and async features on the language level as well as on the framework level, making it the default choice of twitter and the like. - -At AOE, we already use Scala in various projects to create scalable backend systems (Play, Akka) or for batch processing (Spark). \ No newline at end of file diff --git a/radar/2017-03-01/settings-injection.md b/radar/2017-03-01/settings-injection.md deleted file mode 100644 index 6573432..0000000 --- a/radar/2017-03-01/settings-injection.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Settings Injection" -ring: adopt -quadrant: methods-and-patterns ---- - -While deploying applications to an environment, the application typically needs to be configured for that specific environment. Typical settings include domain names, database credentials and the location of other dependent services such as cache backends, queues or session storages. - -These settings should not be shipped with the build package. Instead, it's the environment - this build is being deployed to - that should expose these values to application. A common way to "inject" these values is by making them available as environment variables or dynamically creating configuration files for the application. You can achieve this pattern without special tools - but this concept of settings injection also works with tools such as [Consul](/tools/consul/), [kubernetes](/platforms-and-aoe-services/kubernetes/) (with configMaps and secrets) or [YAD](https://github.com/AOEpeople/YAD). - -In this manner, the build package can be independent of the environment it's being deployed to - making it easier to follow the "Build once, deploy often" CI/CD principle. diff --git a/radar/2017-03-01/sparkpost.md b/radar/2017-03-01/sparkpost.md deleted file mode 100644 index 3d14ff3..0000000 --- a/radar/2017-03-01/sparkpost.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "SparkPost" -ring: assess -quadrant: platforms-and-aoe-services ---- - -Sparkpost is an SaaS service for E-Mail delivery and E-Mail templating that can be used to send E-Mails by calling an API. - -In a lot of projects, it is a typical requirement that different E-Mails need to be sent and that the project stakeholders want to adjust E-Mail templates and content on a relatively regular basis. - -Also, (mass) sending E-Mails and avoiding that they are classified as Spam is not an easy topic. That's why we decided to use E-Mail delivery services in our projects and evaluated different providers. - -We decided to start using SparkPost because of pricing, feature set and the available reviews on the Internet. However, there are other possible solutions such as SendGrid or Postmark. diff --git a/radar/2017-03-01/spock_geb.md b/radar/2017-03-01/spock_geb.md deleted file mode 100644 index 54469be..0000000 --- a/radar/2017-03-01/spock_geb.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Spock + Geb" -ring: adopt -quadrant: languages-and-frameworks ---- - -[spockframework.org](http://www.spockframework.org) - Spock is a testing and specification framework for Java and Groovy applications. What makes it stand out from the crowd is its beautiful and highly expressive specification language. Thanks to its JUnit runner, Spock is compatible with most IDEs, build tools and continuous integration servers. Spock is inspired from JUnit, jMock, RSpec, Groovy, Scala, Vulcans, and other fascinating life forms. - -[gebish.org](http://www.gebish.org) - Geb is a browser automation solution. It brings together the power of WebDriver, the elegance of jQuery content selection, the robustness of Page Object modelling and the expressiveness of the Groovy language. It can be used for scripting, scraping and general automation or as a functional/web/acceptance testing solution via integration with testing frameworks such as Spock, JUnit & TestNG. - -At AOE, we use Spock in combination with Geb in various projects for black-box testing. Mainly, we implement our functional integration and acceptance testing automation with these frameworks, which work together seamlessly. And, we also like the convenience of extending the tests with Groovy built-ins or custom extensions. - -Because of the successful use in two of our large projects and the wide range of opportunities within the testing domain with Spock and Geb, we classify this combo with adopt. - - diff --git a/radar/2017-03-01/spring-boot.md b/radar/2017-03-01/spring-boot.md deleted file mode 100644 index a4ca3cf..0000000 --- a/radar/2017-03-01/spring-boot.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Spring Boot" -ring: assess -quadrant: languages-and-frameworks ---- - -With Spring Boot you create standalone Spring Applications with minimum configuration. [Spring Boot](https://projects.spring.io/spring-boot/) rapidly gets you up and running for production. - -With an embedded Tomcat, Jetty and Undertow you have everything you need to deploy your application out-of-the-box. - -The Spring Cloud ecosystem also gives you a lot of extension points for developing, deploying and running cloud applications. - -It's based on the rock-solid Spring framework and provides excellent documentation. - -At AOE, we use Spring Boot in a microservice architecture. Together with Groovy as the implementation Language, and some other Tools (Spring Security, Cloud, HATEOAS, Data, Session) from the Spring environment, we are able to create complex and powerful applications in no time. diff --git a/radar/2017-03-01/spring-rest-docs.md b/radar/2017-03-01/spring-rest-docs.md deleted file mode 100644 index c6a8d23..0000000 --- a/radar/2017-03-01/spring-rest-docs.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Spring REST Docs" -ring: assess -quadrant: tools ---- - -[Spring REST Docs](https://projects.spring.io/spring-restdocs/) auto generates [Asciidoctor](http://asciidoctor.org/) snippets with the help of [Spring MVC Test](http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle#spring-mvc-test-framework) or [RestAssured](/tools/rest-assured/). -So you can be sure that your tests are inline with the documentation. - -At AOE, we use [Spring REST Docs](https://projects.spring.io/spring-restdocs/) to document our Rest Services and Hal Resources. -We also use it to auto generate [WireMock](/tools/wiremock/) Stubs, so the consumer of the service can test against the exact API of the service. diff --git a/radar/2017-03-01/strategic-domain-driven-design.md b/radar/2017-03-01/strategic-domain-driven-design.md deleted file mode 100644 index 1b2c750..0000000 --- a/radar/2017-03-01/strategic-domain-driven-design.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Strategic Domain Driven-Design" -ring: adopt -quadrant: methods-and-patterns -tags: [academy training, architecture] ---- - -Designing distributed applications needs to be done wisely. Strategic Domain-Driven Design (DDD) is an approach for modeling large-scale applications and systems, introduced in the latter part of Eric Evans' book *Domain-Driven Design*. - -Domain-Driven Design is a well-known pattern family that has been established at AOE for quite some time now. Unlike Domain-Driven Design, which focuses on the tactical design in an application, Strategic Domain-Driven Design is an approach that is very helpful for the high-level strategic design of an application and distributed software architecture. - -It is a pattern family focused on using and defining Bounded Contexts and thinking explicitly about the different relationship patterns and the required "translation" of similar "concepts" between the bounded contexts. It is helpful to argue for and find a good strategic architecture in alignment with the requirements, the domain, and by considering Conway's Law. A context map and a common conceptual core help to understand and improve the overall strategic picture. Especially with the microservices approach, it is important to define and connect services following the high cohesion - low coupling principles by identifying fitting bounded contexts. - -The following chart gives an overview of possible relationships between bounded contexts: -![strategic-domain-driven-design-relationships](/images/strategic-domain-driven-design-relationships.png) - -While we have found that this approach is especially useful in designing distributed systems and applications with [microservices](/methods-and-patterns/microservices/), we have also extended this approach to provide guidelines for general enterprise architectures. diff --git a/radar/2017-03-01/styleguide-driven-development.md b/radar/2017-03-01/styleguide-driven-development.md deleted file mode 100644 index 9096d6f..0000000 --- a/radar/2017-03-01/styleguide-driven-development.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Styleguide Driven Development" -ring: trial -quadrant: methods-and-patterns ---- - -The goal of Styleguide Driven Development is to develop your application user Interface independently and reusable in a Pattern Library.\ -In the old days, the frontend was developed based on page-centric Photoshop files which made it hard to change things afterwards. With styleguide driven development you build smaller elements, which are reusable in all of your frontends. - -You can start developing your UI components (HTML/CSS/JavaScript) very early in the production phase without having to wait for a ready-to-use development system.\ -Designers and Testers can give feedback early and you can share the documentation and code with external teams. - -At AOE, we use [Hologram](https://trulia.github.io/hologram/) to build a living documentation right from the source files. Whenever a new UI Element is needed, a developer starts building it in the styleguide -- not in the actual application code. By writing the code for the new component, the documentation for it is created instantly. Any other developer can easily see which elements exist and how it can be used in the code. diff --git a/radar/2017-03-01/symfony-components.md b/radar/2017-03-01/symfony-components.md deleted file mode 100644 index e428cbc..0000000 --- a/radar/2017-03-01/symfony-components.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Symfony Components" -ring: trial -quadrant: languages-and-frameworks ---- - -Symfony Components are part of the [Symfony Framework](https://symfony.com/) and they are designed as decoupled and reusable PHP components. - -Their use cases vary from simple little helpers such as a [beautified var_dump](http://symfony.com/doc/current/components/var_dumper.html) to more complex ones such as access control, list-based [security mechanisms](http://symfony.com/doc/current/components/security.html) and an easy-to-integrate [console component](http://symfony.com/doc/current/components/console.html) to give your already existing applications some CLI capabilities. They are [used by a lot of PHP-based projects](http://symfony.com/projects) such as Typo3, Magento, Composer, PHPUnit and Doctrine, with contributions continually taking place. If you are planning the next project with PHP components, you should have a look at the [Symfony Components list](http://symfony.com/components), which includes a lot of well-designed, decoupled [Open Source pieces of PHP code](https://github.com/symfony). diff --git a/radar/2017-03-01/typescript.md b/radar/2017-03-01/typescript.md deleted file mode 100644 index e7c5293..0000000 --- a/radar/2017-03-01/typescript.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "TypeScript" -ring: assess -quadrant: languages-and-frameworks ---- - -[TypeScript](https://www.typescriptlang.org/) is a language that gets transpiled to native JavaScript code. - -It offers support for the latest EcmaScript features and has strict typing and support for interfaces built in. - -JavaScript scoping, which led into recurring workarounds such as **var self = this, myFunc.bind(this)_,_**was eliminated in TypeScript. - -In TypeScript **this** stays **this**, which leads to more readable and understandable code from an OOP perspective. - -TypeScript continues to be actively developed by Microsoft and is well-Integrated in today's IDEs. - -The excellent structure and the possibilities for extension make it a good choice to consider for larger JavaScript projects. - -Typescript was the choice for [Angular](/languages-and-frameworks/angular/) and one can assume that it will get more traction with the success of Angular in the future. - -There are also projects that support Typescript „code execution“ on the server such as [ts-node](https://www.npmjs.com/package/ts-node). diff --git a/radar/2017-03-01/typo3-as-a-framework.md b/radar/2017-03-01/typo3-as-a-framework.md deleted file mode 100644 index a7dea79..0000000 --- a/radar/2017-03-01/typo3-as-a-framework.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "TYPO3 as a Framework" -ring: hold -quadrant: tools ---- - -We should avoid building new projects around TYPO3 by default. A lot of past projects started with CMS-only features in the beginning, and, for example, developed toward highly customized E-Commerce platforms. Instead of rearranging the architecture in a useful way, functionality was built on top of TYPO3's core and its extension framework Extbase. In the context of larger projects, this lead to deployment monoliths and the inability to integrate new technologies. - -While in the past it was easy to kickstart a TYPO3 project with AOE's custom-tailored kickstarter, we now have a lot of knowledge and tools available to start projects with a much smarter architecture. -This does not mean you shouldn't use TYPO3 anymore, but use it as the tool it is: a content management system. diff --git a/radar/2017-03-01/vue.md b/radar/2017-03-01/vue.md deleted file mode 100644 index d877532..0000000 --- a/radar/2017-03-01/vue.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Vue.js" -ring: assess -quadrant: languages-and-frameworks ---- - -Vue is a progressive, incrementally adoptable framework for building user interfaces maintained by Evan You. Unlike [other monolithic frameworks](http://vuejs.org/v2/guide/comparison.html), the core library is focused on the view layer only and is very easy to pick up and integrate with other libraries or existing projects. Vue is also perfectly capable of powering sophisticated single-page applications when used in combination with modern tooling and supporting libraries such as [vuex](https://vuex.vuejs.org/en/) and [vue-router](http://router.vuejs.org/en/). - -Vue uses an HTML-based template syntax that allows you to declaratively bind the rendered DOM to the underlying Vue instance’s data. Under the hood, Vue compiles the templates into Virtual DOM render functions. Combined with the [reactivity system](http://vuejs.org/v2/guide/reactivity.html) Vue is able to intelligently figure out the minimal amount of components to re-render and apply the minimal amount of DOM manipulations when the app state changes, which provides for very high performance. - -Applications can be split into [Single File Components](http://vuejs.org/v2/guide/single-file-components.html) - a single file containing the template (HTML), style (CSS) and functionality (JS) - which simplifies maintainability and testability of the code and promotes reusability across other projects. diff --git a/radar/2017-03-01/webpack.md b/radar/2017-03-01/webpack.md deleted file mode 100644 index da61616..0000000 --- a/radar/2017-03-01/webpack.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: "Webpack" -ring: trial -quadrant: tools ---- - -[Webpack](https://webpack.js.org/) is a web bundler for JavaScript applications. Instead of writing scripts to build and bundle your app like you would with [Gulp](/tools/gulp/), you just define what files you want to load into your bundle. - -In the following example, we define that JavaScript files should be handled by babel-loader, excluding the files from node_modules. The logic behind the process comes from the [loader](https://webpack.js.org/concepts/loaders/). You can find the right loader in [npm](https://www.npmjs.com/search?q=loader%20webpack&page=1&ranking=optimal). - -``` -{ - test: /\.js$/, - loader: 'babel-loader', - exclude: /node_modules/, -} -``` - -On top of that you can use [plugins](https://webpack.js.org/plugins/) to optimize your bundle like uglifying your code or put your common libraries in a separate file. - -Under the hood, you've got nice features such as: - -- [tree shaking](https://webpack.js.org/guides/tree-shaking/) to just bundle the features from a library you need -- [chunk splitting](https://webpack.js.org/guides/code-splitting/) to split your code to manage the load prioritization - -The configuration is simple and there is excellent and extensive [documentation](https://webpack.js.org/configuration/). diff --git a/radar/2017-03-01/wiremock.md b/radar/2017-03-01/wiremock.md deleted file mode 100644 index 7e5a4da..0000000 --- a/radar/2017-03-01/wiremock.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "WireMock" -ring: trial -quadrant: tools ---- - -**[WireMock](http://wiremock.org/docs/)** is an HTTP mock server - it can be used to mock APIs for testing. - -At its core, it is a web server that can be prepared to serve canned responses to particular requests (stubbing), and that captures incoming requests so that they can be checked later (verification). It also has an assortment of other useful features including record/playback of interactions with other APIs, injection of faults and delays, simulation of stateful behavior. - -It can be used as a library by any JVM application, or run as a standalone process either on the same host as the system under test or a remote server. All of WireMock's features are accessible via its REST (JSON) interface and its Java API. Additionally, the mock server can be configured via JSON files. - -At AOE, we use WireMock as a standalone server to mock APIs that are outside our system context to get a stable environment for testing and rapid feedback. Besides the decoupled test and development advantages, the mocked APIs can also be used in contract-based tests. We also use embedded WireMock in functional tests to stub external services. The explicit test of faults are especially helpful in building and testing the [resilience of your application](/methods-and-patterns/resilience-thinking/). - -Because of the features such as flexible deployment, powerful request matching and record/payback interactions, as well as the fact that the server runs stable in our project environments, we classify WireMock as *trial*. \ No newline at end of file diff --git a/radar/2017-03-01/xataface.md b/radar/2017-03-01/xataface.md deleted file mode 100644 index 7249998..0000000 --- a/radar/2017-03-01/xataface.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Xataface" -ring: hold -quadrant: platforms-and-aoe-services ---- - -In the past, we used a custom-developed toolset with Xataface, T3Deploy and a settings migration tool as an easy way to manage TYPO3- and Magento-related configurations and to automatically create environments on our shared integration/dev-servers. - -Today, there is no advantage or need for Xataface. Don't use it anymore diff --git a/radar/2017-03-01/xmlunit.md b/radar/2017-03-01/xmlunit.md deleted file mode 100644 index 594c4a7..0000000 --- a/radar/2017-03-01/xmlunit.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "XMLUnit" -ring: assess -quadrant: tools ---- - -[XMLUnit](http://www.xmlunit.org/) is a Java and .NET testing framework for XML documents. It is very useful for performing contract tests with SOAP interfaces or other XML-based message types. - -Comparing strings of XML can lead to unstable tests because of the changing order of elements or changed values, etc. XMLUnit provides features to address these issues. It is possible to validate against an XML Schema, use XPath queries or compare against expected outcomes. It also comes with a nice diff-engine which makes it easy to check the parts of an XML document that are important. diff --git a/radar/2018-03-01/adr.md b/radar/2018-03-01/adr.md deleted file mode 100644 index b992a27..0000000 --- a/radar/2018-03-01/adr.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: "ADR" -ring: assess -quadrant: methods-and-patterns -tags: [architecture, documentation] ---- - -Architecture Decision Records - -ADR is a lightweight documentation of important architecture decisions taken by the team. -Without documentation of the architecture and the architecture decisions, new team members can only do two things: -* either (blindly) accept what they find and see or -* (blindly) change things - -It goes without saying that both options aren't right. - -Therefore, we suggest documenting the important architecture decisions. We use a simple tool such as https://github.com/npryce/adr-tools and store them in version control. -In larger projects with many teams we also establish a regular "architecture board / COI" with regular meetings. -Often, the architecture decisions are taken in such meetings. - -The main purpose of this documentation is to: -* inform new team members about the previous architecture decisions and their purpose and backgrounds -* inform the whole team (including all people who were absent) -* create documentation that can be used to remember things (e.g. conventions, patterns, etc.) - - - diff --git a/radar/2018-03-01/akka-streams.md b/radar/2018-03-01/akka-streams.md deleted file mode 100644 index ac0c3b1..0000000 --- a/radar/2018-03-01/akka-streams.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -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. - -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. - -[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. - -We will continue looking into it together with the [Alpakka](/languages-and-frameworks/alpakka/) Connectors for integration -work. diff --git a/radar/2018-03-01/alpakka.md b/radar/2018-03-01/alpakka.md deleted file mode 100644 index 5e8cc66..0000000 --- a/radar/2018-03-01/alpakka.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Alpakka" -ring: assess -quadrant: languages-and-frameworks ---- - -When using [Akka Streams](/languages-and-frameworks/akka-streams/) 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. - -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. diff --git a/radar/2018-03-01/angular.md b/radar/2018-03-01/angular.md deleted file mode 100644 index 8b9c1a8..0000000 --- a/radar/2018-03-01/angular.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Angular" -ring: trial -quadrant: languages-and-frameworks -tags: [coding] ---- - -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. - -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. diff --git a/radar/2018-03-01/artifactory.md b/radar/2018-03-01/artifactory.md deleted file mode 100644 index 1752e83..0000000 --- a/radar/2018-03-01/artifactory.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -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. diff --git a/radar/2018-03-01/asciidoc.md b/radar/2018-03-01/asciidoc.md deleted file mode 100644 index 7a9fd1c..0000000 --- a/radar/2018-03-01/asciidoc.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "AsciiDoc" -ring: assess -quadrant: tools ---- - -AsciiDoc is a [lightweight markup language](https://en.wikipedia.org/wiki/Lightweight_markup_language) such as Markdown. -With a concise Syntax, it supports more features than Markdown without extensions such as Tables and Table of Contents. -It's easy to write complex documentation with AsciiDoc. And with Asciidoctor you can export your text to Pdf, HTML, etc. - -At AOE, we use AsciiDoc for Documentation in our Repositories. diff --git a/radar/2018-03-01/axure.md b/radar/2018-03-01/axure.md deleted file mode 100644 index 1030f9e..0000000 --- a/radar/2018-03-01/axure.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Axure" -ring: trial -quadrant: tools -tags: [ux/ui] ---- - -[Axure](https://www.axure.com/) is a tool that enables the creation of flowcharts, wireframes, mockups, user journeys and more. -Through features such as conditional logic, dynamic content and animations it is possible to create highly functional and rich UI prototypes, which convey a realistic look and feel as to how the application to be developed should behave and look. - -We at AOE have used Axure successfully in several projects and it helped us a lot, particularly: - - as a basis for discussing how features should look, feel and work with customers - - as a basis for customers' discussions with other stakeholders - - as a basis for discussion and specifications for developers as to how features should look and behave - -In conclusion, Axure is a great tool that provides all stakeholders with a common understanding and helped us a lot to specify requirements and find their implications. diff --git a/radar/2018-03-01/babel.md b/radar/2018-03-01/babel.md deleted file mode 100644 index 3ac9d54..0000000 --- a/radar/2018-03-01/babel.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Babel" -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 strongly recommend using Babel or similar solutions (e.g. TypeScript). diff --git a/radar/2018-03-01/blameless-post-mortems.md b/radar/2018-03-01/blameless-post-mortems.md deleted file mode 100644 index f5357ec..0000000 --- a/radar/2018-03-01/blameless-post-mortems.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Blameless Post Mortems" -ring: trial -quadrant: methods-and-patterns ---- - -> Failure and invention are inseparable twins. -> -> — Jeff Bezos - -Blameless Post Mortems provide a concept of dealing with failures that inevitably occur when developing and operating complex software solutions. After any major incident or outage, the team gets together to perform an in-depth analysis of what happened and what can be done to mitigate the risk of similar issues happening in the future. - -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 resilience and stability of our services. - -At AOE, we strive to conduct a Blameless Post Mortem meeting after every user-visible incident. diff --git a/radar/2018-03-01/consul.md b/radar/2018-03-01/consul.md deleted file mode 100644 index ad6e5e1..0000000 --- a/radar/2018-03-01/consul.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Consul" -ring: assess -quadrant: tools -featured: false ---- diff --git a/radar/2018-03-01/crc.md b/radar/2018-03-01/crc.md deleted file mode 100644 index 5e514d8..0000000 --- a/radar/2018-03-01/crc.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -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. - -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 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. - -This is how we often conduct a CRC Session: -* Preparation: - * Make sure everybody has a high-level overview of the software (bounded context / use case overview). Because design should also focus on the long term. - * Choose some scenarios (such as "customer adds a promoted product to cart and sees the discounts...") that you want to discuss in this session -* Collect candidates for classes: - * For the first session, it makes sense to search for potential candidates for classes. - * Just put them on a whiteboard. Often nouns in scenarios are good candidates. - * 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 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 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/) - \ No newline at end of file diff --git a/radar/2018-03-01/docker.md b/radar/2018-03-01/docker.md deleted file mode 100644 index da13426..0000000 --- a/radar/2018-03-01/docker.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Docker" -ring: adopt -quadrant: platforms-and-aoe-services ---- - -Docker has pulled off very quickly and we updated it to "adopt". \ No newline at end of file diff --git a/radar/2018-03-01/elasticsearch.md b/radar/2018-03-01/elasticsearch.md deleted file mode 100644 index bb992e9..0000000 --- a/radar/2018-03-01/elasticsearch.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Elasticsearch" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -We are continuing to use Elasticsearch successfully in [Searchperience®](http://www.searchperience.com/) and have benefited from the aggregation features for related use cases such as rendering category trees. We also use Elasticsearch as a persistence solution for various microservices. - -This is why we have updated its status to **adopt**. diff --git a/radar/2018-03-01/flow.md b/radar/2018-03-01/flow.md deleted file mode 100644 index a503c3d..0000000 --- a/radar/2018-03-01/flow.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Flow" -ring: hold -quadrant: languages-and-frameworks -featured: false ---- diff --git a/radar/2018-03-01/gatling.md b/radar/2018-03-01/gatling.md deleted file mode 100644 index 214df31..0000000 --- a/radar/2018-03-01/gatling.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -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. \ No newline at end of file diff --git a/radar/2018-03-01/gitlab-ci.md b/radar/2018-03-01/gitlab-ci.md deleted file mode 100644 index b298cae..0000000 --- a/radar/2018-03-01/gitlab-ci.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "GitLab CI" -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. - -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. -* Pipeline – you can define multiple jobs per stage and you can trigger other builds. -* Autoscaling – you can automatically spin up and down VM's to make sure your builds get processed immediately and minimize costs. -* Build artifacts – you can upload binaries and other build artifacts to GitLab and browse and download them. -* Docker support – you can use custom Docker images, spin up services as part of testing, build new Docker images, even run on Kubernetes. diff --git a/radar/2018-03-01/gitlab.md b/radar/2018-03-01/gitlab.md deleted file mode 100644 index c64db6e..0000000 --- a/radar/2018-03-01/gitlab.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "GitLab" -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 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. - -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. diff --git a/radar/2018-03-01/go-lang.md b/radar/2018-03-01/go-lang.md deleted file mode 100644 index d0a9338..0000000 --- a/radar/2018-03-01/go-lang.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Go / Golang" -ring: trial -quadrant: languages-and-frameworks -tags: [academy training, coding] ---- - -We have decided to trial Go because multiple teams have successfully used it for various services and tools. - -The learning curve and productivity have proven to be significant, and we are convinced that this language will gain -more adoption in other teams. diff --git a/radar/2018-03-01/grafana.md b/radar/2018-03-01/grafana.md deleted file mode 100644 index b843dcb..0000000 --- a/radar/2018-03-01/grafana.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Grafana" -ring: assess -quadrant: platforms-and-aoe-services ---- - -[Grafana](https://grafana.com//) is an Open Source data visualization platform written in Go and NodeJS. It provides a vast choice of different graph types that can be easily combined into dashboards for displaying any kind of numerical or time-based data. - -At AOE, we usually use Grafana in conjunction with [Prometheus](https://prometheus.io/) or [AWS CloudWatch](https://prometheus.io/) for visualizing both application and infrastructure metrics. diff --git a/radar/2018-03-01/grpc.md b/radar/2018-03-01/grpc.md deleted file mode 100644 index 95e3704..0000000 --- a/radar/2018-03-01/grpc.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -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 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. -Besides gRPC, other frameworks also use protobuf RPC definitions. These frameworks include twirp from twitch, which makes it easy to change the transport/control layer with only very small changes to the application code. - -We at AOE plan to assess gRPC for microservice architectures which are more RPC style and less REST style. diff --git a/radar/2018-03-01/gulp.md b/radar/2018-03-01/gulp.md deleted file mode 100644 index 5886502..0000000 --- a/radar/2018-03-01/gulp.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Gulp" -ring: adopt -quadrant: tools -featured: false ---- diff --git a/radar/2018-03-01/hal-hateoas.md b/radar/2018-03-01/hal-hateoas.md deleted file mode 100644 index 5f9ff7f..0000000 --- a/radar/2018-03-01/hal-hateoas.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -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: -- Increased amount of HTTP calls -- Parallelization of client-side calls is more difficult or even impossible when following links on heavily nested resource structures -- Consumer side code might get larger diff --git a/radar/2018-03-01/helm.md b/radar/2018-03-01/helm.md deleted file mode 100644 index 61ea2e8..0000000 --- a/radar/2018-03-01/helm.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Helm" -ring: assess -quadrant: tools ---- - -For managing deployments within Kubernetes we use Helm, which makes templating Kubernetes configuration files super easy (also known as Helm charts). diff --git a/radar/2018-03-01/imgix.md b/radar/2018-03-01/imgix.md deleted file mode 100644 index 27d6288..0000000 --- a/radar/2018-03-01/imgix.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "imgix" -ring: assess -quadrant: platforms-and-aoe-services -featured: false ---- diff --git a/radar/2018-03-01/invision.md b/radar/2018-03-01/invision.md deleted file mode 100644 index ec05f14..0000000 --- a/radar/2018-03-01/invision.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "InVision" -ring: trial -quadrant: tools -tags: [ux/ui] ---- - -[InVision](https://www.invisionapp.com) 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. diff --git a/radar/2018-03-01/jest.md b/radar/2018-03-01/jest.md deleted file mode 100644 index aeb6a22..0000000 --- a/radar/2018-03-01/jest.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Jest" -ring: adopt -quadrant: tools -tags: [frontend, quality assurance] ---- - -Updated to "adopt". diff --git a/radar/2018-03-01/keycloak.md b/radar/2018-03-01/keycloak.md deleted file mode 100644 index ee95f7c..0000000 --- a/radar/2018-03-01/keycloak.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Keycloak" -ring: adopt -quadrant: tools -tags: [security] ---- - -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. - -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. diff --git a/radar/2018-03-01/kubernetes.md b/radar/2018-03-01/kubernetes.md deleted file mode 100644 index ba6c8b1..0000000 --- a/radar/2018-03-01/kubernetes.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Kubernetes" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [academy training, devops] ---- - -Kubernetes has evolved into the quasi-standard for container orchestration: Nearly every cloud provider offers managed Kubernetes, and even Docker Enterprise utilizes Kubernetes. - -We run several production systems with Kubernetes and employ it in concepts such as: -- Utilizing "secrets" and "configmaps" to manage configurations for applications. By updating these resources with an automated configuration pipeline, you have an excellent method for configuration management. -- Implementing autoscaling of Kubernetes nodes and utilizing "horizontal pod scaling" within Kubernetes allows for elastic scaling. -- Leveraging support for managing permissions with OAuth, enabling you to secure Kubernetes with [Keycloak](/tools/keycloak/) (SSO). -- Utilizing Kubernetes' extensibility and API for automation and customization. There is a growing ecosystem around extensions, which adds additional features. diff --git a/radar/2018-03-01/maintain-third-party-packages.md b/radar/2018-03-01/maintain-third-party-packages.md deleted file mode 100644 index 125b942..0000000 --- a/radar/2018-03-01/maintain-third-party-packages.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Maintain third party packages" -ring: hold -quadrant: platforms-and-aoe-services -featured: false ---- diff --git a/radar/2018-03-01/microfrontends.md b/radar/2018-03-01/microfrontends.md deleted file mode 100644 index 112b808..0000000 --- a/radar/2018-03-01/microfrontends.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Micro Frontends" -ring: assess -quadrant: methods-and-patterns ---- - -We see many benefits in Microservices – especially in large teams – but often this architecture -does not involve the user interface. Instead, you might end up maintaining a frontend monolith. With Micro Frontends -you enable your frontend developers to gain the same benefits that we have grown accustomed to in a Microservice architecture: -Decoupled components, which are developed and deployed by independent teams. But what sounds reasonable comes with -challenges. Integrating different Frontends on the client- or server-side can be tricky, as well as keeping the overall -User Experience consistent. - -Despite the challenges, Micro Frontends help us to develop large applications across multiple teams. Developers can -work more independently without having too much trouble maintaining a large codebase. Being able to update or -replace Frontend libraries in some parts of the application is yet another benefit in the fast-moving world of -frontend development. diff --git a/radar/2018-03-01/microservices.md b/radar/2018-03-01/microservices.md deleted file mode 100644 index 67d8e8b..0000000 --- a/radar/2018-03-01/microservices.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Microservices" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture] ---- - -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. - -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) diff --git a/radar/2018-03-01/neo4j.md b/radar/2018-03-01/neo4j.md deleted file mode 100644 index b3daec1..0000000 --- a/radar/2018-03-01/neo4j.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Neo4j" -ring: assess -quadrant: platforms-and-aoe-services -featured: false ---- diff --git a/radar/2018-03-01/oro-platform.md b/radar/2018-03-01/oro-platform.md deleted file mode 100644 index dba7f06..0000000 --- a/radar/2018-03-01/oro-platform.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Oro Platform" -ring: assess -quadrant: tools -featured: false ---- diff --git a/radar/2018-03-01/pact.md b/radar/2018-03-01/pact.md deleted file mode 100644 index 41796c6..0000000 --- a/radar/2018-03-01/pact.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "PACT" -ring: trial -quadrant: tools ---- - -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 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/) ), e.g. to build [Microservice oriented architectures](/methods-and-patterns/microservices/) - -Consumer Driven Contract Testing and how it can be conducted with PACT is documented very nicely on the official PACT website: https://docs.pact.io/. diff --git a/radar/2018-03-01/pair-working.md b/radar/2018-03-01/pair-working.md deleted file mode 100644 index c5be0db..0000000 --- a/radar/2018-03-01/pair-working.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Pair Working" -ring: adopt -quadrant: methods-and-patterns -tags: [agile, coding, devops] -featured: false ---- - -Moved to "adopt" because it promotes rapid knowledge sharing, reduces errors, and improves collaboration within our teams. diff --git a/radar/2018-03-01/phan.md b/radar/2018-03-01/phan.md deleted file mode 100644 index 4c9660a..0000000 --- a/radar/2018-03-01/phan.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "phan" -ring: assess -quadrant: tools -featured: false ---- diff --git a/radar/2018-03-01/php7-over-php5.md b/radar/2018-03-01/php7-over-php5.md deleted file mode 100644 index f15f0db..0000000 --- a/radar/2018-03-01/php7-over-php5.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "PHP7 over PHP5" -ring: adopt -quadrant: languages-and-frameworks -featured: false ---- diff --git a/radar/2018-03-01/pipeline-as-code.md b/radar/2018-03-01/pipeline-as-code.md deleted file mode 100644 index 1e6b31d..0000000 --- a/radar/2018-03-01/pipeline-as-code.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Pipeline as Code" -ring: adopt -quadrant: methods-and-patterns -tags: [ci/cd] ---- - -We moved this pattern to **adopt**, because it is used by nearly every team and project now and is an important part of our automation. - -For Jenkins, we often use a mix of Job DSL and Jenkins Pipelines and recently also used GitLab Pipelines. diff --git a/radar/2018-03-01/ports-and-adapters.md b/radar/2018-03-01/ports-and-adapters.md deleted file mode 100644 index c905f72..0000000 --- a/radar/2018-03-01/ports-and-adapters.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "Ports and Adapters" -ring: trial -quadrant: methods-and-patterns - ---- - -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). -It also defines clear boundaries regarding where to put what logic of your application. - -You can find out more about the details and its origins in well-known blog posts such as [The Clean Architecture](https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html) or [Hexagonal architecture](http://alistair.cockburn.us/Hexagonal+architecture) - -In short, here is how we often layer such applications: -* Domain: - * Is the inner layer and contains the technology-free domain model - * Often uses building blocks from Domain Driven Design - * It defines primary and secondary ports. (E.g. a secondary port is in "interface" that needs to be implemented in the infrastructure layer.) -* Application: - * Contains the Application's API and Services, that are developed around the use cases in the application requirements. - * These use cases orchestrate the flow of data to and from the domain -* Interfaces: - * Contain everything required to convert data from the format most-convenient for the use cases (e.g. in the application layer) to the format required for external agency/access - * e.g. (Web) Controllers / DTOs for handling forms, etc. -* Infrastructure: - * This layer is where all the (technical) details live. (The database and persistence is a detail, the communication format and mappings with external services is a detail, etc.) - * In this layer you typically have adapters for the secondary ports that have been defined in the layers below. (e.g. an Implementation of a Repository interface from the Domain layer) - -These layers belong to every bounded context (modules) inside the application. - -Are you searching for a potential timeless architecture for your critical application? Try implementing a potent technology-free domain model in the core layer and use ports and adapters to layer your application. diff --git a/radar/2018-03-01/puppet.md b/radar/2018-03-01/puppet.md deleted file mode 100644 index 7367673..0000000 --- a/radar/2018-03-01/puppet.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Puppet" -ring: trial -quadrant: platforms-and-aoe-services ---- - -Puppet has proven to work well for our projects. diff --git a/radar/2018-03-01/react.md b/radar/2018-03-01/react.md deleted file mode 100644 index 58978a5..0000000 --- a/radar/2018-03-01/react.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "React.js" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding, frontend] ---- - -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**! diff --git a/radar/2018-03-01/reactive-programming.md b/radar/2018-03-01/reactive-programming.md deleted file mode 100644 index d294af1..0000000 --- a/radar/2018-03-01/reactive-programming.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -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 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 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/). - -"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/) or [Akka Streams](/languages-and-frameworks/akka-streams/) to highlight the importance of the approach in general. diff --git a/radar/2018-03-01/scala-lang.md b/radar/2018-03-01/scala-lang.md deleted file mode 100644 index 8575c3f..0000000 --- a/radar/2018-03-01/scala-lang.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -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. diff --git a/radar/2018-03-01/self-service-infrastructure.md b/radar/2018-03-01/self-service-infrastructure.md deleted file mode 100644 index f09c02f..0000000 --- a/radar/2018-03-01/self-service-infrastructure.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -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. -By agreeing on just a couple of patters, this allows us to easily manage a microservice architecture with more than 60 Applications, without too much hassle managing infrastructure/runtimes for (among others) JVM, Go and PHP applications. -Most of the hosting/provisioning decisions are better kept within the team, as the teams know how their applications work. By providing a clear interface, this became the cornerstone for running our microservice architecture, and keeping the amount of actual servers much lower than in projects with a centralized operations/IT team. - -Eventually, self-service infrastructure, and "You build it, you run it", allowed us to give both our application developers as well as our infrastructure engineers more flexibility than one team explaining to another team what to do, resulting in a better collaboration than before. diff --git a/radar/2018-03-01/sonarqube.md b/radar/2018-03-01/sonarqube.md deleted file mode 100644 index 7ce9f23..0000000 --- a/radar/2018-03-01/sonarqube.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -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. diff --git a/radar/2018-03-01/sparkpost.md b/radar/2018-03-01/sparkpost.md deleted file mode 100644 index 5973276..0000000 --- a/radar/2018-03-01/sparkpost.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "SparkPost" -ring: assess -quadrant: platforms-and-aoe-services -featured: false ---- diff --git a/radar/2018-03-01/spring-boot.md b/radar/2018-03-01/spring-boot.md deleted file mode 100644 index c0b51a0..0000000 --- a/radar/2018-03-01/spring-boot.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -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 kick-starting new services and the variety of tools in the Spring ecosystem. diff --git a/radar/2018-03-01/styleguide-driven-development.md b/radar/2018-03-01/styleguide-driven-development.md deleted file mode 100644 index 93683db..0000000 --- a/radar/2018-03-01/styleguide-driven-development.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Styleguide Driven Development" -ring: adopt -quadrant: methods-and-patterns ---- - -Updated to "adopt". \ No newline at end of file diff --git a/radar/2018-03-01/terraform.md b/radar/2018-03-01/terraform.md deleted file mode 100644 index 8f83c41..0000000 --- a/radar/2018-03-01/terraform.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Terraform" -ring: trial -quadrant: tools -tags: [academy training, devops] ---- - -For the infrastructure of our OM3 projects, we operate multiple Kubernetes clusters. To orchestrate the infrastructure provisioning, we quickly decided to use [Terraform](https://www.terraform.io). Terraform enables us to easily manage our infrastructure, from AWS EC2 instances to RabbitMQ message queues. Additionally, the Kops installer for Kubernetes on AWS utilizes Terraform as its main building block, allowing us to trigger Kops via Terraform. - -We combine Terraform with [Helm](/platforms-and-aoe-services/helm/) 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 deploy Kubernetes Ingress definitions with the appropriate hostname-to-service mapping via Helm. diff --git a/radar/2018-03-01/typo3-as-a-framework.md b/radar/2018-03-01/typo3-as-a-framework.md deleted file mode 100644 index cf3a636..0000000 --- a/radar/2018-03-01/typo3-as-a-framework.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "TYPO3 as a Framework" -ring: hold -quadrant: tools -featured: false ---- diff --git a/radar/2018-03-01/vue.md b/radar/2018-03-01/vue.md deleted file mode 100644 index 4463896..0000000 --- a/radar/2018-03-01/vue.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Vue.js" -ring: trial -quadrant: languages-and-frameworks ---- - -Updated to "trial". \ No newline at end of file diff --git a/radar/2018-03-01/webpack.md b/radar/2018-03-01/webpack.md deleted file mode 100644 index f0463f3..0000000 --- a/radar/2018-03-01/webpack.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Webpack" -ring: adopt -quadrant: tools -tags: [frontend, coding] ---- - -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. diff --git a/radar/2018-03-01/xataface.md b/radar/2018-03-01/xataface.md deleted file mode 100644 index aa32dab..0000000 --- a/radar/2018-03-01/xataface.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Xataface" -ring: hold -quadrant: platforms-and-aoe-services -featured: false ---- diff --git a/radar/2018-03-01/yarn.md b/radar/2018-03-01/yarn.md deleted file mode 100644 index a6ca481..0000000 --- a/radar/2018-03-01/yarn.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -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. - -At AOE, we started using Yarn in different projects to evaluate if we can switch to Yarn for all projects. diff --git a/radar/2019-11-01/akeneo.md b/radar/2019-11-01/akeneo.md deleted file mode 100644 index aef7172..0000000 --- a/radar/2019-11-01/akeneo.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Akeneo" -ring: assess -quadrant: tools -featured: false ---- diff --git a/radar/2019-11-01/akka-streams.md b/radar/2019-11-01/akka-streams.md deleted file mode 100644 index 7949f54..0000000 --- a/radar/2019-11-01/akka-streams.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Akka Streams" -ring: adopt -quadrant: languages-and-frameworks -featured: false ---- - -Updated to "adopt" \ No newline at end of file diff --git a/radar/2019-11-01/alpakka.md b/radar/2019-11-01/alpakka.md deleted file mode 100644 index d457740..0000000 --- a/radar/2019-11-01/alpakka.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Alpakka" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding] ---- - -Updated to "adopt" diff --git a/radar/2019-11-01/ant.md b/radar/2019-11-01/ant.md deleted file mode 100644 index 736b03e..0000000 --- a/radar/2019-11-01/ant.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Ant" -ring: hold -quadrant: tools -featured: false ---- diff --git a/radar/2019-11-01/anypoint-platform.md b/radar/2019-11-01/anypoint-platform.md deleted file mode 100644 index 6773848..0000000 --- a/radar/2019-11-01/anypoint-platform.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Anypoint Platform" -ring: trial -quadrant: tools -featured: false ---- - -Recently our teams migrated some project from Anypoint to ["Apache Camel"](/languages-and-frameworks/apache-camel/) or use ["Alpakka"](/languages-and-frameworks/alpakka/) for integration work. \ No newline at end of file diff --git a/radar/2019-11-01/apache-camel.md b/radar/2019-11-01/apache-camel.md deleted file mode 100644 index 9b788f9..0000000 --- a/radar/2019-11-01/apache-camel.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Apache Camel" -ring: trial -quadrant: languages-and-frameworks -featured: false ---- - -["Camel"](https://camel.apache.org/) is an open source integration framework that empowers you to quickly and easily integrate various systems consuming or producing data. - -Our teams are using Apache Camel as API Gateway that offers APIs and takes care of Federation to various Backends as well as Authorisation tasks. \ No newline at end of file diff --git a/radar/2019-11-01/apollo-client.md b/radar/2019-11-01/apollo-client.md deleted file mode 100644 index a7ceb53..0000000 --- a/radar/2019-11-01/apollo-client.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Apollo Client" -ring: trial -quadrant: tools -tags: [architecture] ---- - -The [Apollo Client](https://github.com/apollographql/apollo-client) is a tool to efficiently work together with an GraphQL server. -It makes it easy to run your queries and mutations, cache results, brings tooling to download schemas and generate types to name a few of the useful features. diff --git a/radar/2019-11-01/asciidoc.md b/radar/2019-11-01/asciidoc.md deleted file mode 100644 index 9aebfec..0000000 --- a/radar/2019-11-01/asciidoc.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "AsciiDoc" -ring: assess -quadrant: tools -featured: false ---- \ No newline at end of file diff --git a/radar/2019-11-01/aws-lambda.md b/radar/2019-11-01/aws-lambda.md deleted file mode 100644 index 5477bc4..0000000 --- a/radar/2019-11-01/aws-lambda.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "AWS Lambda" -ring: trial -quadrant: platforms-and-aoe-services -featured: false ---- \ No newline at end of file diff --git a/radar/2019-11-01/blameless-post-mortems.md b/radar/2019-11-01/blameless-post-mortems.md deleted file mode 100644 index e863105..0000000 --- a/radar/2019-11-01/blameless-post-mortems.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Blameless Post Mortems" -ring: assess -quadrant: methods-and-patterns -featured: false ---- diff --git a/radar/2019-11-01/bower.md b/radar/2019-11-01/bower.md deleted file mode 100644 index 7cf798f..0000000 --- a/radar/2019-11-01/bower.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Bower" -ring: hold -quadrant: tools -featured: false ---- diff --git a/radar/2019-11-01/cockpit.md b/radar/2019-11-01/cockpit.md deleted file mode 100644 index d87d425..0000000 --- a/radar/2019-11-01/cockpit.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Cockpit" -ring: assess -quadrant: tools ---- - -[Cockpit](https://getcockpit.com/) is a self-hosted headless and api-driven content management system. \ No newline at end of file diff --git a/radar/2019-11-01/concourse-ci.md b/radar/2019-11-01/concourse-ci.md deleted file mode 100644 index 4370a42..0000000 --- a/radar/2019-11-01/concourse-ci.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Concourse" -ring: trial -quadrant: tools -tags: [ci/cd] ---- - -[Concourse](https://concourse-ci.org/) is an open-source continuous "thing-doer". -It represents a general approach for automation which can be used for Continuous Integration and Continuous Delivery. -Concourse CI follows a strict concept that is based on idempotency, immutability, declarative config, stateless workers, and reproducible builds. -Pipelines are built on the mechanics of resources, tasks and jobs, which are all configured in one or multiple YAML files. - -Concourse claims to be "simple" but has a steep learning curve in the beginning till it gets simple to use. -Concourse is used in the Congstar Team to automate infrastructure deployments. diff --git a/radar/2019-11-01/container-based-builds.md b/radar/2019-11-01/container-based-builds.md deleted file mode 100644 index ef8a031..0000000 --- a/radar/2019-11-01/container-based-builds.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Container-based builds" -ring: adopt -quadrant: methods-and-patterns ---- - -Updated to "adopt". Container based builds has getting to the de facto standard for our pipelines in [GitLab](/tools/gitlab/) or other CI Tools. \ No newline at end of file diff --git a/radar/2019-11-01/cypress.md b/radar/2019-11-01/cypress.md deleted file mode 100644 index 91959fe..0000000 --- a/radar/2019-11-01/cypress.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "Cypress" -ring: assess -quadrant: tools -tags: [academy training, frontend, quality assurance] ---- - -[Cypress](https://www.cypress.io/) is a front-end testing tool (E2E). It comes as a simple node package, making it easy to use and maintain for front-end developers and testers. Cypress has a different approach than Selenium; it runs in the browser and in the same loop as the device under test. - -**Good:** - -* [Open source](https://github.com/cypress-io/cypress) -* [Locally installed](https://docs.cypress.io/guides/getting-started/installing-cypress.html#System-requirements) -* Straightforward (installed via npm, and all tests are written in JavaScript) -* Good [documentation](https://docs.cypress.io/guides/overview/why-cypress.html#In-a-nutshell) and learning materials -* Can run in a [headless mode](https://docs.cypress.io/guides/guides/command-line.html#cypress-run) - -**Not so good:** - -* No cross-browser testing (only Chrome and Electron) -* Scenarios with multiple browser tabs cannot be tested -* Relatively new test tool, although it is becoming more popular - -**Example of a test:** - -```js -describe('My First Test', function() { - it('Visits the Kitchen Sink', function() { - cy.visit('https://example.cypress.io') - - cy.contains('type').click() - - cy.url().should('include', '/commands/actions') - - cy.get('.action-email') - .type('fake@email.com') - .should('have.value', 'fake@email.com') - }) -}) -``` diff --git a/radar/2019-11-01/dagger.md b/radar/2019-11-01/dagger.md deleted file mode 100644 index 5caa478..0000000 --- a/radar/2019-11-01/dagger.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Dagger" -ring: adopt -quadrant: tools -featured: false ---- \ No newline at end of file diff --git a/radar/2019-11-01/datadog.md b/radar/2019-11-01/datadog.md deleted file mode 100644 index 288aa35..0000000 --- a/radar/2019-11-01/datadog.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Datadog" -ring: assess -quadrant: platforms-and-aoe-services -featured: false ---- diff --git a/radar/2019-11-01/decoupling-via-messaging.md b/radar/2019-11-01/decoupling-via-messaging.md deleted file mode 100644 index 8e1a9d0..0000000 --- a/radar/2019-11-01/decoupling-via-messaging.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Decoupling via Messaging" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture, devops] ---- - -Updated to "adopt" diff --git a/radar/2019-11-01/dependency-update-scan.md b/radar/2019-11-01/dependency-update-scan.md deleted file mode 100644 index d32ed94..0000000 --- a/radar/2019-11-01/dependency-update-scan.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Dependency Update Scan" -ring: assess -quadrant: methods-and-patterns ---- - -Automated dependency scans are useful to remove the manual task of regularly checking for version updates. -Our teams are utilizing the Open Source bots [Renovate](https://github.com/renovatebot/renovate) and [Scala Steward](https://github.com/fthomas/scala-steward), both of which are running as a scheduled GitLab job in our internal infrastructure. -The bots are regularly creating merge requests with dependency version updates against our projects. - -Having this automated comes with a few advantages: - -- Important dependency updates are available very shortly after they have been published (e.g. for security issues) -- Changelogs are referenced in the merge requests, making it easy to review if the update is relevant -- An automatically triggered pipeline is running our test suites, giving us a high confidence that the version update is non-breaking if the pipeline was successful -- Regular small updates are easier to maintain than bulk updates of many libraries at once, reducing the risk of introducing compatibility breaking changes - -Automated merge requests allow us to focus on reviewing, testing and prioritization of dependency version updates with considerably less effort. \ No newline at end of file diff --git a/radar/2019-11-01/distributed-tracing.md b/radar/2019-11-01/distributed-tracing.md deleted file mode 100644 index d931f10..0000000 --- a/radar/2019-11-01/distributed-tracing.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Distributed Tracing" -ring: trial -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -Distributed Tracing creates visibility over processes spanning multiple applications. -In a microservice world where a request or operation involves multiple applications it is helpful to have an overview of what system is involved, at what point. -Also, visibility of communicated data and errors helps to quickly identify issues in a microservice environment. -Our tool of choice is [Jaeger](/platforms-and-aoe-services/jaeger/) with [B3 Propagation](https://github.com/openzipkin/b3-propagation). diff --git a/radar/2019-11-01/eks.md b/radar/2019-11-01/eks.md deleted file mode 100644 index d65ccab..0000000 --- a/radar/2019-11-01/eks.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Amazon EKS" -ring: trial -quadrant: platforms-and-aoe-services ---- - -[Amazon Elastic Kubernetes Service](https://aws.amazon.com/de/eks/) (Amazon EKS) is a managed service that makes it easy for you to run Kubernetes on AWS without needing to stand up or maintain your own Kubernetes control plane. -Amazon EKS runs Kubernetes control plane instances across multiple Availability Zones to ensure high availability. -It also provides automated version upgrades and patching for them. - -Amazon EKS is used as part of the infrastructure in the Congstar project. -Different Amazon EKS Clusters are in use on a variety of environments like development, integration, testing and production. -We experienced that Kubernetes version updates are done without major efforts or impact to the running cluster. - -Amazon EKS is fully supported by Terraform which brings the advantage that its configuration is written in code, which fulfils the infrastructure as code philosophy. \ No newline at end of file diff --git a/radar/2019-11-01/event-storming.md b/radar/2019-11-01/event-storming.md deleted file mode 100644 index 7c78a98..0000000 --- a/radar/2019-11-01/event-storming.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "Event Storming" -ring: assess -quadrant: methods-and-patterns -tags: [architecture] ---- - -Event Storming is a method of modeling business processes using domain events. - -With complex business processes, people usually know their part of the process very well. -Having people from different departments in one room, allows (and requires!) a conversation. -Knowledge silos get opened up. All learnings can be directly visualized. - -We tried this method a couple of times with different sized scopes. We believe it can be of value and has potential. - -## Method Overview -It's like brainstorming - with the goal to visualize a business line or process. - -Event Storming is done in a workshop format. - -To get a business process modeled quickly and complete, it's important to get domain experts, developers, UX and everybody else who is involved to some extent in the related business line into one room. -With virtually unlimited space for modeling using big paper rolls put onto the walls, equipped with colored stickies and markers, the modeling workshop can start. - -During the workshop, the goal is to model the big picture, without limiting or focusing just on parts of a process. diff --git a/radar/2019-11-01/explicit-test-strategy.md b/radar/2019-11-01/explicit-test-strategy.md deleted file mode 100644 index f370542..0000000 --- a/radar/2019-11-01/explicit-test-strategy.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Explicit test strategy" -ring: assess -quadrant: methods-and-patterns -featured: false ---- diff --git a/radar/2019-11-01/falco.md b/radar/2019-11-01/falco.md deleted file mode 100644 index 4de74f2..0000000 --- a/radar/2019-11-01/falco.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Falco" -ring: assess -quadrant: tools -tags: [security] ---- - -Falco is an open source project for intrusion and abnormality detection for Cloud Native platforms such as Kubernetes. -It detects abnormal application behavior and sends alerts via Slack, Fluentd, NATS, and more. - -We are assessing Falco to add another angle to host based intrusion detection and alerting. diff --git a/radar/2019-11-01/flamingo.md b/radar/2019-11-01/flamingo.md deleted file mode 100644 index c4b17cf..0000000 --- a/radar/2019-11-01/flamingo.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: "Flamingo" -ring: adopt -quadrant: languages-and-frameworks -tags: [academy training, coding] ---- - -Flamingo is a high productivity Go-based framework for rapidly building fast and pluggable web projects. It is used to construct scalable and maintainable (web) applications. - -Flamingo is: - -- Open source -- Written in Go -- Easy to learn -- Fast and flexible - -Go, as a simple, powerful, and typesafe language, is excellent for implementing and scaling server-side logic. Flamingo has a clean architecture with clear dependencies in mind and offers typical features and support for modern web applications: - -- Powerful templating engines, e.g., support for Pug templates with reusable mixins and lightweight scripting. -- Configuration concepts using YAML and support for multiple areas and contexts. -- Powerful dependency injection. -- A module concept for building modular and pluggable applications. -- Authentication concepts and security middleware. -- Flexible routing with support for prefix routes and reverse routing. -- Web controller support with Request/Response/Form Handling, etc. -- Operational readiness: Logging, (distributed) Tracing, Metrics, and Healthchecks with separate endpoints. -- Localization. -- Commands. -- Session handling and management. -- GraphQL support and, therefore, support to build nice SPAs and PWAs on top of it. -- Resilience and caching for external API calls. - -Flamingo itself does not contain an ORM mapper or libraries. Instead, it emphasizes a "ports and adapters" architecture so that you have a technology-free (domain) model and any possible (and replaceable) persistence behind it. This makes Flamingo useful for building microservices and applications, especially for constructing "frontends" or portals that require interaction with other (micro)services in a distributed architecture. By adhering to the architectural recommendation, you can build modular applications with replaceable adapters that provide independent testability. - -With **"Flamingo Commerce,"** there is an additional active project that offers rich and flexible features to build modern e-commerce applications. diff --git a/radar/2019-11-01/flowtype.md b/radar/2019-11-01/flowtype.md deleted file mode 100644 index beb5515..0000000 --- a/radar/2019-11-01/flowtype.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Flow" -ring: assess -quadrant: tools ---- - -[Flow](https://flow.org/) is a static type checker for JavaScript code. Its goal is to make code faster, smarter, -more confidently, and to a bigger scale. \ No newline at end of file diff --git a/radar/2019-11-01/flux.md b/radar/2019-11-01/flux.md deleted file mode 100644 index 3c6aebf..0000000 --- a/radar/2019-11-01/flux.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Flux" -ring: assess -quadrant: methods-and-patterns -tags: [frontend] ---- - -[Flux](https://facebook.github.io/flux/) is an application architecture for building client-side web applications, -which is based on React's composable view components. diff --git a/radar/2019-11-01/galen.md b/radar/2019-11-01/galen.md deleted file mode 100644 index b7a93f6..0000000 --- a/radar/2019-11-01/galen.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Galen" -ring: assess -quadrant: tools -featured: false ---- \ No newline at end of file diff --git a/radar/2019-11-01/gitflow.md b/radar/2019-11-01/gitflow.md deleted file mode 100644 index edd1403..0000000 --- a/radar/2019-11-01/gitflow.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "GitFlow" -ring: hold -quadrant: methods-and-patterns -tags: [agile, coding, devops] ---- - -Ever since there are recurring discussions about the version control strategy that a team should use. - -At AOE, we have also made the experience that when new teams start off using blocking or long-lived feature branches (merging late once all review comments are done), it has a negative impact on team performance. - -We recommend using trunk-based development with short-lived (<1 day) feature branches because this has shown to support continuous integration and team collaboration the best. However, we do accept teams' choices to use GitFlow; we just do not try to encourage them in the first place. - -See also: -* [Trunk-Based Development](https://trunkbaseddevelopment.com/) -* [One Commit, One Change](https://medium.com/@fagnerbrack/one-commit-one-change-3d10b10cebbf) -* [Feature Branch](https://martinfowler.com/bliki/FeatureBranch.html) -* [Organisation Antipattern: Build Feature Branching](https://www.continuousdeliveryconsulting.com/blog/organisation-antipattern-build-feature-branching/) diff --git a/radar/2019-11-01/gitlab-ci.md b/radar/2019-11-01/gitlab-ci.md deleted file mode 100644 index 181d5b8..0000000 --- a/radar/2019-11-01/gitlab-ci.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "GitLab CI" -ring: adopt -quadrant: tools ---- - -Moved to "adopt". \ No newline at end of file diff --git a/radar/2019-11-01/gitlab.md b/radar/2019-11-01/gitlab.md deleted file mode 100644 index cd07be9..0000000 --- a/radar/2019-11-01/gitlab.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "GitLab" -ring: adopt -quadrant: tools ---- - -Moved to "adopt": GitLab has proven to be a very useful tool for code and the collaboration around it. -With [GitLab CI](/tools/gitlab-ci/) there is also a powerful tool to automate continuous integration and delivery. diff --git a/radar/2019-11-01/go-lang.md b/radar/2019-11-01/go-lang.md deleted file mode 100644 index 9a20def..0000000 --- a/radar/2019-11-01/go-lang.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Go / Golang" -ring: adopt -quadrant: languages-and-frameworks -tags: [academy training, coding] ---- - -We have moved Go to "adopt". diff --git a/radar/2019-11-01/grafana.md b/radar/2019-11-01/grafana.md deleted file mode 100644 index 154cb3f..0000000 --- a/radar/2019-11-01/grafana.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Grafana" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -Updated to "adopt" diff --git a/radar/2019-11-01/graphql.md b/radar/2019-11-01/graphql.md deleted file mode 100644 index f55a45d..0000000 --- a/radar/2019-11-01/graphql.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: "GraphQL" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture] ---- - -[GraphQL](https://graphql.org/) is a query language for your API, and a server-side runtime for executing queries by -using a type system you define for your data. It isn't tied to any specific database or storage engine and is instead -backed by your existing code and data. - -GraphQL was developed by Facebook around 2010 and released 2015. -The main challenge it solves is to improve communication between browser and server on high dynamic web apps. - -Key advantages are: - -- schema and schema validation together with a useful type system -- the client (browser) controls what data should be sent (data reduction) -- with one request you can fetch "all" required data - -Client side integration can be achieved using the [Apollo Client Framework](/tools/apollo-client/) which easily -integrates into [React.js](/languages-and-frameworks/react/) based frontends. - -The Flamingo framework [offers support for GraphQL](https://docs.flamingo.me/3.%20Flamingo%20Modules/graphql.html) -while Flamingo Commerce provides a full-featured GraphQL API for e-commerce: -[Example GraphQL Console for Commerce](https://demoshop.flamingo.me/en/graphql-console). diff --git a/radar/2019-11-01/groovy.md b/radar/2019-11-01/groovy.md deleted file mode 100644 index 4d4a043..0000000 --- a/radar/2019-11-01/groovy.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Groovy" -ring: hold -quadrant: languages-and-frameworks ---- - -Since the rise of Kotlin, we seen no need why to still use Groovy as an alternative to Java running on the JVM. diff --git a/radar/2019-11-01/grpc.md b/radar/2019-11-01/grpc.md deleted file mode 100644 index 019c3c6..0000000 --- a/radar/2019-11-01/grpc.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "GRPC" -ring: adopt -quadrant: languages-and-frameworks -tags: [architecture, coding] ---- - -We adopted GRPC, because it is used on multiple places within our microservice oriented architectures for internal communication. diff --git a/radar/2019-11-01/grunt.md b/radar/2019-11-01/grunt.md deleted file mode 100644 index b249f4d..0000000 --- a/radar/2019-11-01/grunt.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Grunt" -ring: hold -quadrant: tools -featured: false ---- diff --git a/radar/2019-11-01/hal-hateoas.md b/radar/2019-11-01/hal-hateoas.md deleted file mode 100644 index 680c576..0000000 --- a/radar/2019-11-01/hal-hateoas.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "HAL / HATEOAS" -ring: trial -quadrant: methods-and-patterns -featured: false ---- - -We use HAL in cases where we need to link resources in payloads. -HATEOAS has not proven to be very useful in our projects. \ No newline at end of file diff --git a/radar/2019-11-01/helm.md b/radar/2019-11-01/helm.md deleted file mode 100644 index bd2ee08..0000000 --- a/radar/2019-11-01/helm.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Helm" -ring: trial -quadrant: platforms-and-aoe-services ---- - -[Helm](https://helm.sh/) is a package manager for [Kubernetes](https://kubernetes.io/), which simplifies the deployment of applications into a Kubernetes cluster and provides additional features like e.g. versioning and rollbacks. diff --git a/radar/2019-11-01/hystrix.md b/radar/2019-11-01/hystrix.md deleted file mode 100644 index b831d8e..0000000 --- a/radar/2019-11-01/hystrix.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Hystrix" -ring: assess -quadrant: tools -featured: false ---- - -Hystrix is not longer actively maintained and some of its goals can now be handled with service meshs. \ No newline at end of file diff --git a/radar/2019-11-01/infrastructure-as-code.md b/radar/2019-11-01/infrastructure-as-code.md deleted file mode 100644 index 98e0917..0000000 --- a/radar/2019-11-01/infrastructure-as-code.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Infrastructure as Code" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops, ci/cd] ---- - -Updated to "adopt" diff --git a/radar/2019-11-01/jaeger.md b/radar/2019-11-01/jaeger.md deleted file mode 100644 index ddd2423..0000000 --- a/radar/2019-11-01/jaeger.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Jaeger" -ring: trial -quadrant: platforms-and-aoe-services ---- - -[Jaeger](https://www.jaegertracing.io/) is a tool for [Distributed Tracing](/platforms-and-aoe-services/distributed-tracing/). -Developed at Uber and inspired by Dapper and OpenZipkin it grew into an [Cloud Native Computing Foundation](https://www.cncf.io/) project. - -Jaeger is a great tool for troubleshooting distributed systems, such as microservice architectures. -Developers and Operation can quickly see communication between services, and what data is communicated where. -Errors in services can be traced to the originating system. -Global trace identifiers are communicated using B3 headers. Jaeger supports Zipkin, which allows easy migration von OpenZipkin & co. diff --git a/radar/2019-11-01/job-dsl.md b/radar/2019-11-01/job-dsl.md deleted file mode 100644 index c4fae5b..0000000 --- a/radar/2019-11-01/job-dsl.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Job DSL (Jenkins)" -ring: trial -quadrant: tools -featured: false ---- \ No newline at end of file diff --git a/radar/2019-11-01/kotlin.md b/radar/2019-11-01/kotlin.md deleted file mode 100644 index 555f858..0000000 --- a/radar/2019-11-01/kotlin.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Kotlin" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding] ---- - -Kotlin is used successfully in production by multiple teams. - -Kotlin is 100% interoperable with Java. It means the code can live side-by-side in one code base and interact. -From the beginning it was designed with practical thought in mind. So the IDE Support in IntelliJ is really great. - -The Spring Framework Developer put a lot of effort that Springs play well together with Kotlin. - -With its concise syntax, null safety, -Due to its explicit type system, this language is also great replacement for Groovy usage with Gradle. diff --git a/radar/2019-11-01/microfrontends.md b/radar/2019-11-01/microfrontends.md deleted file mode 100644 index d7b31ce..0000000 --- a/radar/2019-11-01/microfrontends.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Micro Frontends" -ring: trial -quadrant: methods-and-patterns ---- - -When deciding on a system architecture we are always striving for technology neutralism. -This is to allow us to stay flexible with future decisions. -Micro Frontends can be a tool to support us with this goal. -We favor protocols and methods, such as plain HTML and HTTP, over specific technologies when designing Micro Frontends. - -Since Micro Frontends have proven to allow use move fast and agile, we moved this pattern to "trial". \ No newline at end of file diff --git a/radar/2019-11-01/next-js.md b/radar/2019-11-01/next-js.md deleted file mode 100644 index 80a4deb..0000000 --- a/radar/2019-11-01/next-js.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Next.js" -ring: trial -quadrant: languages-and-frameworks ---- - -[Next.js](https://nextjs.org/) is a JavaScript and React based framework which makes use of server side rendering. \ No newline at end of file diff --git a/radar/2019-11-01/nosql.md b/radar/2019-11-01/nosql.md deleted file mode 100644 index bf33128..0000000 --- a/radar/2019-11-01/nosql.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "NoSQL" -ring: trial -quadrant: methods-and-patterns -featured: false ---- - -NoSQL technologies are established solutions that allows for scaling and handling big datasets. -We use Technologies like Redis, Elasticsearch and Neo4J but there are many others that are powering the NoSQL space. \ No newline at end of file diff --git a/radar/2019-11-01/npm.md b/radar/2019-11-01/npm.md deleted file mode 100644 index 15cc511..0000000 --- a/radar/2019-11-01/npm.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "NPM" -ring: adopt -quadrant: tools -featured: false ---- \ No newline at end of file diff --git a/radar/2019-11-01/open-api.md b/radar/2019-11-01/open-api.md deleted file mode 100644 index a06029e..0000000 --- a/radar/2019-11-01/open-api.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Open API" -ring: adopt -quadrant: tools -tags: [architecture] ---- - -The OpenAPI Specification is becoming a broadly adopted industry standard for describing modern REST APIs. -Other initiatives like RAML have [joined](https://blogs.mulesoft.com/dev/api-dev/open-api-raml-better-together/) the OpenAPI Initiative. - -OpenAPI v2 version is basically the former Swagger - and Swagger provides useful tools for OpenAPI like the online editor and viewer http://editor.swagger.io/ -We have also found that this version currently have a good tool support across languages, so you will find API client and server generation tools for a lot of languages, which makes it quite easy to connect to an API that is described in OpenAPI standard. - - -**OpenAPI v3** - -OpenAPI v3 adds more features to the specification - for example the ability to describe APIs supporting request/callback pattern. - -There is a very good api designer https://www.apicur.io/ and a good mock generator http://microcks.github.io/index.html - -The general tool support is excellent. See https://openapi.tools/ diff --git a/radar/2019-11-01/packer.md b/radar/2019-11-01/packer.md deleted file mode 100644 index 2e2e291..0000000 --- a/radar/2019-11-01/packer.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Packer" -ring: adopt -quadrant: platforms-and-aoe-services ---- - -[Hashicorp Packer](https://www.packer.io/intro/getting-started/build-image.html) is a lightweight tool which automates the creation of any type of machine images (Machine Image As A Code) for multiple platforms. -Packer is not a replacement of configuration management tools like Ansible. Packer works with tools like ansible to install software while creating images. -Packer uses a configuration file to create a machine image. It uses the concepts of builders to spin up an instance, run provisioners to configure applications or services. -Once setup is done, it shuts the instance down and save new baked machine instance with any needed post-processing. -Packer only builds images. But once you have them you can deploy your infrastructure quickly and even scale by spawning any number of instances without doing extra configuration. -Another benefit is, that machine images can be tested to verify if they are working correctly. -Packer supports multiple cloud providers like AWS, GCP, Digital Ocean etc. - -Machine images are important for modern deployment pipelines and fast ramp of new infrastructure. -We are using Packer to build so-called "Golden images" that are used in our [Infrastructure as Code](/platforms-and-aoe-services/infrastructure-as-code/) based provisionings. diff --git a/radar/2019-11-01/plant-uml.md b/radar/2019-11-01/plant-uml.md deleted file mode 100644 index a0ab86a..0000000 --- a/radar/2019-11-01/plant-uml.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Plant UML" -ring: trial -quadrant: tools ---- - -[PlantUML](https://plantuml.com/) is an open source project that allows to create UML diagrams in a text-based and declarative way. - -Since it is integrated in tools like Confluence, IntelliJ and GitLab we use it a lot to quickly document results of software design sessions. - -Another similar tools that use just plain JavaScript to render the diagrams is [mermaid](https://mermaid-js.github.io/mermaid/#/) \ No newline at end of file diff --git a/radar/2019-11-01/play-framework.md b/radar/2019-11-01/play-framework.md deleted file mode 100644 index e519eb9..0000000 --- a/radar/2019-11-01/play-framework.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Play Framework" -ring: adopt -quadrant: languages-and-frameworks -featured: false ---- diff --git a/radar/2019-11-01/ports-and-adapters.md b/radar/2019-11-01/ports-and-adapters.md deleted file mode 100644 index a6b8b2a..0000000 --- a/radar/2019-11-01/ports-and-adapters.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Ports and Adapters" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture] ---- - -Updated to "adopt" \ No newline at end of file diff --git a/radar/2019-11-01/postgres.md b/radar/2019-11-01/postgres.md deleted file mode 100644 index e9badbf..0000000 --- a/radar/2019-11-01/postgres.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "PostgreSQL" -ring: adopt -quadrant: tools -featured: false ---- - -[PostgreSQL](https://www.postgresql.org/) is a powerful, open source object-relational database system with over 30 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance. diff --git a/radar/2019-11-01/postman.md b/radar/2019-11-01/postman.md deleted file mode 100644 index 25b61d2..0000000 --- a/radar/2019-11-01/postman.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Postman" -ring: trial -quadrant: tools -featured: false ---- - -[Postman](https://www.getpostman.com/) is an API testing and documentation tool. -Requests can be bundled into folders and easily be configured to be executed against multiple environments. -Responses can be evaluated using the "test" feature. - -Even automated testing is possible using [Newman](https://www.npmjs.com/package/newman) as an addition to Postman. diff --git a/radar/2019-11-01/protobuf.md b/radar/2019-11-01/protobuf.md deleted file mode 100644 index b1b69ed..0000000 --- a/radar/2019-11-01/protobuf.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Protobuf" -ring: assess -quadrant: languages-and-frameworks -featured: false ---- diff --git a/radar/2019-11-01/rabbitmq.md b/radar/2019-11-01/rabbitmq.md deleted file mode 100644 index 328a091..0000000 --- a/radar/2019-11-01/rabbitmq.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "RabbitMQ" -ring: adopt -quadrant: tools ---- - -RabbitMQ has proven to work very well for messaging in our projects, that is why we updated it to "adopt". diff --git a/radar/2019-11-01/raml.md b/radar/2019-11-01/raml.md deleted file mode 100644 index d1948d0..0000000 --- a/radar/2019-11-01/raml.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "RAML" -ring: hold -quadrant: languages-and-frameworks ---- - -Since the RAML project has decided to [join](https://blogs.mulesoft.com/dev/api-dev/open-api-raml-better-together/) the OpenAPI initiative and the RAML ecosystem lacks further development and additional tools, we decided to use and recommend using ["OpenAPI specification (OAS)"](/tools/open-api/) as description standard instead. - -RAML still provides advantages in modeling an API through it's more expressive modeling language and can produce OAS \ No newline at end of file diff --git a/radar/2019-11-01/reactive-programming.md b/radar/2019-11-01/reactive-programming.md deleted file mode 100644 index 2da66c7..0000000 --- a/radar/2019-11-01/reactive-programming.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Reactive Programming" -ring: adopt -quadrant: methods-and-patterns ---- - -The reactive style of programming promotes event-based thinking and modeling - and by that assists in creating more decoupled solutions. - -Synergies arise, when people understand the concepts of this pattern: by using marble diagrams, which are a de-facto standard in visualizing algorithms in a reactive style, a common ground for communication is available regardless of the programming language used. - -When appropriate, we choose more explicitly the Reactive Programming pattern and therefore moved this to "adopt". diff --git a/radar/2019-11-01/self-service-infrastructure.md b/radar/2019-11-01/self-service-infrastructure.md deleted file mode 100644 index 497b606..0000000 --- a/radar/2019-11-01/self-service-infrastructure.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Self-Service Infrastructure" -ring: trial -quadrant: platforms-and-aoe-services -tags: [devops, agile] ---- - -Moved to "trial". diff --git a/radar/2019-11-01/sonarqube.md b/radar/2019-11-01/sonarqube.md deleted file mode 100644 index 6236591..0000000 --- a/radar/2019-11-01/sonarqube.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "SonarQube" -ring: trial -quadrant: tools ---- - -At AOE, we are using SonarQube to get a historical overview of the code quality in our Projects. -With SonarQube, you can get a quick insight into the condition of your code. -It analyzes many languages and provides numerous static analysis rules. -SonarQube is also being used for Static Application Security Testing (SAST) which scans our code for potential security vulnerabilities and is an essential element of our Secure Software Development Lifecycle. \ No newline at end of file diff --git a/radar/2019-11-01/spring-boot.md b/radar/2019-11-01/spring-boot.md deleted file mode 100644 index e788d54..0000000 --- a/radar/2019-11-01/spring-boot.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Spring Boot" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding] ---- - -We now have several years of experiences with Spring Boot, and a big projects Microservice Environment runs completely on Spring Boot, so it's time to update it to "adopt". diff --git a/radar/2019-11-01/storybook.md b/radar/2019-11-01/storybook.md deleted file mode 100644 index 032fa8d..0000000 --- a/radar/2019-11-01/storybook.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Storybook" -ring: assess -quadrant: tools ---- - -[Storybook](https://storybook.js.org/) is a user interface development environment and playground for UI components. -The tool enables developers to create components independently and showcase components interactively in an isolated development environment. -Storybook runs outside the main app so users can develop UI components in isolation without worrying about app specific dependencies and requirements. diff --git a/radar/2019-11-01/stride-threat-modeling.md b/radar/2019-11-01/stride-threat-modeling.md deleted file mode 100644 index 6fa23c2..0000000 --- a/radar/2019-11-01/stride-threat-modeling.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "STRIDE Threat Modeling" -ring: trial -quadrant: methods-and-patterns -tags: [security] ---- - -STRIDE is a model of threat groups that helps to identify security threats to any application, component or infrastructure. - -The acronym stands for: - -* **S**poofing -* **T**ampering -* **R**epudiation -* **I**nformation disclosure -* **D**enial of service -* **E**levation of privilege - -AOE is applying the threat model in collaborative sessions using the [Elevation of Privilege Card Game](https://social.technet.microsoft.com/wiki/contents/articles/285.elevation-of-privilege-the-game.aspx) which helps to spark imagination and makes threats more tangible. diff --git a/radar/2019-11-01/styleguide-driven-development.md b/radar/2019-11-01/styleguide-driven-development.md deleted file mode 100644 index 56858f5..0000000 --- a/radar/2019-11-01/styleguide-driven-development.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Styleguide Driven Development" -ring: adopt -quadrant: methods-and-patterns -featured: false ---- diff --git a/radar/2019-11-01/symfony-components.md b/radar/2019-11-01/symfony-components.md deleted file mode 100644 index 3c2a815..0000000 --- a/radar/2019-11-01/symfony-components.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Symfony Components" -ring: trial -quadrant: languages-and-frameworks -featured: false ---- diff --git a/radar/2019-11-01/temporal-modeling.md b/radar/2019-11-01/temporal-modeling.md deleted file mode 100644 index 5c0c5ff..0000000 --- a/radar/2019-11-01/temporal-modeling.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Temporal Modeling" -ring: assess -quadrant: methods-and-patterns -tags: [architecture] ---- - -Temporal Modeling is way of modeling software systems and components by putting events first. - -The usual way of modeling software is to find structures, things and relations. -We try to find the relevant aspects of a domain and put all properties into an object-oriented model. -Trying to create a second model for a related business process, having the structural model already in place, might result in a process representation that is tightly coupled with the assumptions built up from the structural model and too far away from reality. - -By focusing on the domain processes first, one can visualize all aspects of a process over time. -Having the process visualized, allows to see potential pitfalls or forgotten aspects. -With a temporal model at hand, it is easy to create an object-oriented or structural model that perfectly represents all required information. - -We tried this method when tackling big or complex domains. diff --git a/radar/2019-11-01/terraform.md b/radar/2019-11-01/terraform.md deleted file mode 100644 index 9e3baeb..0000000 --- a/radar/2019-11-01/terraform.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Terraform" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [academy training, devops] ---- - -[Terraform](https://www.terraform.io/) is a tool for building, changing, and versioning infrastructure using the infrastructure-as-code pattern. Terraform supports popular service providers like AWS, Google Cloud Platform, Azure, and many more. - -Infrastructure is described in configuration files through HCL (HashiCorp Configuration Language), which offers a set of string interpolations and built-in functions, including conditionals and loops. Terraform validates configuration files before attempting to run updates, checking not only that all files use the correct syntax, but also that all parameters are accessible and the configuration as a whole is valid. In Terraform, you can (and should) run a `plan` step before applying any changes. This step precisely outlines what is going to change and why. - -Another feature of Terraform is its facilitation of code reuse through modules. This allows for a lot of flexibility in structuring projects in the way that makes the most sense. - -At AOE, we utilize Terraform across multiple teams to provision infrastructure and manage its lifecycle on cloud platforms such as AWS, as well as for platforms such as Kubernetes. diff --git a/radar/2019-11-01/typescript.md b/radar/2019-11-01/typescript.md deleted file mode 100644 index afc498e..0000000 --- a/radar/2019-11-01/typescript.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "TypeScript" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding, frontend] ---- - -As writing frontend applications becomes more complex, [TypeScript](https://www.typescriptlang.org/) allows us to scale client side code easily, even with large code bases. -We use Typescript successfully at production for many projects and we are only going to use it even more in the future. -We highly recommend using Typescript over JavaScript, therefore we have decided to move it to adopt. diff --git a/radar/2019-11-01/vault.md b/radar/2019-11-01/vault.md deleted file mode 100644 index d464778..0000000 --- a/radar/2019-11-01/vault.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Vault" -ring: trial -quadrant: tools ---- - -[Hashicorp Vault](https://www.vaultproject.io/) is a Go application with a Rest/Cli interface that you can use to securely access secrets. -A secret can be any sensitive data, such as credentials, certificates, access tokens, encryption keys etc. -Vaults key features are a secure secret storage, dynamic secretes (create on-demand secrets), data encryption, secret leasing, renewal and revocation. \ No newline at end of file diff --git a/radar/2019-11-01/vuex.md b/radar/2019-11-01/vuex.md deleted file mode 100644 index c76ce83..0000000 --- a/radar/2019-11-01/vuex.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Vuex" -ring: assess -quadrant: languages-and-frameworks ---- - -[Vuex](https://vuex.vuejs.org/) is a state management pattern + library for Vue.js applications. \ No newline at end of file diff --git a/radar/2019-11-01/xmlunit.md b/radar/2019-11-01/xmlunit.md deleted file mode 100644 index 0190a40..0000000 --- a/radar/2019-11-01/xmlunit.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "XMLUnit" -ring: assess -quadrant: tools -featured: false ---- \ No newline at end of file diff --git a/radar/2019-11-01/yarn.md b/radar/2019-11-01/yarn.md deleted file mode 100644 index 43632f1..0000000 --- a/radar/2019-11-01/yarn.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Yarn" -ring: trial -quadrant: tools -featured: false ---- \ No newline at end of file diff --git a/radar/2019-11-01/zero-trust.md b/radar/2019-11-01/zero-trust.md deleted file mode 100644 index e4d1049..0000000 --- a/radar/2019-11-01/zero-trust.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Zero Trust" -ring: trial -quadrant: methods-and-patterns ---- - -Zero Trust is a security model where no trust is assumed within a known network. - -With Zero Trust, there are no assumptions made about the level of trust, and everything is considered untrusted by default. Authentication and authorization occur continuously, rather than just once. - -Frameworks like Google's BeyondCorp are built upon that pattern. - -## Motivation and History -Classical security paradigms traditionally safeguard a particular network perimeter, such as a company intranet. - -Once a person is "inside" – for example, by working within the company network or connecting to it through VPN – they are generally deemed trustworthy. - -However, with the rise of cloud technologies and microservices, and the fact that people are working from various locations, this security model is insufficient. The network perimeter is constantly evolving and expanding. - -This presents challenges for authenticating subjects that previously relied heavily on network segments. - -## Principles of Zero Trust -Zero Trust assumes that no user, service, or device is trusted by default, regardless of location or network. It requires continuous verification of identity, strict access controls, and consistent monitoring of network activity. - -**Basic Principles:** -- Least Privilege -- Assume Breach -- Strong Identity Verification -- Verify Explicitly - -It involves many **areas and aspects**, including: -- Identities and Identity Awareness -- Device and Device Authentication -- Networking and Firewall -- Application Security (Security by Design, Secure Architecture) -- Infrastructure Security -- Secure Data Handling -- Organization and Culture -- Secure Development and Delivery -- Security Monitoring and Automation - -## Implementations -In 2009 Google implemented a zero trust architecture referred to as [BeyondCorp](https://cloud.google.com/beyondcorp). It utilizes OAuth and OpenID standards for implementing Authn and Authz, and has influenced the development of modern Zero Trust architectures. - -Typical implementations involve using standards and tools for IAM and SSO, such as [Keycloak](/tools/keycloak/). - -## Summary -While network segments and VPN connections may still be relevant in specific areas, AOE is increasingly implementing a Zero Trust approach in all solutions, components, and services. - -We are currently adopting best practices for Zero Trust, which align with the BeyondCorp framework and utilize the OAuth and OpenID Connect standards. diff --git a/radar/2021-07-01/adr.md b/radar/2021-07-01/adr.md deleted file mode 100644 index 0cdbc43..0000000 --- a/radar/2021-07-01/adr.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "ADR" -quadrant: methods-and-patterns -ring: adopt -tags: [architecture, documentation] ---- - -[ADRs](https://adr.github.io/) have proven to be a useful tool for documentation and are commonly used in -our organisation. We therefore promote it to the "adopt" ring. diff --git a/radar/2021-07-01/akeneo.md b/radar/2021-07-01/akeneo.md deleted file mode 100644 index eb43e6f..0000000 --- a/radar/2021-07-01/akeneo.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Akeneo" -ring: adopt -quadrant: tools -featured: false ---- - -We continue to use Akeneo with a variety of customers to store and process product data in a standardized format. It is the de facto standard for open source PIM's and therefore an integral part of our e-commerce solutions. - -In the meantime, Akeneo has been continuously developed and offers many new features that further facilitate product data collection. - -The recent switch to Elasticsearch and an update of Symfony improved runtime behaviour as well as scalability for future-prove use. Support for the latest release of PHP 8 is upcoming. diff --git a/radar/2021-07-01/angular.md b/radar/2021-07-01/angular.md deleted file mode 100644 index 24eb1bb..0000000 --- a/radar/2021-07-01/angular.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Angular" -ring: adopt -quadrant: languages-and-frameworks ---- - -Actually in version 11 Angular has become an adult SPA framework with much faster build time and significant smaller production builds. -Updating to newer versions has become mostly a "no-brainer" which helps us to integrate the latest community bug-fix & improvements on a friday during a cup of coffee. -Angular ships as a fully integrated development platform from scaffolding, code generation, routing, guarding, unit/e2e-testing, multi-language builds (i18n) and stable dev/build processes and keeping it extensible at the same time. -This holistic nature of Angular makes it in the beginning way more difficult to learn but once understood it's a great candidate to go very fast into "requirement implementation" aka providing early value rather than library wiring. -Beside the existing telco-industry projects we've actually also chosen Angular for resource critical industry 4.0 / embedded projects. -Here we've selected Angular beside the performance aspects to fulfill requirements like adaptive multi device support (custom hardware buttons, tablets and laptops) on the one hand and on the other hand to reduce the risk loosing time by having too many self-managed external dependencies. diff --git a/radar/2021-07-01/apicurio.md b/radar/2021-07-01/apicurio.md deleted file mode 100644 index d3238a9..0000000 --- a/radar/2021-07-01/apicurio.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Apicurio Studio" -ring: trial -quadrant: tools -tags: [architecture] ---- - -[Apicurio Studio](https://www.apicur.io/studio/) is a browser-based, open-source API design studio. It can be used to create or modify APIs using the [OpenAPI specification](https://swagger.io/specification/). The visual editor supports collaborative development and allows to easily define example responses matching incoming requests. - -At AOE, we use Apicurio Studio in conjunction with [Microcks](https://microcks.io/) as part of our API-first development approach. While specifying an API, a corresponding mock server can be set up with a single mouse click. The frontend and backend parts of an application can then be developed independently by using the mock server and the API specification generated by Apicurio Studio. diff --git a/radar/2021-07-01/apm.md b/radar/2021-07-01/apm.md deleted file mode 100644 index c6f4689..0000000 --- a/radar/2021-07-01/apm.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Application Performance Management" -ring: adopt -quadrant: methods-and-patterns -tags: [devops] ---- - -Application performance management (APM) enables to predict and prevent performance issues before they impact your users or your business. -APM solutions help organizations to ensure that applications meet performance, availability and user experience expectations. -This can be achieved by measuring application performance, providing visibility into performance issues, alerting developers and administrators when performance problems appear, and allow analysing how reliable an improvement is compared to a previous state. -In the last years APM solutions are evolving from application performance monitoring tools to more feature full systems that incorporating observability, performance data collection and analysis, which is more to date with distributed cloud-native applications. - -Our experience with APM relates to the instrumentation of applications. This includes exposing metrics, tracing and integration with external services such as [New Relic](https://newrelic.com/). We decided to go for this approach given the simplicity and the benefits they proved on a daily basis when analyzing and optimizing our software. diff --git a/radar/2021-07-01/artifactory.md b/radar/2021-07-01/artifactory.md deleted file mode 100644 index 4ba6917..0000000 --- a/radar/2021-07-01/artifactory.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Artifactory" -ring: adopt -quadrant: platforms-and-aoe-services -featured: false ---- - -Artifactory is still a valid tool but SCM platforms tools like [GitLab](https://gitlab.org/) and similar hosted services offer integrated artifact management which remove the requirements for external artifact management in many projects. diff --git a/radar/2021-07-01/checkov.md b/radar/2021-07-01/checkov.md deleted file mode 100644 index 102ec13..0000000 --- a/radar/2021-07-01/checkov.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Checkov" -ring: assess -quadrant: platforms-and-aoe-services -tags: [devops, quality assurance] ---- - -Checkov is a static code analysis tool for infrastructure-as-code. - -It scans cloud infrastructure provisioned using - -- Terraform -- Terraform plan -- Cloudformation -- Kubernetes - -and detects security and compliance misconfigurations. - -At AOE we use Checkov in CI/CD processes to get insights into our Terraform-Modules. diff --git a/radar/2021-07-01/cockpit.md b/radar/2021-07-01/cockpit.md deleted file mode 100644 index c08ca6f..0000000 --- a/radar/2021-07-01/cockpit.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Cockpit" -ring: hold -quadrant: tools -featured: false ---- - -We decided to put this CMS on hold due to other - more adopted - alternatives like [Strapi](/tools/strapi/). \ No newline at end of file diff --git a/radar/2021-07-01/complexity-management.md b/radar/2021-07-01/complexity-management.md deleted file mode 100644 index d59bb66..0000000 --- a/radar/2021-07-01/complexity-management.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: "Complexity Management" -ring: trial -quadrant: methods-and-patterns -tags: [agile,architecture] ---- - -Our world is increasingly complex - our society and the economic system is developing fast - we constantly have to deal with surprises and uncertainty. This is especially the case in IT organisations that collaboratively and cross-functional work on innovations, "digitalization strategies" or "transformation projects". - -Something is complex, when it is not possible to relate all its elements at the same time. There is no clear cause and result relationship. Decision making processes cannot be well structured. - -But of course that should not be used as an excuse. This realisation can motivate us to find ways to better deal with it. To come to better and new ideas together, to take good decisions and to learn from them. - -Complexity management capabilities describe the ability to deal with complexity. The more different dimensions are used to observe and analyse a situation, the higher they are differenciated and the faster this is done - the better complexity is managed. [C2M Model](https://www.carl-auer.de/magazin/systemzeit/komplexitatsmanagement-modell-stufen-formen) - -The complexity in IT initiatives and projects comes from the uncertainties of how a product is adopted by the users and the market, the nearly endless choices of technical ingredients, the team and organisational structures and the established collaboration and communication etc. - -Agile methods and other best practices evolved from that challenges - and are now widely adopted - but without proper reflection and complexity management they can also lead to dysfunctional communication patterns. - -Since we are solving problems in collaboration we also need to deal with the complexity of the communication system (social system): - -* We are often seeing how large and historical organisations have a hard time with their transformation initiatives. -* We are seeing teams, where over the time dysfunctional patterns have emerged. -* We see teams where no clear communication is established and where the important conflicts are not addressed. -* We see teams that argue one-dimensional and spend time and energy in useless debates. -* We see organisations that are full of internal orientation and activities - while they are losing the connection to the external customers and market. - -An understanding of how communication systems are working - and what conditions for working communication (and therefore collaboration) exist, helps to address such situations better. It also helps to understand how we can use conflicts for creativity (creating new perspectives and ideas). - -That includes the awareness that we can always learn from each other! - -That is the reason we see systemic perspectives with proper system theoretical background emerging in the space of organisational development. We believe that proper learning of these perspectives and the awareness of complexity management capabilities can help organisations to form functional collaboration. This learning helps to reflect systems and oneself more conscious - and that can be a healthy condition for more impact and learning. It may also help that an organisation does not blindly follow the next model, agile "hype" or consultant promises. - -More on that topic: [Systemic Communication](https://www.carl-auer.de/magazin/systemzeit/communication-reorganization-of-undetermined) diff --git a/radar/2021-07-01/conventionalcommits.md b/radar/2021-07-01/conventionalcommits.md deleted file mode 100644 index 6d914f0..0000000 --- a/radar/2021-07-01/conventionalcommits.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Conventional Commits" -ring: trial -quadrant: methods-and-patterns -tags: [coding, quality assurance, ci/cd] ---- - -The Conventional Commits specification is a lightweight convention on top of commit messages. -It provides a small set of rules for writing commit messages and therefore creating an explicit commit history. -The convention dovetails with [SemVer](/methods-and-patterns/semver2/), by describing the features, fixes, and breaking changes made in commit messages. -The specification contains only 16 items that are easy to follow. The predefined structure allows everyone in the team to get a better overview of what the commit messages relates to and what part of the code a change has to do with. -Some benefits of using these specifications include: the ability to automatically generate changelogs, the ability to determine a semantic version bump (based on the types of commits landed) and being able to communicate the nature of changes to teammates and stakeholders. - -We use conventional commits in the team with the help of a git template. -The template contains a guide of elements that are required in the specification plus some information about project specific items that should also be part of a commit, such as a ticket number. diff --git a/radar/2021-07-01/css-in-js.md b/radar/2021-07-01/css-in-js.md deleted file mode 100644 index 0fb028d..0000000 --- a/radar/2021-07-01/css-in-js.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: "CSS-in-JS" -ring: trial -quadrant: methods-and-patterns -tags: [frontend] ---- - -CSS-in-JS is a method where JavaScript is used to style components. The first libraries which implemented this technique were [Styled-Components](https://styled-components.com/), [Emotion](https://emotion.sh/) & [JSS](https://cssinjs.org/). - -### Example: - -```js -const Button = styled.button` - display: inline-block; - padding: 0.5rem 0; - background: transparent; - color: white; - border: 2px solid white; - - ${(props) => - props.primary && - css` - background: white; - color: black; - `} -`; - -return ; -``` - -Advantages of CSS-in-JS - -- Local scoping instead of global namespace -- No classname to element mapping -- Use the full power of JavaScript to enhance CSS (loops, variables & more) -- Dynamic styling & theming (access to state or props) -- TypeScript support - -Disadvantages of CSS-in-JS - -- Runtime cost when using dynamic styling -- Slightly different syntax than traditional CSS (object syntax vs template literals) -- Can add an extra layer of complexity - -In the meantime CSS-in-JS has evolved even more. There are some libraries which leverages nearly zero-runtime costs such as [Stitches](https://stitches.dev/) or [Vanilla Extract](https://vanilla-extract.style/) while still providing an excellent developer experience with TypeScript. - -We at AOE think that CSS-in-JS is the future of writing good, performant and maintainable CSS, therefore we already use different CSS-in-JS solutions throughout multiple applications. diff --git a/radar/2021-07-01/cypress.md b/radar/2021-07-01/cypress.md deleted file mode 100644 index 9fedc83..0000000 --- a/radar/2021-07-01/cypress.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Cypress" -ring: adopt -quadrant: tools -tags: [academy training, frontend, quality assurance] ---- - -[Cypress](https://www.cypress.io/) has proven itself in AOE projects. With its support for JavaScript and TypeScript, Cypress is a testing tool -that strongly resonates with front-end developers. It is very easy to adopt, and the test specifications are easy to -implement and maintain. Test execution is swift, and the results are well-documented, understandable, and easy to -publish, for example, via GitLab Pages. - -Currently, it supports Chrome, Firefox, and Electron. diff --git a/radar/2021-07-01/ddev.md b/radar/2021-07-01/ddev.md deleted file mode 100644 index 2bf0eb7..0000000 --- a/radar/2021-07-01/ddev.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "DDEV" -ring: adopt -quadrant: tools -tags: [coding, ci/cd] ---- - -[DDEV](https://www.ddev.com/ddev-local/) is an open source tool that makes it dead simple to get local PHP development environments up and running within minutes. -It's powerful and flexible as a result of its per-project environment configurations, which can be extended, version controlled, and shared. -In short, DDEV aims to allow development teams to use Docker in their workflow without the complexities of bespoke configuration. - -At AOE, we use DDEV in a variety of PHP projects (large and small). -It has made the onboarding process extremely easy for new developers and developers who have already worked with DDEV feel right at home in other projects. - -DDEV makes adding needed dependencies super easy and so far has met every requirement we've ever had. -This is mainly because DDEV is just a wrapper for existing tools like Docker-Compose. However, it does take away a lot of the complexity that is normally involved in configuring these tools. diff --git a/radar/2021-07-01/dependency-update-scan.md b/radar/2021-07-01/dependency-update-scan.md deleted file mode 100644 index 5ad7f4b..0000000 --- a/radar/2021-07-01/dependency-update-scan.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Dependency Update Scan" -ring: trial -quadrant: methods-and-patterns -tags: [security, ci/cd] ---- - -Tools for automated dependency updates continue to offer a big productivity gain when integrated well into the build workflow. - -Nonetheless, this comes not without a word of warning. -While it's great in theory, constant updates might quickly lead to a bombardment of merge requests. -It is crucial that the chosen tools work reliably and are really well integrated. Otherwise, this might become overwhelming for teams. -As an alternative, we also had good experience with disabled automatic merge requests and just manually triggered a job when we wanted to take care of the updates. \ No newline at end of file diff --git a/radar/2021-07-01/dgs.md b/radar/2021-07-01/dgs.md deleted file mode 100644 index 7ae5d08..0000000 --- a/radar/2021-07-01/dgs.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "DGS Framework" -ring: assess -quadrant: tools ---- - -The [DGS Framework](https://netflix.github.io/dgs/) is a [GraphQL](https://graphql.org/) server framework based on [Spring Boot](https://spring.io/projects/spring-boot/). -It extends [GraphQL Java](https://www.graphql-java.com/) with additional features such as: -- an annotation-based programming model for Spring -- a test framework for writing query tests as unit tests -- a [Gradle](https://gradle.org/) code generation plugin to create types from a GraphQL schema - -It works well with both Java and Kotlin and allowed us a quick start with getting our first GraphQL servers up and running. diff --git a/radar/2021-07-01/diagrams-as-code.md b/radar/2021-07-01/diagrams-as-code.md deleted file mode 100644 index 73d8d5a..0000000 --- a/radar/2021-07-01/diagrams-as-code.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Diagrams as Code" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture, quality assurance, documentation] ---- - -Documenting concepts and software architecture as diagrams using code offers great benefit over heavier solutions. -Having documentation and diagrams treated as code and checked-in into version control increases transparency, collaboration as well as productivity. -The textual representation of diagrams is easy to write and read. Generation of graphical representations as SVG or PNG images is also easy with the associated tools. - -We make heavy use of [PlantUML](/tools/plant-uml/) combined with [Asciidoc](/tools/asciidoc/) and tools like [AsciiDoctor Diagram](https://asciidoctor.org/docs/asciidoctor-diagram/) to include and inline PlantUML diagrams into documentations. -The latter allows a variety of other diagram formats which can be easily mixed and matched. diff --git a/radar/2021-07-01/docker.md b/radar/2021-07-01/docker.md deleted file mode 100644 index 49065bb..0000000 --- a/radar/2021-07-01/docker.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Docker" -ring: assess -quadrant: platforms-and-aoe-services -featured: false ---- - -Docker is best known for its capability to build and run containers. -This is how we have used the term "Docker" in the Tech Radar recently. -But Docker is also a complete production platform, where the capability to build and run Containers is only a small fraction of its capabilities. -At the same time numerous alternate runtimes for containers – like containerd and podman – as well as image builders – like Kaniko and Buildah – have evolved during the last years. -Thanks to the standards established by the Open Container Initiative these tools are mostly interchangeable for the purposes of building and running containers. - -To be more distinct, we now recommend using [Containers and Runtimes as specified by the Open Container Initiative](/platforms-and-aoe-services/oci-container/). -Docker is one of many tools to achieve that. diff --git a/radar/2021-07-01/drupal.md b/radar/2021-07-01/drupal.md deleted file mode 100644 index 6c0d821..0000000 --- a/radar/2021-07-01/drupal.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Drupal" -ring: trial -quadrant: tools ---- - -[Drupal](https://www.drupal.org/) is an open source content management system and framework based on a PHP stack. -It has a huge community, so it's no wonder it's among the top 10 CMS worldwide in terms of market share. - -At AOE we consume Drupal mainly headless via JSON API. We appreciate its large feature set and mature plugin system as well as the general ecosystem. - -In addition, the extensive documentation and setup with [DDEV](/tools/ddev/) make it easy to get started. diff --git a/radar/2021-07-01/eks.md b/radar/2021-07-01/eks.md deleted file mode 100644 index dea36ee..0000000 --- a/radar/2021-07-01/eks.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Amazon EKS" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -[Amazon Elastic Kubernetes Service](https://aws.amazon.com/de/eks/) (Amazon EKS) is a managed service that makes it easy for you to run Kubernetes on AWS without needing to stand up or maintain your own Kubernetes control plane or workloads. -Amazon EKS runs Kubernetes control plane instances across multiple Availability Zones to ensure high availability. -It also provides automated version upgrades and patching for them. - -Amazon EKS is fully supported by [Terraform](/platforms-and-aoe-services/terraform/) which brings the advantage that its configuration is written in code, -which fulfils the [infrastructure as code](/platforms-and-aoe-services/infrastructure-as-code/) philosophy. -Amazon has also implemented important (security) features to their service to ensure that Amazon EKS is well integrated into the broader AWS landscape. -Kubernetes version upgrades and security patches are provided in a reliable schedule and with proper documentation. -Alongside with the managed service, Amazons also provides its own [EKS distribution](https://aws.amazon.com/de/blogs/opensource/introducing-amazon-eks-distro/) which closes the gap for on-premise installations. - -Different Amazon EKS Clusters are in use on a variety of environments like development, integration, testing and production. -We experienced that Kubernetes version updates are done without major efforts or impact to the running cluster. Along with that, using EKS avoids a lot of low-level optimization and component management which were required in manually configured clusters in the past. diff --git a/radar/2021-07-01/elk-stack.md b/radar/2021-07-01/elk-stack.md deleted file mode 100644 index 2f15a5e..0000000 --- a/radar/2021-07-01/elk-stack.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "ELK Stack" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops] -featured: false ---- diff --git a/radar/2021-07-01/figma.md b/radar/2021-07-01/figma.md deleted file mode 100644 index df10d06..0000000 --- a/radar/2021-07-01/figma.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Figma" -ring: adopt -quadrant: tools -tags: [frontend, ux/ui, agile] ---- - -Figma became our go-to tool for the next generation collaborative design. It allowed UX/UI designers, engineers, stakeholders, product managers, and other roles to view, inspect and comment on designs and wireframes, create high- and low-fidelity prototypes, and much more. - -Figma puts together all of the features we used in different tools (Axure, Miro, Abstract, Sketch, Anima, Invision) in one. It allowed us to make a single source of truth for our products, create design systems, and eliminate the vast majority of the pain points we faced in the past. It became beneficial, especially in remote and distributed design work, and speed up all our design-related processes. In addition to its real-time design and collaboration capabilities, Figma also offers an extensive, community-backed plugin collection and a robust API that helps to improve the DesignOps processes. diff --git a/radar/2021-07-01/flowtype.md b/radar/2021-07-01/flowtype.md deleted file mode 100644 index d8e36f9..0000000 --- a/radar/2021-07-01/flowtype.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Flow" -ring: hold -quadrant: tools -featured: false ---- - -With a much larger community, better support from frameworks (React, Angular, Vue) and IDEs and a similar feature set, Typescript is the better choice instead of Flow. \ No newline at end of file diff --git a/radar/2021-07-01/fluentd.md b/radar/2021-07-01/fluentd.md deleted file mode 100644 index 8bc7c68..0000000 --- a/radar/2021-07-01/fluentd.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Fluentd" -ring: assess -quadrant: tools -tags: [devops] ---- - -[Fluentd](https://www.fluentd.org) is a great tool to gather logs, transform them into any required format and distribute them to any logging backend. - -At AOE we use fluentd in different contexts, but mostly to gather logs from kubernetes clusters into data backends like Elasticsearch. diff --git a/radar/2021-07-01/flutter.md b/radar/2021-07-01/flutter.md deleted file mode 100644 index a813d39..0000000 --- a/radar/2021-07-01/flutter.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Flutter" -ring: assess -quadrant: languages-and-frameworks ---- - -[Flutter](https://flutter.io) allows writing native applications for different platforms with a single code base in [Dart](https://dart.dev). - -It provides stable platform implementations for both major mobile platforms iOS and Android. -With [Flutter on the Web](https://flutter.dev/web) it is possible to build single-page applications (SPA) out of the same code with full support for service workers. -The [Desktop](https://flutter.dev/desktop) (Windows, Mac, Linux) platform is currently still in beta (as of mid 2021). - -The compilation into native platform code prevents from bottleneck-issues due context switching and runtime bridging, which can be found in other cross-platform frameworks like [React Native](https://reactnative.dev). - -Comparing to a Javascript-based PWA, Flutter's approach promises a better performance and energy-efficiency. - -We gathered first positive experience with small applications, which used the Alpha and Beta state of Flutter for Linux (x64) and Web by the time of development. diff --git a/radar/2021-07-01/gatling.md b/radar/2021-07-01/gatling.md deleted file mode 100644 index b679ad0..0000000 --- a/radar/2021-07-01/gatling.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Gatling" -ring: adopt -quadrant: tools -featured: false ---- - -Gatling is still a valid tool which is widely used in our teams. -Other alternatives like [Locust](https://locust.io/) exist and fill the same niche but Gatling is a better fit for our toolstack. \ No newline at end of file diff --git a/radar/2021-07-01/graalnative.md b/radar/2021-07-01/graalnative.md deleted file mode 100644 index 025ddd9..0000000 --- a/radar/2021-07-01/graalnative.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Graal Native Image" -ring: trial -quadrant: tools -tags: [coding] ---- - -Native Image is a technology to ahead-of-time compile Java code to a standalone executable, called a native image. -In the process of building a native image all library dependencies, including those from the JDK will be packed in the native image. -The application created as a native image can be run without a JDK. -The natively compiled applications require generally less memory and have shorter start up times. - -We at AOE have already running microservices written in Scala with Graal Native Image. diff --git a/radar/2021-07-01/helm.md b/radar/2021-07-01/helm.md deleted file mode 100644 index c77cea1..0000000 --- a/radar/2021-07-01/helm.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Helm" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -Helm has a fast growing community and is used in more and more projects. -It's our default tool to manage Kubernetes resources - every other alternative has to benchmark itself with it. -Therefore, we have updated it to "adopt". diff --git a/radar/2021-07-01/k6.md b/radar/2021-07-01/k6.md deleted file mode 100644 index ccacfdf..0000000 --- a/radar/2021-07-01/k6.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "k6" -ring: assess -quadrant: tools ---- - -Load Testing is a testing process in which the performance of a software application or system is tested under a specific expected load. -It determines how the system behaves while being accessed by multiple users simultaneously. -The goals of Load Testing is to improve performance bottlenecks and to ensure stability under high traffic. -When done regularly, it provides confidence in the system, its reliability and performance, helps identify the bottlenecks in the system under heavy user stress scenarios before they happen in a production environment, and gives protection against poor user experience when using the system. - -[K6](https://k6.io/) is a developer-centric, free and open-source load testing tool. -The command line runner executes scripts written in JavaScript and allows to configure the execution time and the number of virtual users. -The tool can be used for load testing and performance testing. -However, it can not be used to run tests that rely only on the browser, making it more suitable for testing of APIs. diff --git a/radar/2021-07-01/kafka.md b/radar/2021-07-01/kafka.md deleted file mode 100644 index ca33aa8..0000000 --- a/radar/2021-07-01/kafka.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Kafka" -quadrant: tools -ring: trial -featured: false ---- - -"Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming analytics, data integration, and mission-critical applications." (See http://kafka.apache.org/) - -In comparison with other messaging solutions (such as [RabbitMQ](/tools/rabbitmq/) - Apacha Kafka persist the messages (instead of routing them to subscribers). It is written in Scala and Java, and follows the idea of a “distributed log” where messages are appended to the end (like in a log) - and that log is persisted to disk. Clients can choose where they begin reading from that log - often Kafka Streams is used for this. - -We are using Kafka in data heavy projects - for example in data analytics use cases. diff --git a/radar/2021-07-01/kubernetes-operators.md b/radar/2021-07-01/kubernetes-operators.md deleted file mode 100644 index ccf7fb2..0000000 --- a/radar/2021-07-01/kubernetes-operators.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Kubernetes Operators" -ring: trial -quadrant: methods-and-patterns -tags: [devops] ---- - -The [Kubernetes Operators](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) allow to manage application configuration within Kubernetes through [custom resources](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/). -The operators are implemented as Kubernetes controllers and all interaction happens through the Kubernetes API. -This allows to manage application deployment and configuration with the same toolset, it also allows to create another abstraction layer to describe the desired application state and let the operator decide how this state should be reached. - -Kubernetes Operators are widely available for many community projects. -These can be shared and found on [operatorhub.io](https://operatorhub.io/). -Implementing custom operators is greatly simplified through the [Operators SDK](https://sdk.operatorframework.io/) which is used as base for many [existing implementations](https://github.com/operator-framework/awesome-operators). - -We use operators in most projects and prefer them to custom management code. -We encourage teams to try the existing community operators for e.g. observability and operations tasks. \ No newline at end of file diff --git a/radar/2021-07-01/loki.md b/radar/2021-07-01/loki.md deleted file mode 100644 index 1cf6c25..0000000 --- a/radar/2021-07-01/loki.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Loki" -ring: trial -quadrant: tools -tags: [devops] ---- - -Archiving indexed log data with a system like [Elasticsearch](/platforms-and-aoe-services/elasticsearch/) can be expensive, and archiving it as simple text files makes it hard to query. [Loki](https://grafana.com/oss/loki/) solves this issue by adding a reference database based on [Kubernetes](/platforms-and-aoe-services/kubernetes/) labels to each log line, similar to [Prometheus](/platforms-and-aoe-services/prometheus/), but storing the log data inside a simple blob storage like AWS S3. This allows the user to query the data by predefined labels and keeps the costs for indexing low. - -Another benefit is that Loki does not have an endpoint for mutating log data, making the data immutable from a potentially compromised system. - -At AOE, we use Loki for long-term log archiving in several Kubernetes clusters. diff --git a/radar/2021-07-01/microfrontends.md b/radar/2021-07-01/microfrontends.md deleted file mode 100644 index 623bb55..0000000 --- a/radar/2021-07-01/microfrontends.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Micro Frontends" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture] ---- - -The Micro Frontends approach continues to prove to be a valuable pattern for large-scale systems developed by several teams. -Therefore, we moved this pattern to "adopt". - -We use [page composing](/methods-and-patterns/page-composing/) as one implementation of this pattern. diff --git a/radar/2021-07-01/mlops.md b/radar/2021-07-01/mlops.md deleted file mode 100644 index 2624b06..0000000 --- a/radar/2021-07-01/mlops.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "MLOps" -ring: assess -quadrant: methods-and-patterns -tags: [devops] ---- - -After spending some time diving into the world of data science and machine learning we're realizing our existing DevOps best practices aren't a perfect fit for the specific workflows we're seeing here. -Data science is not only about code but also all about managing large datasets and models. -Data is being analyzed, models are being trained in many iterations and then software needs to be deployed that does the actual prediction/inference. -And this circle (see: CRISP-DM) will repeat over and over again during the development phase and after the first production release. -"**MLOps**" extends the DevOps best practices in order to cover these new scenarios specific to machine learning workflows. - -[DVC](https://dvc.org/) helps dealing with large data sets and models by connecting external storage to your Git repositories and [CML](https://cml.dev/) helps integrating the CI/CD into your GitHub or GitLab workflows. -Since we're already using Kubernetes extensively we're exploring [Kubeflow](https://www.kubeflow.org/) for running the full machine learning workflow on Kubernetes clusters. diff --git a/radar/2021-07-01/nats.md b/radar/2021-07-01/nats.md deleted file mode 100644 index a6c4996..0000000 --- a/radar/2021-07-01/nats.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "NATS" -ring: assess -quadrant: tools -tags: [architecture, devops] ---- - -[NATS](https://nats.io/) is a cloud native messaging and stream-data system for modern distributed software systems. -Two [design-goals](https://github.com/nats-io/nats-general/blob/master/architecture/DESIGN.md) were simplicity and performance. -These are adopted by selecting [golang](https://golang.org/) for the server implementation and reducing the memory footprint for both: server- and client-side. -The server-side provides simple and efficient horizontal scaling (e.g. deploying it inside Kubernetes) and the small client-footprint allows us to use it in embedded-systems, edge-computing and IoT devices e.g. for command and controll use-cases. -Also, the long list of existing [integrations](https://docs.nats.io/compare-nats#integrations) and the plugin-systems bring a great flexibility. diff --git a/radar/2021-07-01/next-js.md b/radar/2021-07-01/next-js.md deleted file mode 100644 index 77a6d2f..0000000 --- a/radar/2021-07-01/next-js.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Next.js" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding, frontend] ---- - -[Next.js](https://nextjs.org/) claims itself as **the** React framework for production. -It comes with first-class developer experience and many features for example: hybrid static & server-side rendering, TypeScript support, image optimization, code splitting & much more. - -We at AOE are already using Next.js for some big projects. -The main reason for that is the modern stack (React with TypeScript) and the possibility to render on the server (static pre-rendering or dynamic SSR) to be able to get crawled by search engines and stay SEO relevant. diff --git a/radar/2021-07-01/node-js.md b/radar/2021-07-01/node-js.md deleted file mode 100644 index e32f2c3..0000000 --- a/radar/2021-07-01/node-js.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "node.js" -ring: adopt -quadrant: languages-and-frameworks -featured: false ---- diff --git a/radar/2021-07-01/nx.md b/radar/2021-07-01/nx.md deleted file mode 100644 index 031693f..0000000 --- a/radar/2021-07-01/nx.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "NX" -ring: assess -quadrant: tools ---- - -[Nx](https://nx.dev/) is a suite of powerful, extensible dev tools to help you architect, test, and build at any scale. -It is mainly applicable in the environment of React, Angular and Node.js and tries to simplify and streamline the work in a mono repo. - -At AOE, we are currently taking our first steps with NX in a mono repo that is home to both our React and Next.js based frontend and our [Go](/languages-and-frameworks/go-lang/) / [Flamingo](/languages-and-frameworks/flamingo/) based backend. - -The integration with the Node.js components (React, Next.js, Cypress) works smoothly and brings the expected benefits such as faster build times through intelligent caching. -Support for Go is currently only rudimentary, which is why NX still has to prove itself in this area. - -Especially in the environment of Node.js in combination with the use of a mono repo, NX is worth a look. diff --git a/radar/2021-07-01/oci-container.md b/radar/2021-07-01/oci-container.md deleted file mode 100644 index b585367..0000000 --- a/radar/2021-07-01/oci-container.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "OCI Container" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -OCI-compatible containers are currently the most-used solution for creating and managing container-based infrastructures and deployments. - -Containers and their runtime are an easy way to run applications and services as an isolated process (using Linux kernel cgroups, network namespaces and custom mounts). - -In a DevOps environment, this helps a lot as we can run the exact same software and runtime (such as NodeJS) on both production and locally while developing. This enables us to debug our software much easier. We can compose our project development setup out of small containers. Also, containers allow us to keep our development environment much simpler and independent of our developer's operating system or pre-installed software versions. - -In a CI environment building the containers allows us to package and test the whole environment instead of different software components on different runtimes in a much more stable way. - -Backed by services such as [Kubernetes](/platforms-and-aoe-services/kubernetes/) and [Helm](/platforms-and-aoe-services/helm/), we can deploy containers on a flexible infrastructure and enable our developers to test their software more easily in different environments. - -Here at AOE, we use containers in different projects to become more flexible and faster, which increases our focus on development of even better and more stable software. diff --git a/radar/2021-07-01/open-policy-agent.md b/radar/2021-07-01/open-policy-agent.md deleted file mode 100644 index 129d094..0000000 --- a/radar/2021-07-01/open-policy-agent.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Open Policy Agent" -ring: assess -quadrant: tools -tags: [security, architecture] ---- - -[Open Policy Agent](https://www.openpolicyagent.org/) (OPA) is a framework which allows modelling and evaluating policy access services. -The underlying expression language *Rego* is purpose-built for the policy evaluations and implements the **Policy As Code** pattern. - -This allows to decouple policy from the service's code, so you can release, and review policies separately. - -The benefits of using OPA and Rego comes from the various available integrations into other cloud-native services and tools. -It can be used with the "Kubernetes Admission Controller", to authorize decisions within a Service Mesh or as part of infrastructure evaluation pipelines. - -We use OPA in some of our infrastructure pipelines to ensure that changes don't have undesired impact or within Kubernetes to evaluate the overall conformity of our deployments with the given policies. - -We have also evaluated OPA as part of permission management in distributed architectures. -The concept promises to provide value especially for distributed enterprise architectures. diff --git a/radar/2021-07-01/pact.md b/radar/2021-07-01/pact.md deleted file mode 100644 index da024ba..0000000 --- a/radar/2021-07-01/pact.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "PACT" -ring: trial -quadrant: tools -featured: false ---- - -At AOE we continue to use PACT but would like to use it even more. -It therefore remains in the trial ring but was faded out from the overview page. \ No newline at end of file diff --git a/radar/2021-07-01/page-composing.md b/radar/2021-07-01/page-composing.md deleted file mode 100644 index 8026cb7..0000000 --- a/radar/2021-07-01/page-composing.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Page Composing" -ring: trial -quadrant: methods-and-patterns -tags: [architecture] ---- - -Page composing is a way to aggregate multiple independent page fragments into one combined web page. -As an implementation of [Micro Frontends](/methods-and-patterns/microfrontends/), this approach supports to deploy and run services agnostic to the technologies used per team. - -The concept builds upon the fact that all involved services deliver valid HTML as their output. -Our solution is a small application which takes care of gathering the page fragments from all services and composing each into a defined HTML template. -A configuration layer further allows controlling which fragment gets pulled from the serving instance. - -With such a page composing application in place, teams can autonomously develop, deploy and operate their service with the freedom of choosing technologies and release strategies. - -Martin Fowler et al. described this as [Server-side template composition](https://martinfowler.com/articles/micro-frontends.html#Server-sideTemplateComposition). diff --git a/radar/2021-07-01/pin-external-dependencies.md b/radar/2021-07-01/pin-external-dependencies.md deleted file mode 100644 index 6efa858..0000000 --- a/radar/2021-07-01/pin-external-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Pin external dependencies" -ring: adopt -quadrant: methods-and-patterns -featured: false ---- diff --git a/radar/2021-07-01/plant-uml.md b/radar/2021-07-01/plant-uml.md deleted file mode 100644 index a80f0bd..0000000 --- a/radar/2021-07-01/plant-uml.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Plant UML" -ring: adopt -quadrant: tools -featured: false ---- \ No newline at end of file diff --git a/radar/2021-07-01/postman.md b/radar/2021-07-01/postman.md deleted file mode 100644 index 3e7e549..0000000 --- a/radar/2021-07-01/postman.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Postman" -ring: adopt -quadrant: tools -featured: false ---- - -Postman is now the tool of choice for API testing and widely used in our projects. -We therefore moved it to the **Adopt** level. diff --git a/radar/2021-07-01/prometheus.md b/radar/2021-07-01/prometheus.md deleted file mode 100644 index 503a2a9..0000000 --- a/radar/2021-07-01/prometheus.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Prometheus" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -[Prometheus](https://prometheus.io) is an open-source monitoring and alerting system. -It was the second project within the CNCF which reached the "graduated" status and has since seen a large rate of adoption across many CNCF projects. -It primarily utilizes a pull-based metrics flow through HTTP which allows the easy integration of a variety of application-specific metrics sources. -Compared to other monitoring systems it stands out in its simple, still powerful and fully code-based configuration and the equally powerful service discovery mechanism. - -Prometheus integrates very well with Grafana which is our tool of choice for dashboard visualization. -Through the [Prometheus Operator](https://github.com/prometheus-operator/prometheus-operator) project, the monitoring system can be configured through Kubernetes custom resource definitions. -These can be shipped by development teams alongside with their application deployments and allow [sharing responsibility](/methods-and-patterns/shared-responsibility/) for monitoring tasks between operations and engineering teams with a clear interface. - -With [Cortex](https://cortexmetrics.io/) and [Thanos](https://thanos.io/) the Prometheus-ecosystem knows two well-settled solutions for high-availability of the underlying time series database and with [Amazon Managed Services for Prometheus](https://aws.amazon.com/en/prometheus/) there's also a SaaS-Solution available. - -We use Prometheus in nearly every project, it's an essential part of our underlying operations and also well understood by many development teams. diff --git a/radar/2021-07-01/protobuf.md b/radar/2021-07-01/protobuf.md deleted file mode 100644 index d60e563..0000000 --- a/radar/2021-07-01/protobuf.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Protobuf" -ring: adopt -quadrant: languages-and-frameworks -featured: false ---- \ No newline at end of file diff --git a/radar/2021-07-01/pulumi.md b/radar/2021-07-01/pulumi.md deleted file mode 100644 index a1ee6c4..0000000 --- a/radar/2021-07-01/pulumi.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Pulumi" -ring: assess -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -[Pulumi](https://www.pulumi.com/) is a tool in the infrastructure-as-code space that is quite similar to [Terraform](https://www.terraform.io/) in that it also provide a declarative way to provision cloud infrastructure and services. - -What makes it interesting is that all configuration is done in one of currently 4 supported general-purpose languages/runtimes: -* Javascript/Typescript -* Python -* .NET Core -* Go - -This differs from the Terraform approach which is using its own domain specific 'Terraform Configuration Language'. -While Terraform kept this language intentionally small and limited in functionality in order to make it purely declarative sometimes there is the need to abstract over configuration to keep your configs "DRY". -For this there are modules in Terraform but sometimes all you need is a small function to iterate an input. - -This is where Pulumi shines by allowing you to use the powers of the chosen programming language to build whatever abstractions you need to get the job done. - -We currently test-drive it in small projects to compare it over Terraform. diff --git a/radar/2021-07-01/python-for-infrastructure.md b/radar/2021-07-01/python-for-infrastructure.md deleted file mode 100644 index 44b46ad..0000000 --- a/radar/2021-07-01/python-for-infrastructure.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Python for Infrastructure Glue Code" -ring: assess -quadrant: platforms-and-aoe-services -tags: [devops, coding] ---- - -[Python](https://www.python.org) is an easy to learn programming language that is pre-installed on most Linux distributions and CI runners. -This makes it an ideal candidate for infrastructure glue code and adapters. - -Shell scripts serve the same purpose. -But they usually start simple and get more complex over time. -This is the point where Python's features like testing capabilities, modularity, variable scoping and refactoring support comes in strong. -We found that Python scripts are easier maintained in the long run and pose a lower barrier for contributions by our development teams. -And they run across platforms and shells without much trouble which is a big plus for developers running different operating systems. - -The Python language has a wide eco-system and a vast module library that can simplify scripting significantly. -We currently value [requests](https://pypi.org/project/requests/) for HTTP API calls and [Click](https://click.palletsprojects.com/en/7.x/) for simple interactive CLI scripts, along with [pytest](https://docs.pytest.org/) for automated testing. diff --git a/radar/2021-07-01/redux.md b/radar/2021-07-01/redux.md deleted file mode 100644 index 2bfbe9f..0000000 --- a/radar/2021-07-01/redux.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Redux" -ring: trial -quadrant: languages-and-frameworks -featured: false ---- diff --git a/radar/2021-07-01/renovate.md b/radar/2021-07-01/renovate.md deleted file mode 100644 index 634898f..0000000 --- a/radar/2021-07-01/renovate.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Renovate" -ring: trial -quadrant: tools ---- - -[Renovate](https://github.com/renovatebot/renovate/) is an automated dependency update tool. -It vastly reduces the time and effort spent on keeping a project's dependencies up-to-date by automatically creating merge requests whenever a dependency needs to be updated. -The tool is easy to set up and configure, offers built-in support for monorepo architectures and works with various programming languages and package managers, e.g. - -- JavaScript & Yarn -- Java & Gradle -- PHP & Composer - -At AOE, we use the [Renovate CLI tool](https://www.npmjs.com/package/renovate/) in the CI pipelines of a constantly growing number of projects. diff --git a/radar/2021-07-01/rust.md b/radar/2021-07-01/rust.md deleted file mode 100644 index 85d3bc1..0000000 --- a/radar/2021-07-01/rust.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Rust" -ring: "assess" -quadrant: "languages-and-frameworks" -tags: [coding] ---- - -[Rust](https://www.rust-lang.org/) is a young and modern programming language initially developed by [Mozilla Research](https://research.mozilla.org/). - -It provides a strict type system, compile-time memory-safety, excellent [package manager](https://doc.rust-lang.org/cargo/), object-oriented & functional programming, task-based concurrency, good readability and maintainability and many more. -It has a C/C++ [comparable efficiency](https://greenlab.di.uminho.pt/wp-content/uploads/2017/10/sleFinal.pdf) and helps the programmer to avoid unnecessary security-relevant memory-related bugs during compile-time. -Since every memory-allocation is directly released after it can't be used anymore ([owner deletion](https://medium.com/@rabin_gaire/memory-management-rust-cf65c8465570)), no garbage collection is needed. - -C/C++ code/libraries can be integrated by its [binding generator tool](https://github.com/rust-lang/rust-bindgen). - -At stackoverflow it is votes 5 years in a row ([2016](https://insights.stackoverflow.com/survey/2016#technology-most-loved-dreaded-and-wanted), [2017](https://insights.stackoverflow.com/survey/2017#technology-_-most-loved-dreaded-and-wanted-languages), [2018](https://insights.stackoverflow.com/survey/2018#technology-_-most-loved-dreaded-and-wanted-languages), [2019](https://insights.stackoverflow.com/survey/2019#technology-_-most-loved-dreaded-and-wanted-languages), [2020](https://insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-languages-loved)) for the `most loved programming-language` by programmers. -The [popularity](https://insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-languages-loved) is growing continuous. - -With it's memory-safety/efficiency and energy-efficiency it helps to save money for bug-fixing, energy and cloud-computing. diff --git a/radar/2021-07-01/rxjs.md b/radar/2021-07-01/rxjs.md deleted file mode 100644 index af16ce3..0000000 --- a/radar/2021-07-01/rxjs.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "RxJs" -ring: adopt -quadrant: languages-and-frameworks - ---- -RX/JS aka reactive streams - -RxJS is an implementation for the reactive programming paradigm which implements mostly the observer and iterator pattern and follows the functional programming ideas. -The pattern actually got a renaissance because it's not completely new but has new implementations in many frameworks and languages like Angular, Akka, Spring and many more. -Reason for that attention actually is (in the JavaScript world), that observables can be cancelled (by rules too) and observables can pass (stream) data on multiple events. -Both aspects are not well realizable using promises e.g. and both were also detected as a huge limitation in the JavaScript community — and so it's worth to get an understanding for reactive programming in general. - -We at AOE actually use RxJS in combination with Angular and can fully recommend the approach of observables. diff --git a/radar/2021-07-01/scala3.md b/radar/2021-07-01/scala3.md deleted file mode 100644 index 67dba0d..0000000 --- a/radar/2021-07-01/scala3.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "Scala 3" -ring: "trial" -quadrant: "languages-and-frameworks" -tags: [coding] ---- - -[Scala 3](https://docs.scala-lang.org/scala3/) is the successor of the Scala 2.x series programming language. - -It's not just a small iteration on Scala 2 but a complete overhaul of the language trying to improve in several areas like: -* Syntax - * "quiet" syntax for control structures like `if`, `while` and `for` - * optional `new` operator - * Optional braces with significant-indentation syntax like in python - * Completely revised `implicit`s - see below -* Contextual Abstractions focusing on intent instead of mechanics - * Abstracting over contextual information with `using` - * Providing type-class instances via `given` - * direct extension method syntax `extension (s: String) def pirate: String = s"$s arr!"` -* Type System improvements - * `enum`s - * opaque types - * intersection and union types - * dependent function types - * polymorphic function types - * type lambdas - * match types -* Improvements for object oriented design -* Completely new metaprogramming facilities while Scala 2 macros were removed - -Even with these big changes Scala 3 provides a great compatibility story supporting Scala >2.13.5 libraries in Scala 3 projects and vice versa. - -Although slowly we will update our existing Scala 2 codebase to Scala 3 over the next months and years to take advantage of the improvements made. diff --git a/radar/2021-07-01/semver2.md b/radar/2021-07-01/semver2.md deleted file mode 100644 index 5885769..0000000 --- a/radar/2021-07-01/semver2.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Semantic Versioning 2.0" -ring: adopt -quadrant: methods-and-patterns -featured: false ---- - -[Semantic Versioning 2.0](https://semver.org/spec/v2.0.0.html) is a scheme for specifying a software's version. -As the de facto standard, this is widely used and established in all areas of software development. -It offers a clear way of communicating changes over the lifetime of the software being developed. - -Especially in large-scale projects with many components being dependent on each other, it is important to use unambiguous communication across teams. \ No newline at end of file diff --git a/radar/2021-07-01/service-mesh.md b/radar/2021-07-01/service-mesh.md deleted file mode 100644 index ede3b27..0000000 --- a/radar/2021-07-01/service-mesh.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Service Mesh" -ring: assess -quadrant: platforms-and-aoe-services -tags: [architecture, devops, security] - ---- -**Service Mesh** is a solution which makes service to service communication more comfortable and more secure in large microservice architectures. -It decouples the routing part from the microservices which allows a service mesh implementation to offer features like: -- Service Discovery (canary routing, a-b testing, etc.) -- Resilience (circuit breaking, timeouts, etc.) -- Observability (route metrics, traffic logging, etc.) -- End-to-end encryption (mTLS) - -service mesh implementations: -- [Istio](https://istio.io/) -- [Open Service Mesh](https://openservicemesh.io/) -- [Kuma](https://kuma.io/) -- and many more... - -At AOE we are using service meshes in multiple projects and are assessing best-practices and service mesh implementations. diff --git a/radar/2021-07-01/settings-injection.md b/radar/2021-07-01/settings-injection.md deleted file mode 100644 index f0d2fd1..0000000 --- a/radar/2021-07-01/settings-injection.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Settings Injection" -ring: adopt -quadrant: methods-and-patterns -featured: false ---- diff --git a/radar/2021-07-01/shared-responsibility.md b/radar/2021-07-01/shared-responsibility.md deleted file mode 100644 index 6330188..0000000 --- a/radar/2021-07-01/shared-responsibility.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Shared Responsibility Model" -ring: trial -quadrant: methods-and-patterns -tags: [devops] ---- - -Since introducing "Platform Engineering Team" who build, maintain and operate our Kubernetes clusters and other related platform services, the question occurs who is in charge of the various tasks like keeping things up and running, applying critical security fixes, update software in general, keeping an eye on the bill and many more topics. -We're not proposing a solution on how to split responsibilities here, but we want to raise awareness for bringing everybody together and formally discuss all responsibilities and write them down similar to (and possibly extending) AWS's [shared responsibility model](https://aws.amazon.com/compliance/shared-responsibility-model/). -Some topics are 24/7 on-call support, broken deployment pipelines, and vulnerability scans. diff --git a/radar/2021-07-01/sitespeed.md b/radar/2021-07-01/sitespeed.md deleted file mode 100644 index 8970a29..0000000 --- a/radar/2021-07-01/sitespeed.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Sitespeed.io" -ring: assess -quadrant: tools ---- - -Web Performance Monitoring is the process of measuring a Web service’s ability to respond efficiently to user interactions. -Data gathered through monitoring helps analyze performance bottlenecks, plan improvements, and measure a site's responsiveness. - -[Sitespeed.io](https://www.sitespeed.io/) is a set of Open Source tools that makes it easy to monitor and measure the performance of a website. -It tests websites using real (or headless) browsers, simulating users connectivity and collecting important user-centric metrics. -The tools are packaged as a docker image that can be easily deployed. -Data collected can be saved to different locations for later analysis which makes it easy to track changes. -Last, Sitespeed.io can be used as part of a continuous integration pipeline or as part of a monitoring solution. diff --git a/radar/2021-07-01/sketch.md b/radar/2021-07-01/sketch.md deleted file mode 100644 index 5d97177..0000000 --- a/radar/2021-07-01/sketch.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Sketch" -ring: adopt -quadrant: tools -tags: [ux/ui] ---- - -Figma is a vector graphics editor and primarily web-based prototyping tool, with additional offline features enabled by desktop applications for macOS and Windows. The Figma Mirror companion apps for Android and iOS allow viewing Figma prototypes on mobile devices. The next step in our toolchain development comes right after the Sketch+Abstract approach. Figma enabled the next level of collaboration between designers, stakeholders, and frontend engineers. diff --git a/radar/2021-07-01/state-management-pattern.md b/radar/2021-07-01/state-management-pattern.md deleted file mode 100644 index 707b675..0000000 --- a/radar/2021-07-01/state-management-pattern.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "State Management Pattern" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture, coding] ---- - -State Management is a design pattern with the goal of properly sharing state data across components and separating domain representation from state management. -This pattern is applied by many popular web frameworks such as [Vuex](/languages-and-frameworks/vuex/), [Redux](/languages-and-frameworks/redux/) or [Flux](/methods-and-patterns/flux/). - -Especially in [reactive](/methods-and-patterns/reactive-programming/) systems, this pattern helps to solve the task of maintaining decoupled, stateless components with immutable data. -The ways of implementing state management differs and depends on the specific requirements of the application at hand. - -For distributed backend systems one might want to utilize [Akka's](/languages-and-frameworks/akka/) cluster sharding module to elastically manage domain object states. - -We use the various state management patterns across most [Vue](/languages-and-frameworks/vue/) and [React](/languages-and-frameworks/react/) projects that warrant them. diff --git a/radar/2021-07-01/storybook.md b/radar/2021-07-01/storybook.md deleted file mode 100644 index d683a55..0000000 --- a/radar/2021-07-01/storybook.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Storybook" -ring: adopt -quadrant: tools -tags: [frontend, ux/ui] ---- - -In recent years, Storybook has become the de facto standard for creating UI components in isolation. -We have been using Storybook in many projects for quite some time now and really loving the approach. - -With version 6, the config has been greatly simplified to achieve the goal of a zero-config approach in the future. -* compatible and easy to integrate with major frameworks like React, Angular, Vue.js ... - * presets for Create React App, Next.js, nuxt ... -* build in TypeScript support -* build in addons like controls, actions, docs ... -* growing library of third party addons diff --git a/radar/2021-07-01/strapi.md b/radar/2021-07-01/strapi.md deleted file mode 100644 index 6854c94..0000000 --- a/radar/2021-07-01/strapi.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Strapi" -ring: trial -quadrant: tools -tags: [frontend] ---- - -Strapi is a headless CMS built with Javascript on Node.js. -Its data-centered approach offers great flexibility for many use cases by integrating with the available APIs. - -Strapi's API comes in a RESTful and [GraphQL](/methods-and-patterns/graphql/) variant. -Both perfectly support the [API-first design approach](/methods-and-patterns/api-first-design-approach/). - -Ever since the stable release version 3.0.0 from mid-2020, the CMS reached market maturity and offers a good choice for scalable headless CMSs. -As of the 3.6 release in April 2021, Strapi features [full internationalization support](https://strapi.io/blog/announcing-content-internationalization-v3-6), making it a viable candidate to be evaluated toe to toe with solutions like Drupal. - -At AOE we are evaluating Strapi for various projects, appreciating its straightforward installation, setup, and use by editors in lieu of more heavy-weight solutions used in the past. diff --git a/radar/2021-07-01/tailwindcss.md b/radar/2021-07-01/tailwindcss.md deleted file mode 100644 index 5de43e8..0000000 --- a/radar/2021-07-01/tailwindcss.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Tailwind CSS" -ring: trial -quadrant: languages-and-frameworks ---- - -Tailwind CSS is a framework that heavily utilizes CSS classes. -What seems to be a very different approach in the beginning, turns into a big "ah-ha-moment" during development and even more during the build step. -CSS classes are entirely generated based on a configuration file that outlines the entire design system including states, nuances, etc. -Tailwind's high flexibility results in a set of CSS classes aligned with UX/design, requiring just a fraction of code compared to a self-built solution. -Colours, sizes, spaces etc. can have meaningful names that are easy to remember and shared between developers and designers. -In turn, this results in a shared language with less explanation required. -Support for deep integration into the development and build processes ensure optimized build times with incremental rebuilds only on parts really necessary. -This obviously leads to very small build sizes with nearly 100% CSS coverage. - -The deep integration and the extraordinary small build sizes were the main aspects for us to choose Tailwind CSS for resource-limited projects in the field of industry 4.0. -These projects have a huge demand on a variety of interaction forms. - -Tailwind helps us to fulfil modern user expectations by reducing the complexity of sophisticated industrial processes with a multi-device approach. - -This is an unspoken expectation of today's operators of industrial processes. -The evolution from classic cellular phones towards smartphones showed, there is still a huge untapped potential for usability improvements and adaptive processes, that reduce complexity especially the industry 4.0 field. diff --git a/radar/2021-07-01/team-start-page.md b/radar/2021-07-01/team-start-page.md deleted file mode 100644 index 6d2daf0..0000000 --- a/radar/2021-07-01/team-start-page.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Team Start Page" -ring: adopt -quadrant: methods-and-patterns -tags: [quality assurance, documentation] ---- - -A team start page helps (new) members to orientate themselves. -It normally displays all team members with their roles and contact data as well as a collection of links to the necessary tools, e.g. - -* Project environments (staging, prod, ...) -* Project development setup -* Version control system -* Code Review Tool -* Team rules -* Slack invitation -* ... - -Simply things, everyone should know. - -At AOE we care to have a team start page for each team in our wiki. diff --git a/radar/2021-07-01/vue.md b/radar/2021-07-01/vue.md deleted file mode 100644 index 5477f8f..0000000 --- a/radar/2021-07-01/vue.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Vue.js" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding, frontend] ---- - -Updated to "adopt". diff --git a/radar/2021-07-01/vuex.md b/radar/2021-07-01/vuex.md deleted file mode 100644 index 162e7cf..0000000 --- a/radar/2021-07-01/vuex.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Vuex" -ring: assess -quadrant: languages-and-frameworks -featured: false ---- diff --git a/radar/2021-07-01/wiremock.md b/radar/2021-07-01/wiremock.md deleted file mode 100644 index 4e8b750..0000000 --- a/radar/2021-07-01/wiremock.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "WireMock" -ring: adopt -quadrant: tools -featured: false ---- - -Updated to "adopt". \ No newline at end of file diff --git a/radar/2021-07-01/zero-trust.md b/radar/2021-07-01/zero-trust.md deleted file mode 100644 index 60c4d59..0000000 --- a/radar/2021-07-01/zero-trust.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Zero Trust" -ring: adopt -quadrant: methods-and-patterns -tags: [security, architecture] ---- - -Because this approach is more and more used and especially useful for distributed architectures, we updated this item to "adopt" and recommend using it in relevant problem areas. \ No newline at end of file diff --git a/radar/2022-03-28/api-first-design-approach.md b/radar/2022-03-28/api-first-design-approach.md deleted file mode 100644 index dbb5e8c..0000000 --- a/radar/2022-03-28/api-first-design-approach.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "API-First Design Approach" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture] ---- - -The API of any software we develop shapes in which way developers, teams, customers and users interact with our -software. - -No matter if a Frontend-API like GraphQL, a rpc-API like gRPC or an internal API published by a module in a larger -project or shared library, messing the API up always creates headaches and is hard to correct. -If we stick to semantic versioning, it's actually pretty impossible to change a once-published API without breaking -consumers. - -By today's standards we prioritize API design before actual development, to be clear on how our software interacts, and -thus move this pattern to "adopt". diff --git a/radar/2022-03-28/argocd.md b/radar/2022-03-28/argocd.md deleted file mode 100644 index 5fb313b..0000000 --- a/radar/2022-03-28/argocd.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "Argo CD" -ring: trial -quadrant: tools -tags: [ci/cd] ---- - -We've been managing the state of application deployments in YAML files via Git repositories in the past. But we still -wouldn't call this GitOps. A lot of custom glue code and tools were involved. -While [helmfile](https://github.com/roboll/helmfile) replaces some of our custom tooling in a nice way we've also been -trying a new approach with [Argo CD](https://argoproj.github.io/cd/). - -Argo CD watches Git repositories continuously and makes sure the state defined there is applied to the Kubernetes -cluster. It introduces a couple of CRDs including one representing a Helm deployment. Using -an "[app of apps](https://argo-cd.readthedocs.io/en/stable/operator-manual/cluster-bootstrapping/#app-of-apps-pattern)" -pattern you can bundle multiple apps together and use existing Git workflows (branching, tagging, PR) to manage releases -to your various stages. - -Also, the fact the Argo CD only needs read-only access to the Git repositories makes it a lot cleaner from a security -point of view since no credentials to any clusters need to be buried in any CI/CD pipelines anymore. - -Additionally, Argo CD comes with a nice web frontend that gives a lot of insight into what has been deployed and where -problems might exist. For many developers this view on the cluster (with focus on their apps) might be the first go-to -for checking their apps and troubleshooting issues making other tools like Lens or access via kubectl obsolete. diff --git a/radar/2022-03-28/aws_fargate.md b/radar/2022-03-28/aws_fargate.md deleted file mode 100644 index b2dab30..0000000 --- a/radar/2022-03-28/aws_fargate.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "AWS Fargate" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -It doesn't always have to be Kubernetes. For projects with a small number of applications launching and managing a Kubernetes cluster might be just too much. AWS Fargate is a nice alternative for running your containerized applications. Everything can be provisioned via Terraform and AWS Fargate, which allows you not having to deal with clusters or nodes abstracting everything away from you. diff --git a/radar/2022-03-28/babel.md b/radar/2022-03-28/babel.md deleted file mode 100644 index 6e3c4ab..0000000 --- a/radar/2022-03-28/babel.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Babel" -ring: adopt -quadrant: languages-and-frameworks -featured: false ---- diff --git a/radar/2022-03-28/backstage.md b/radar/2022-03-28/backstage.md deleted file mode 100644 index 2d89b92..0000000 --- a/radar/2022-03-28/backstage.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "backstage" -ring: assess -quadrant: tools -tags: [documentation, agile] ---- - -We see a lot of clustering in teams, microservices, libraries, and so on. We think a centralized software catalog -like [Backstage](https://backstage.io/) can help use to get a clearer view of our stack and the dependencies of a -platform. -It also helps to get the information and documentation you need as a developer more quickly. - -Backstage is an open-source developer portal platform created by Spotify. There is a very active community around it -with already a lot of plugins for integrations with other tools, ci, monitoring and so on. - -At AOE we assess backstage in a big project with a subset of features. diff --git a/radar/2022-03-28/bareid.md b/radar/2022-03-28/bareid.md deleted file mode 100644 index 7cb265e..0000000 --- a/radar/2022-03-28/bareid.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Bare.ID" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops, security] ---- - -[Bare.ID](https://bare.id) is our solution to the problem of operating and maintaining a [Keycloak](https://keycloak.org) cluster: a SaaS offering for a managed Keycloak cluster. -By providing additional features such as an easy-to-use-management console, multiple authentication factors and a gallery of one-click integrations for well-known applications, Bare.ID brings additional value and takes off operating a redundant Keycloak cluster by yourself. -All hosting and operations happens in Germany and Europe to ensure the highest data privacy and security requirements. diff --git a/radar/2022-03-28/colima.md b/radar/2022-03-28/colima.md deleted file mode 100644 index a9047b9..0000000 --- a/radar/2022-03-28/colima.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "Colima" -ring: assess -quadrant: tools -featured: false ---- - -[Colima](https://github.com/abiosoft/colima) provides container runtimes on macOS with minimal setup. - -At AOE, we are using Colima as drop-in replacement -for [Docker Desktop](https://www.docker.com/products/docker-desktop/). - -The main benefits are - -- Support of M1 Macs -- Simple CLI interface - -as well as the usual requirements for container runtimes like - -- Docker and Containerd support -- Port forwarding -- Volume mount -- Kubernetes diff --git a/radar/2022-03-28/container-based-builds.md b/radar/2022-03-28/container-based-builds.md deleted file mode 100644 index 3888025..0000000 --- a/radar/2022-03-28/container-based-builds.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Container-based builds" -ring: adopt -quadrant: methods-and-patterns -featured: false ---- diff --git a/radar/2022-03-28/conventionalcommits.md b/radar/2022-03-28/conventionalcommits.md deleted file mode 100644 index fabe829..0000000 --- a/radar/2022-03-28/conventionalcommits.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Conventional Commits" -ring: adopt -quadrant: methods-and-patterns ---- - -Conventional commits are being widely used in our teams, therefore we're changing this to adopt. Using commit messages -which follow the [conventional commits specification](https://www.conventionalcommits.org/en/v1.0.0/) helps us to easily -process changes made within a software release. It also helps to reduce confusion around commit message requirements for -new team members. - -The [Semanticore](https://github.com/AOEpeople/semanticore) release bot is a tool we published, which utilizes -conventional commits to maintain the release notes of our software and suggests the correct version of the upcoming -release. diff --git a/radar/2022-03-28/crc.md b/radar/2022-03-28/crc.md deleted file mode 100644 index 511f2ae..0000000 --- a/radar/2022-03-28/crc.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "CRC Games" -ring: assess -quadrant: methods-and-patterns -featured: false ---- diff --git a/radar/2022-03-28/css-in-js.md b/radar/2022-03-28/css-in-js.md deleted file mode 100644 index 0e9d2cc..0000000 --- a/radar/2022-03-28/css-in-js.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "CSS-in-JS" -ring: adopt -quadrant: methods-and-patterns ---- - -At AOE we use CSS-in-JS over regular CSS because it provides a much better developer experience and plays nicely together with modern component libraries like React. diff --git a/radar/2022-03-28/dependency-update-scan.md b/radar/2022-03-28/dependency-update-scan.md deleted file mode 100644 index 47ed335..0000000 --- a/radar/2022-03-28/dependency-update-scan.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Dependency Update Scan" -ring: adopt -quadrant: methods-and-patterns ---- - -Tools for automated dependency updates continue to offer a big productivity gain when integrated well into the build workflow. - -Nonetheless, this comes not without a word of warning. -While it's great in theory, constant updates might quickly lead to a bombardment of merge requests. -It is crucial that the chosen tools work reliably and are really well integrated. Otherwise, this might become overwhelming for teams. -As an alternative, we also had good experience with disabling automatic merge requests and just manually triggering a job when we wanted to take care of the updates. diff --git a/radar/2022-03-28/dgs.md b/radar/2022-03-28/dgs.md deleted file mode 100644 index 45322af..0000000 --- a/radar/2022-03-28/dgs.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "DGS Framework" -ring: trial -quadrant: tools -tags: [frontend, architecture] ---- - -DGS has proven to simplify the development of GraphQL server applications. -Thus, we recommend a broader usage across AOE and decided to move the blip -to "trial". diff --git a/radar/2022-03-28/drupal.md b/radar/2022-03-28/drupal.md deleted file mode 100644 index e8033f4..0000000 --- a/radar/2022-03-28/drupal.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Drupal" -ring: trial -quadrant: tools -featured: false ---- diff --git a/radar/2022-03-28/elasticsearch.md b/radar/2022-03-28/elasticsearch.md deleted file mode 100644 index 2c9ab18..0000000 --- a/radar/2022-03-28/elasticsearch.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Elasticsearch" -ring: adopt -quadrant: platforms-and-aoe-services -featured: false ---- \ No newline at end of file diff --git a/radar/2022-03-28/evil-user-stories.md b/radar/2022-03-28/evil-user-stories.md deleted file mode 100644 index 48a78c6..0000000 --- a/radar/2022-03-28/evil-user-stories.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Evil User Stories" -ring: assess -quadrant: methods-and-patterns -featured: false ---- diff --git a/radar/2022-03-28/gitlab-ci.md b/radar/2022-03-28/gitlab-ci.md deleted file mode 100644 index 83ab0b1..0000000 --- a/radar/2022-03-28/gitlab-ci.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "GitLab CI" -ring: adopt -quadrant: tools -featured: false ---- - -We merged "GitLab CI" and [GitLab](/tools/gitlab/) diff --git a/radar/2022-03-28/gitlab.md b/radar/2022-03-28/gitlab.md deleted file mode 100644 index f67b551..0000000 --- a/radar/2022-03-28/gitlab.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "GitLab" -ring: adopt -quadrant: tools -tags: [ci/cd, coding] ---- - -We merged GitLab and GitLab CI, because we use the whole tool as one, with all the integrations between the different sections. CI is just one of them. diff --git a/radar/2022-03-28/groovy.md b/radar/2022-03-28/groovy.md deleted file mode 100644 index 82dbf31..0000000 --- a/radar/2022-03-28/groovy.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Groovy" -ring: hold -quadrant: languages-and-frameworks -featured: false ---- - diff --git a/radar/2022-03-28/inner-source.md b/radar/2022-03-28/inner-source.md deleted file mode 100644 index f1872b0..0000000 --- a/radar/2022-03-28/inner-source.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "Inner Source" -ring: assess -quadrant: methods-and-patterns -tags: [agile] ---- - -Inner Source is a strategy to frictionless cross-team collaboration in software development inside an organization. -Based on Open Source methodologies, it provides an adaptable set of tools and practices for contributing to code -developed by other teams. By fostering transparency and openness, it lowers the hurdle to get involved into -decision-making throughout the corporation. - -Core principles of Inner Source include: -- openness: all artifacts developed by an organization should be available to all employees -- active contribution: developers are encouraged to rather implement a feature instead of asking for it -- written communication: all decisions should be comprehensible and transparent -- rewards and motivation: every contribution is important and deserves recognition - -As AOE strives for a high involvement of every employee into decision processes and organizational development, Inner -Source seems an ideal fit to our [company culture](https://www.aoe.com/en/career/how-we-work.html). diff --git a/radar/2022-03-28/jaeger.md b/radar/2022-03-28/jaeger.md deleted file mode 100644 index 182093f..0000000 --- a/radar/2022-03-28/jaeger.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Jaeger" -ring: trial -quadrant: platforms-and-aoe-services -featured: false ---- \ No newline at end of file diff --git a/radar/2022-03-28/k6.md b/radar/2022-03-28/k6.md deleted file mode 100644 index 3e10244..0000000 --- a/radar/2022-03-28/k6.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "K6" -ring: trial -quadrant: tools -featured: false ---- - -At AOE, we need to have to run load tests against services. - -[Grafana K6](https://k6.io/) is an open-source load testing tool with a quick and lightweight setup and provides - -- CLI with developer friendly API -- Scripting support - -allowing us to pinpoint performance issues. \ No newline at end of file diff --git a/radar/2022-03-28/lighthouse-ci.md b/radar/2022-03-28/lighthouse-ci.md deleted file mode 100644 index 344adc2..0000000 --- a/radar/2022-03-28/lighthouse-ci.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Lighthouse CI" -ring: assess -quadrant: tools -tags: [ci/cd, frontend] ---- -At AOE, we want to keep a permanent eye on the metrics of the [Web Vitals](https://web.dev/learn-web-vitals/) for our projects. - -[Lighthouse CI](https://web.dev/lighthouse-ci/) is a collection of free tools that facilitate the use of Lighthouse for performance monitoring. With Lighthouse CI we get a history of evaluation results and can compare them over time. It is also possible to set performance budgets to ensure that a website's performance does not deteriorate through regression. - -Although performance monitoring is the most common use case for Lighthouse CI, other aspects of Lighthouse can also be monitored, such as SEO or accessibility. Thus, the use of Lighthouse CI can help ensure an overall good user experience. diff --git a/radar/2022-03-28/mob-programming.md b/radar/2022-03-28/mob-programming.md deleted file mode 100644 index e6e8211..0000000 --- a/radar/2022-03-28/mob-programming.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Mob Programming" -ring: assess -quadrant: methods-and-patterns -tags: [agile, coding] ---- - -While practicing [pair working](/methods-and-patterns/pair-working/) for several years now at AOE, we began to explore [remote mob programming](https://www.remotemobprogramming.org/) extensively when we switched to remote working during the COVID-19 pandemic. - -Mob programming brings the driver/navigator pattern to another level by bringing a group of navigators into the game. With the entire development team focused on a single topic, a lot of common understanding and shared knowledge are generated during each session as everyone is involved in the development process. The result is less controversial code reviews (which might even be completely omitted) and the evolution of a team coding style in favor of individual ways of problem-solving. - -In practice, we have found the Git-based [mob](https://github.com/remotemobprogramming/mob) to be an easy-to-use tool for remote mob programming. It provides a fast and simple way for initiating a mob session, handing over changes to the next person, and committing the outcome. diff --git a/radar/2022-03-28/monorepo.md b/radar/2022-03-28/monorepo.md deleted file mode 100644 index 2b98bfc..0000000 --- a/radar/2022-03-28/monorepo.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Monorepo" -ring: trial -quadrant: methods-and-patterns -tags: [coding] ---- - -A monorepo is a single repository containing multiple projects and shared libraries with their relationships. - -At AOE, we are using a monorepo that is home to both our React and Next.js based frontends and -[Go](/languages-and-frameworks/go-lang/) / [Flamingo](/languages-and-frameworks/flamingo/) based backends, -as well as shared libraries we use in all of our projects. - -The main benefits in that approach are: - * Breaking changes are directly detected and must be fixed within the same pull request on all projects - * No conflicting versions of dependencies - * Same CI Setup for everything and no overhead on new projects - * Tool consistency over all projects - -If you take the monorepo approach, of course you want to have a tool to manage it. There are a lot of them on the market -and at AOE we have decided to go with [Nx](/tools/nx/). diff --git a/radar/2022-03-28/nocode-lowcode.md b/radar/2022-03-28/nocode-lowcode.md deleted file mode 100644 index 3027367..0000000 --- a/radar/2022-03-28/nocode-lowcode.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: "No-Code / Low-Code" -ring: assess -quadrant: methods-and-patterns -tags: [coding] ---- - -No-code or low-code refers to tools that allow application software to be created via graphical user interfaces and -configuration - instead of (classic) text-based programming. -Low-code platforms additionally supports certain scripting possibilities. - -No-code and low-code platforms have raised a lot of funding and the ecosystem is growing fast. There are more than 400 -platforms listed on software selection websites like g2. -The promise of this ecosystem sounds logical: there is a growing demand for digital products and solutions in all -sectors - and skilled teams of developers are scarce. -That's why platforms -like [bubble.io](https://bubble.io/), [airtable](https://www.airtable.com/), -[appsheet](https://about.appsheet.com/home/), [bryter](https://bryter.com/), [ninox](https://ninox.com/de) -and co promise to build digital products faster and better. - -And the platforms have developed and the ecosystem is emerging. AI technics are being used to improve the creation -process and modern low-code platforms also come with built-in release and operations support. We have used some low-code -platforms for internal tools, for example to help organise events or onboarding activities. - -Here are our thoughts on this: - -* We see opportunities to improve communication and collaboration between developers on such platforms and non-technical - professionals (domain experts), as they can collaborate on the platform directly during the process of creating the - digital product. - -* If the use case fits into the sweet spot of the platform, the results are very fast and surprising. - -* There is a logical trade-off between simplicity and flexibility: platforms with a high level of abstraction and a low - learning curve can deliver good results very quickly. However, if you have requirements that do not fit into the - "standard" of the platform, it becomes difficult to customise. On the other hand, platforms that allow a lot of - configuration and scripting come with a higher learning curve. And in some respects it may end being similar to using - a programming framework. - -* Operating costs can become a relevant factor - especially if you pay for high performance and higher utilisation. - -* You have to realise that with complex applications there is much more to do than "just" writing code. Test - architecture, api design, integrations, careful design of the solution, proper testing, CI/CD strategy etc. So - there is still a need for skilled (development) teams to do this work. - -Thinking about the different aspects, we will not consider low-code platforms as the core technology in complex software -development projects - but we think that even in larger IT projects or organisations there are valid use cases or -certain "bounded contexts" where using a low-code platform is a proper choice and helps to deliver results faster. diff --git a/radar/2022-03-28/nx.md b/radar/2022-03-28/nx.md deleted file mode 100644 index 49dab0d..0000000 --- a/radar/2022-03-28/nx.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "NX" -ring: adopt -quadrant: tools -tags: [coding, ci/cd] ---- - -[Nx](https://nx.dev/) is now a daily used tool in our Monorepo setup. It takes care of everything from app creation to running development environments and tests to code generation. diff --git a/radar/2022-03-28/packer.md b/radar/2022-03-28/packer.md deleted file mode 100644 index 4cd0132..0000000 --- a/radar/2022-03-28/packer.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Packer" -ring: adopt -quadrant: platforms-and-aoe-services -featured: false ---- \ No newline at end of file diff --git a/radar/2022-03-28/pipeline-as-code.md b/radar/2022-03-28/pipeline-as-code.md deleted file mode 100644 index a1028a9..0000000 --- a/radar/2022-03-28/pipeline-as-code.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Pipeline as Code" -ring: adopt -quadrant: methods-and-patterns -tags: [devops] ---- - -In the past years many tools have evolved and especially [Gitlab CI](https://docs.gitlab.com/ee/ci/), -[GitHub Actions](https://github.com/features/actions) and [AWS CodeDeploy](https://aws.amazon.com/de/codedeploy/) -matured or became available and widely used across many teams. - -Continuous Integration and Delivery is an important part in every project. Pipelines which are maintained as code, can -now be handled like most other parts of your software. The pipeline configuration can run through lint checks, or a test -suite before the configuration is shared across teams in your organisation. - -Using [container based builds](/methods-and-patterns/container-based-builds/) is now -also the de facto standard. Combining these two techniques enables running isolated builds in an easily reproducible -environment so teams can get quick feedback on every change. diff --git a/radar/2022-03-28/playwright.md b/radar/2022-03-28/playwright.md deleted file mode 100644 index d0bdd6c..0000000 --- a/radar/2022-03-28/playwright.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Playwright" -ring: assess -quadrant: tools -tags: [coding, frontend, quality assurance] ---- - -Playwright is a cross browser/platform/language tool to write reliable end-to-end tests. It waits for elements before performing any actions which eliminates the need for timeouts - the primary cause of flaky tests. diff --git a/radar/2022-03-28/postcss.md b/radar/2022-03-28/postcss.md deleted file mode 100644 index 44b8ba0..0000000 --- a/radar/2022-03-28/postcss.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "PostCSS" -ring: adopt -quadrant: tools -featured: false ---- diff --git a/radar/2022-03-28/rabbitmq.md b/radar/2022-03-28/rabbitmq.md deleted file mode 100644 index cb4720f..0000000 --- a/radar/2022-03-28/rabbitmq.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "RabbitMQ" -ring: adopt -quadrant: tools -featured: false ---- diff --git a/radar/2022-03-28/raml.md b/radar/2022-03-28/raml.md deleted file mode 100644 index 4d83d88..0000000 --- a/radar/2022-03-28/raml.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "RAML" -ring: hold -quadrant: languages-and-frameworks -featured: false ---- diff --git a/radar/2022-03-28/reactive-programming.md b/radar/2022-03-28/reactive-programming.md deleted file mode 100644 index 3899d6e..0000000 --- a/radar/2022-03-28/reactive-programming.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Reactive Programming" -ring: adopt -quadrant: methods-and-patterns -featured: false ---- diff --git a/radar/2022-03-28/remix.md b/radar/2022-03-28/remix.md deleted file mode 100644 index 3ed9acb..0000000 --- a/radar/2022-03-28/remix.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Remix" -ring: trial -quadrant: languages-and-frameworks -tags: [coding, frontend] ---- - -Remix is a full stack web framework that lets us focus on the user interface and work with web standards. - -One of Remix biggest features is the availability of nested routes. Through nested routes, Remix can eliminate nearly -every loading state. - -Most web apps fetch inside of components, creating request waterfalls which leads to slower page loads. Remix loads data -in parallel on the server and sends a fully formed HTML document - -At AOE we use Remix for our enterprise web applications to provide a first class UX and fast page loads. diff --git a/radar/2022-03-28/renovate.md b/radar/2022-03-28/renovate.md deleted file mode 100644 index 55d27da..0000000 --- a/radar/2022-03-28/renovate.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Renovate" -ring: adopt -quadrant: tools -tags: [ci/cd] ---- - -At AOE, we rely on [Renovate CLI tool](https://www.npmjs.com/package/renovate/) in the CI pipelines for most of our projects. diff --git a/radar/2022-03-28/resilience-thinking.md b/radar/2022-03-28/resilience-thinking.md deleted file mode 100644 index 9832904..0000000 --- a/radar/2022-03-28/resilience-thinking.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: "Resilience Thinking" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture] ---- - -Resilience is the capability of an application or service to resist different error scenarios. Especially for -distributed systems - where a lot of communication between different services happen - it's very important to explicitly -think of implementing resilience. - -There are a lot of different resilience patterns, and it is also a matter of the overall software design. Typical -patterns and methods used are: - -* Do not hide API calls or any other external communication in your application (for example with unnecessary - abstraction) - instead make it explicit that an external communication happens - e.g. by using the Facade Pattern. On - the one hand, this makes it obvious that a potential slow and error-prone communication is going to happen, and it - makes it easier to implement error handling. -* Detect errors explicitly: Check the response message format and configure proper timeouts for external communication -* Handle errors in a smart way: Show a nice error message to your customer or, even better, graceful degrade features - - e.g. by showing some fallback text -* Use message-based communication where useful ([Decoupling via Messaging](/methods-and-patterns/decoupling-via-messaging/)) -* Use circuit breakers to isolate errors and allow systems to recover -* Use short activation paths in your strategic architecture - so that there is only a minimal set of communications - between your services required for certain features or business requests - -"Embrace Errors" should be the mindset - because it is not a question if errors appear - it's just a question of when. diff --git a/radar/2022-03-28/rest-assured.md b/radar/2022-03-28/rest-assured.md deleted file mode 100644 index 6feb272..0000000 --- a/radar/2022-03-28/rest-assured.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "REST Assured" -ring: assess -quadrant: tools -featured: false ---- diff --git a/radar/2022-03-28/rust.md b/radar/2022-03-28/rust.md deleted file mode 100644 index 9c314dd..0000000 --- a/radar/2022-03-28/rust.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Rust" -ring: "assess" -quadrant: "languages-and-frameworks" -featured: false ---- diff --git a/radar/2022-03-28/rxjs.md b/radar/2022-03-28/rxjs.md deleted file mode 100644 index 154453e..0000000 --- a/radar/2022-03-28/rxjs.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "RxJs" -ring: adopt -quadrant: languages-and-frameworks -featured: false ---- diff --git a/radar/2022-03-28/sass.md b/radar/2022-03-28/sass.md deleted file mode 100644 index 90de8e4..0000000 --- a/radar/2022-03-28/sass.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Sass" -ring: hold -quadrant: languages-and-frameworks -featured: false ---- - -Since the heydays of Sass, the requirements for styling solutions have changed. - -With modern solutions like [CSS-in-JS](/methods-and-patterns/css-in-js/), -[Tailwind](/languages-and-frameworks/tailwindcss/) or [PostCSS](/tools/postcss/), you get scoped CSS out of the -box and can get rid of the manual and therefore error-prone BEM methodology. Furthermore, mapping class names to -elements is no longer necessary. - -In general the modern solutions bring a better and more robust developer experience. Therefore, we put Sass on hold. diff --git a/radar/2022-03-28/scala-lang.md b/radar/2022-03-28/scala-lang.md deleted file mode 100644 index 71cb03a..0000000 --- a/radar/2022-03-28/scala-lang.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Scala Lang" -ring: adopt -quadrant: languages-and-frameworks -featured: false ---- diff --git a/radar/2022-03-28/scala3.md b/radar/2022-03-28/scala3.md deleted file mode 100644 index 04ef2fa..0000000 --- a/radar/2022-03-28/scala3.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Scala 3" -ring: "adopt" -quadrant: "languages-and-frameworks" -tags: [coding] ---- - -Following up on the previous 'trial' we will move our existing Scala codebase to Scala 3 where possible. Some Frameworks like Play will need some time to allow us moving but for our smaller services a migration is possible. diff --git a/radar/2022-03-28/semanticore.md b/radar/2022-03-28/semanticore.md deleted file mode 100644 index d7b5eeb..0000000 --- a/radar/2022-03-28/semanticore.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "Semanticore" -ring: trial -quadrant: tools -tags: [ci/cd, documentation, quality assurance] ---- - -[Semanticore](https://github.com/AOEpeople/semanticore) is an open source tool fulfilling our needs for managing -changelogs and semantic releases. - -Build upon git histories and conventional commits, Semanticore creates and maintains changelogs using Gitlab or GitHub -merge requests, and, once merged, creates appropriate tags and releases. Automating this workflow improves our daily -work a lot, and always gives us a clear view on outstanding changes as well as a proper-maintained changelog. - -Check out our Semanticore repository at https://github.com/AOEpeople/semanticore or run it locally for testing purposes: - -``` -$ cd ~/path/to/my/repository -$ go run github.com/aoepeople/semanticore@v0 -``` diff --git a/radar/2022-03-28/sitespeed.md b/radar/2022-03-28/sitespeed.md deleted file mode 100644 index 66ae789..0000000 --- a/radar/2022-03-28/sitespeed.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Sitespeed.io" -ring: assess -quadrant: tools -featured: false ---- diff --git a/radar/2022-03-28/sonarqube.md b/radar/2022-03-28/sonarqube.md deleted file mode 100644 index 42f3f35..0000000 --- a/radar/2022-03-28/sonarqube.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "SonarQube" -ring: adopt -quadrant: tools -tags: [ci/cd, quality assurance] ---- - -To track code quality of our projects and check for security issues (Static Application Security Testing), we recommend -[SonarQube](https://www.sonarqube.org/). At AOE we use it in CI pipelines to scan our code against the quality gate. If possible we -even check each merge request to prevent degrading code quality before adding it to our code basis. diff --git a/radar/2022-03-28/spock_geb.md b/radar/2022-03-28/spock_geb.md deleted file mode 100644 index 43e647d..0000000 --- a/radar/2022-03-28/spock_geb.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Spock + Geb" -ring: hold -quadrant: languages-and-frameworks -tags: [coding, quality assurance] ---- - -[spockframework.org](http://www.spockframework.org) - Spock is a testing and specification framework for Java and Groovy -applications. - -For the most parts we switched from Groovy to Java or Kotlin with JUnit 5. In this regard we think that the active -community and regular updates and extension libraries of JUnit 5 cover everything we want or need. - -[gebish.org](http://www.gebish.org) - Geb is a browser automation solution. - -UI testing with Geb is replaced by Cypress or Playwright. - - diff --git a/radar/2022-03-28/spring-rest-docs.md b/radar/2022-03-28/spring-rest-docs.md deleted file mode 100644 index 8322fb1..0000000 --- a/radar/2022-03-28/spring-rest-docs.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Spring REST Docs" -ring: hold -quadrant: tools -tags: [documentation] ---- - -[Spring REST Docs](https://spring.io/projects/spring-restdocs/) auto generates [Asciidoctor](http://asciidoctor.org/) snippets with the help of [Spring MVC Test](http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle#spring-mvc-test-framework) or [RestAssured](/tools/rest-assured/). -So you can be sure that your tests are inline with the documentation. - -We now use an Api First approach in conjunction with [Open API](/tools/open-api/). We see an active community there and a lot of support with this approach. diff --git a/radar/2022-03-28/stitches.md b/radar/2022-03-28/stitches.md deleted file mode 100644 index 565b36d..0000000 --- a/radar/2022-03-28/stitches.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Stitches" -ring: trial -quadrant: languages-and-frameworks -tags: [coding, frontend] ---- - -Stitches is a lightweight & performant CSS-in-JS styling library with a focus on component architecture and developer -experience. - -Unlike most CSS-in-JS libraries, Stitches promises near-zero runtime costs. This is possible by avoiding unnecessary -prop interpolations and defining variants upfront. - -Stitches has a fully typed API to provide an awesome developer experience. It comes with built-in theme support, -server-side rendering & much more. - -At AOE we use Stitches when we want to write performant and scalable CSS, but don't want to give up the flexibility and -developer experience of React components. diff --git a/radar/2022-03-28/tailwindcss.md b/radar/2022-03-28/tailwindcss.md deleted file mode 100644 index ca5573a..0000000 --- a/radar/2022-03-28/tailwindcss.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Tailwind CSS" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding, frontend] ---- - -At AOE we use Tailwind now on several projects. From fast prototyping, over marketing websites to enterprise applications. diff --git a/radar/2022-03-28/unleash.md b/radar/2022-03-28/unleash.md deleted file mode 100644 index 3d74534..0000000 --- a/radar/2022-03-28/unleash.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Unleash" -ring: adopt -quadrant: tools -tags: [coding, frontend, devops] ---- - -[Unleash](https://www.getunleash.io/) is a feature (toggle / flag) management service written in Node.js. -You can enable/disable features independent of deployment schedules. For larger projects with many feature flags -you can benefit from usage statistics and metrics which are collected for each flag. - -A lot of activation strategies are provided by Unleash out of the box, like Boolean On/Off, Gradual Rollout, -IPs, and so on, while allowing you to add custom strategies. - -To evaluate the feature flag you can choose one of the [official SDKs](https://docs.getunleash.io/sdks#official-sdks) -or use the [REST-API](https://docs.getunleash.io/api) directly. diff --git a/radar/2022-03-28/vault.md b/radar/2022-03-28/vault.md deleted file mode 100644 index c2c2463..0000000 --- a/radar/2022-03-28/vault.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Vault" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops, security] ---- - -Secure handling of access tokens is key to provide secure applications and environments. -In a completely automated world, with tools doing everything from building, testing to deploying and operating, it is crucial to control who gets access to what resources. -Vault enables us to securely issue tokens for deployment jobs, manage certificates and handle credentials in a secure and controlled manner. -We change Vault to "adopt". diff --git a/radar/2022-03-28/vistecture.md b/radar/2022-03-28/vistecture.md deleted file mode 100644 index 2d94459..0000000 --- a/radar/2022-03-28/vistecture.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Vistecture" -ring: assess -quadrant: tools -tags: [documentation, architecture] ---- - -[Vistecture](https://vistecture.me/) is a tool for the visualization and analysis of distributed -and/or microservice-oriented software architectures of any scale. It can be integrated in a projects -CI pipeline for the automated generation of up-to-date documentation. - -With projects at AOE reaching a certain threshold of size and complexity, we started struggling -with keeping documentation up to date manually, especially with regard to e.g. architecture diagrams -or API request/response flows. Thus, we have developed a tool for the rendering of various kinds -of documentation and visualizations based on a single architecture description file. - -Applications (microservices) and dependencies are defined using a simple, YAML-based syntax. This -service definition can then be converted to the desired output formats or browsed in the Vistecture -online viewer. diff --git a/radar/2023-02-23/ansible.md b/radar/2023-02-23/ansible.md deleted file mode 100644 index 9406b6a..0000000 --- a/radar/2023-02-23/ansible.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Ansible" -ring: trial -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -[Ansible](https://www.ansible.com/) is a tool used to describe infrastructure and applications and their configuration -as code. It covers both the configuration and provisioning aspects of infrastructure and applications. - -It is a radically simple IT automation system based on SSH so that it can work without agents or exposed APIs. It -handles configuration management, application deployment, cloud provisioning, ad-hoc task execution, network automation, -and multi-node orchestration. - -It comes in handy when the client currently uses some virtual machines with docker/docker-compose, and no full-blown -Kubernetes cluster is available or needed. diff --git a/radar/2023-02-23/apisix.md b/radar/2023-02-23/apisix.md deleted file mode 100644 index 2f4d235..0000000 --- a/radar/2023-02-23/apisix.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Apache APISIX" -ring: assess -quadrant: tools -tags: [devops] ---- - -[Apache APISIX](https://apisix.apache.org/) is an open-source, high-performance API gateway, designed for -microservices, cloud-native and container-based architecture. It provides a wide range of features to manage -and secure API services: - -- Scalability: Load balancing and routing, dynamic scaling -- Performance: Fast and reliable, supports caching and rate limiting -- Multi-Protocol Support: Supports HTTP, HTTPS, WebSockets and gRPC -- Customization: Plugins for authentication, authorization and traffic management - -At AOE, we are currently assessing Apache APISIX in one of our cloud infrastructure projects. diff --git a/radar/2023-02-23/apollo-client.md b/radar/2023-02-23/apollo-client.md deleted file mode 100644 index eea9933..0000000 --- a/radar/2023-02-23/apollo-client.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Apollo Client" -ring: trial -quadrant: tools -tags: [architecture] -featured: false ---- diff --git a/radar/2023-02-23/checkov.md b/radar/2023-02-23/checkov.md deleted file mode 100644 index e5197ab..0000000 --- a/radar/2023-02-23/checkov.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Checkov" -ring: assess -quadrant: platforms-and-aoe-services -tags: [devops, quality assurance] -featured: false ---- diff --git a/radar/2023-02-23/client-side-error-logging.md b/radar/2023-02-23/client-side-error-logging.md deleted file mode 100644 index 3542596..0000000 --- a/radar/2023-02-23/client-side-error-logging.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Client-Side Error Logging" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture, frontend] ---- - -Updated to adopt. diff --git a/radar/2023-02-23/concourse-ci.md b/radar/2023-02-23/concourse-ci.md deleted file mode 100644 index 4c62baa..0000000 --- a/radar/2023-02-23/concourse-ci.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Concourse" -ring: trial -quadrant: tools -tags: [ci/cd] -featured: false ---- diff --git a/radar/2023-02-23/csharp.md b/radar/2023-02-23/csharp.md deleted file mode 100644 index 86b4dfb..0000000 --- a/radar/2023-02-23/csharp.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "C#" -ring: adopt -quadrant: "languages-and-frameworks" -tags: [coding] ---- - -C# is a statically, strongly typed and object-oriented language. - -After PHP and several JVM languages, we also have projects with C#. We value all features of this highly developed -language. diff --git a/radar/2023-02-23/ddev.md b/radar/2023-02-23/ddev.md deleted file mode 100644 index a882dda..0000000 --- a/radar/2023-02-23/ddev.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "DDEV" -ring: adopt -quadrant: tools -tags: [coding, ci/cd] -featured: false ---- diff --git a/radar/2023-02-23/design-system.md b/radar/2023-02-23/design-system.md deleted file mode 100644 index 74d2a4e..0000000 --- a/radar/2023-02-23/design-system.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Design System" -ring: trial -quadrant: "methods-and-patterns" -tags: [ux/ui, frontend, coding, architecture, documentation] ---- - -A Design System is a collection of reusable design components, guidelines and standards that serve as the foundation for -creating a consistent user experience across a product or a whole brand. - -It helps to create a unified visual language, improve collaboration among design and development teams, and streamline -the design and development process. - -Design Systems also increase the maintainability of the design of products, making it easier for teams to make updates -and add new features over time. - -We are in the process to implement a design system in close cooperation with one of our customers. - -Tools we use for this are [zeroheight](https://zeroheight.com/) as a documentation hub, -[Style Dictionary](https://amzn.github.io/style-dictionary) for the token generation, -[Storybook](https://storybook.js.org/) to document the components and [Figma](https://www.figma.com/) for the Designs. diff --git a/radar/2023-02-23/dgs.md b/radar/2023-02-23/dgs.md deleted file mode 100644 index 4d060ef..0000000 --- a/radar/2023-02-23/dgs.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "DGS Framework" -ring: assess -quadrant: tools -tags: [frontend, architecture] -featured: false ---- diff --git a/radar/2023-02-23/flutter.md b/radar/2023-02-23/flutter.md deleted file mode 100644 index 686127c..0000000 --- a/radar/2023-02-23/flutter.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: "Flutter" -ring: trial -quadrant: languages-and-frameworks -tags: [coding, frontend, ux/ui] ---- - -[Flutter](https://flutter.dev/) is an open-source SDK developed by Google that allows you to write native applications -for different platforms with a single code base in [Dart](https://dart.dev/). - -Flutter provides stable platform implementations for both major mobile platforms iOS and Android. Besides the mobile -platforms, it also supports stable builds for Web with multiple rendering engines (DOM and canvas-render). Flutter also -support builds for all Desktop environments, including Mac, Windows and Linux. - -The compilation into native platform code prevents from bottleneck-issues due context switching and runtime bridging, -which can be found in other cross-platform frameworks like React Native. - -Flutter is using a reactive programming model, where widgets rebuild when their state changes. Based on a declarative -approach like SwiftUI it is really easy to build UI components (widgets). Meanwhile, Flutter has a big community with a -lot of support and pre-build widgets. - -Flutter has made significant improvements and is becoming more and more popular in recent years. Big companies, -including Alibaba, Tencent and BMW adopted Flutter to develop their apps. This is also shown in -a [blog post by Stackoverflow](https://stackoverflow.blog/2022/02/21/why-flutter-is-the-most-popular-cross-platform-mobile-sdk/) -where it shows the increase in popularity in comparison to React Native - -Based on these facts, we decided to get a deeper look on Flutter. We were able to prove that Flutter is more performant -than, React Native by building an identical Prototype application with both Frameworks. - -In addition to the Framework itself, Flutter does a lot to improve the developer experience (DX) due to its hot reload -and various debugging tools which are very handy and missing in other Frameworks like React Native. There are also a lot -of plugins for WebStorm and Visual Studio Code which also improves the DX a lot. diff --git a/radar/2023-02-23/graphql.md b/radar/2023-02-23/graphql.md deleted file mode 100644 index 16fe3d4..0000000 --- a/radar/2023-02-23/graphql.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "GraphQL" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture] ---- - -For [Spring Boot](https://spring.io/projects/spring-boot/) based backends [DGS](https://netflix.github.io/dgs/) provides -a nice framework featuring: - -- an annotation-based programming model for Spring -- a test framework for writing query tests as unit tests -- a [Gradle](https://gradle.org/) code generation plugin to create types from a GraphQL schema in Java or Kotlin diff --git a/radar/2023-02-23/harbor.md b/radar/2023-02-23/harbor.md deleted file mode 100644 index a88f64f..0000000 --- a/radar/2023-02-23/harbor.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Harbor" -ring: assess -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -[Harbor](https://goharbor.io) is a CNCF-graduated open-source container registry. We use it to host custom-built -container images from our projects. Key benefits for us are: - -- Harbor automatically scans all container images with [Trivy](https://trivy.dev) -- fine-grained access control allows Harbor to be used in a multi-team environment -- its extensive API allows easy adaption to custom needs, like retention policies -- support for image signing with [Cosign](https://github.com/SigStore/cosign) diff --git a/radar/2023-02-23/helm.md b/radar/2023-02-23/helm.md deleted file mode 100644 index 319a391..0000000 --- a/radar/2023-02-23/helm.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Helm" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -At AOE, we have adopted [Helmfile](https://github.com/helmfile/helmfile) as a complementary tool to Helm. It is -a declarative spec for deploying helm charts providing additional functionality such as: - -- Separation between environment specific and general values -- Simplified secrets management with support for external applications, e.g. Vault -- Remote state storage in e.g. S3, similar to Terraform - -Overall, Helmfile makes it a lot easier to manage and maintain multiple Helm charts and releases. diff --git a/radar/2023-02-23/hotchocolate.md b/radar/2023-02-23/hotchocolate.md deleted file mode 100644 index 24ed02d..0000000 --- a/radar/2023-02-23/hotchocolate.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Hot Chocolate" -ring: assess -quadrant: "languages-and-frameworks" -tags: [coding] ---- - -[Hot Chocolate](https://chillicream.com/docs/hotchocolate/v12) is an open-source GraphQL server for .NET. -It is compatible to many GraphQL clients and tools and is really easy to set up and use. We assess it in one of our -projects as an alternative to [GraphQL .NET](https://graphql-dotnet.github.io/docs/getting-started/introduction/). diff --git a/radar/2023-02-23/java.md b/radar/2023-02-23/java.md deleted file mode 100644 index 3bbe891..0000000 --- a/radar/2023-02-23/java.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Java" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding] ---- - -[Java](https://www.java.com) is a versatile and widely-used programming language. - -It is scalable and platform-independent, making it the ideal choice for businesses looking to streamline their -operations and reach a wider audience. With its broad library of tools, frameworks and modules, Java provides developers -with the resources they need to create dynamic, feature-rich applications that can be easily integrated into existing -systems. Additionally, Java has a large community of developers, ensuring that support and resources are available when -needed. - -With an extensive expertise at AOE we successfully run lots of Java projects in production. As it is very stable, has -great support from the open source community and lots of other big advantages, we often we use -[Spring Boot](https://spring.io/projects/spring-boot) combined with the strengths of java to develop web services that -fits the needs of our customers. diff --git a/radar/2023-02-23/ldap-login.md b/radar/2023-02-23/ldap-login.md deleted file mode 100644 index 29c48dc..0000000 --- a/radar/2023-02-23/ldap-login.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "LDAP Login" -ring: hold -quadrant: platforms-and-aoe-services -tags: [devops, security] ---- - -For years, we used LDAP Login mechanisms to authenticate our employees. - -While this worked as some kind of "single credential" model, it does not support extended Security features such as -WebAuthN, Multi-Factor Authentication, etc. - -These we do prefer to use integrations using OpenID Connect into SSO solutions such -as [Bare.ID](/platforms-and-aoe-services/bareid/) or [Keycloak](/tools/keycloak/), which provide proper -authentication and federation for multiple identity sources. diff --git a/radar/2023-02-23/open-digital-architecture.md b/radar/2023-02-23/open-digital-architecture.md deleted file mode 100644 index e97e0c7..0000000 --- a/radar/2023-02-23/open-digital-architecture.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Open Digital Architecture" -ring: assess -quadrant: methods-and-patterns -tags: [architecture] ---- - -[TM Forum Open Digital Architecture (ODA)](https://www.tmforum.org/oda/) provides architectural blueprints for -communication service providers (CSPs), based on modern patterns and technologies such as microservices or -cloud-native solutions. It offers a number of benefits, including: - -- open, standards-based reference architecture for software development in the telco domain -- faster time-to-market through a modular and flexible architecture -- simplified management and updates to reduce cost and the risk of downtimes -- enhanced customer experience by delivering personalized, high-quality services - -As a [TM Forum member](https://www.tmforum.org/membership/current-members/), AOE has signed [both the Open API and -the ODA Manifesto](https://www.tmforum.org/oda-interactive-map/open-digital-architecture-open-api-manifesto/) and is -strongly committed to the values and visions behind these open standards. diff --git a/radar/2023-02-23/playwright.md b/radar/2023-02-23/playwright.md deleted file mode 100644 index a380414..0000000 --- a/radar/2023-02-23/playwright.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "Playwright" -ring: trial -quadrant: "languages-and-frameworks" -tags: [coding, frontend, quality assurance] ---- - -[Playwright](https://playwright.dev) is a cross browser/platform/language tool to write reliable end-to-end tests. It's -easy to get started with and offers a broad variety of functionalities out of the box. Playwright supports Windows, -macOS and Linux and works with the most popular testing frameworks such as Jest, Mocha and Jasmine. -The playwright configuration offers plenty of helpful options, for instance native mobile emulation of Chrome for -Android and Safari for iOS. If needed playwright can be extended by BDD tools like Cucumber or SpecFlow to enable -non-technical contributors to collaborate. - -Playwright test are resilient. It waits for elements before performing any actions which eliminates the need for -timeouts - the primary cause of flaky tests. - -Other than Cypress Playwright can interact with different origins and multiple tabs. Also, you can create scenarios with -different contexts to handle multiple users within one test. Contexts allow saving an authentication state to reuse it -in other tests. By isolating tests within a separate browser context for each test, the tests are fully independent, -although reusing an authentication state. This prevents you from performing repetitive log-in operations in each test. - -As Playwright is developed and maintained by Microsoft there are some great extensions for Visual Studio Code to -develop, run and debug tests. diff --git a/radar/2023-02-23/pnpm.md b/radar/2023-02-23/pnpm.md deleted file mode 100644 index c39c11d..0000000 --- a/radar/2023-02-23/pnpm.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "pnpm" -ring: assess -quadrant: tools -tags: [coding, frontend] ---- - -[pnpm](https://pnpm.io/motivation) is an alternative tool to manage your frontend dependencies. Unlike yarn 1 it manages -all packages in a central place and creates symbolic links only inside the npm_modules of a project. This results in -considerably less usage of disk space and reduces build-times, when a package is already available. - -Additionally, a cache server can be setup and used during pipeline builds to decrease network traffic and build times. diff --git a/radar/2023-02-23/policy-as-code.md b/radar/2023-02-23/policy-as-code.md deleted file mode 100644 index 1bb2ff8..0000000 --- a/radar/2023-02-23/policy-as-code.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "Policy as Code" -ring: trial -quadrant: methods-and-patterns -tags: [devops, ci/cd] ---- - -With the rise of cloud infrastructure and DevOps practices, traditional methods of policy enforcement such as manual -reviews and audits are no longer sufficient. By using code to express policies for the entire infrastructure and -application stack, automated compliance checks become a natural part of the software development lifecycle, -e.g. via integration into a projects' CI/CD pipeline and could even prevent a configuration change or deployment -if a critical issue was found. - -One of the key benefits of Policy as Code is the ability to catch potential issues before they become risks. For -example, a policy could be defined to ensure that all S3 buckets are encrypted, or that all EC2 instances have a -specific set of tags. - -There are a number of tools and frameworks available for implementing Policy as Code. At AOE, we are mainly relying on -[Checkov](https://www.checkov.io/), [Kyverno](https://kyverno.io/) and [AWS Config](https://aws.amazon.com/config/) -at the time of writing. Each tool provides a way to define policies in code and then automate policy enforcement. -They also provide visibility into the compliance status of infrastructure and application configurations. - -By defining policies as code, development teams can ensure that policies are version-controlled, easily auditable, -and consistent across all environments. diff --git a/radar/2023-02-23/remix.md b/radar/2023-02-23/remix.md deleted file mode 100644 index ddd632b..0000000 --- a/radar/2023-02-23/remix.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Remix" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding, frontend] ---- diff --git a/radar/2023-02-23/semanticore.md b/radar/2023-02-23/semanticore.md deleted file mode 100644 index 539b0a1..0000000 --- a/radar/2023-02-23/semanticore.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Semanticore" -ring: adopt -quadrant: tools -tags: [ci/cd, documentation, quality assurance] ---- - -Updated to adopt. diff --git a/radar/2023-02-23/specflow.md b/radar/2023-02-23/specflow.md deleted file mode 100644 index 34c95e3..0000000 --- a/radar/2023-02-23/specflow.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "SpecFlow" -ring: assess -quadrant: "languages-and-frameworks" -tags: [coding, quality assurance] ---- - -[SpecFlow](https://specflow.org) is a free and open source BDD-framework for .NET - -BDD frameworks in general enable teams to better collaborate on test automation by using for instance the Gherkin syntax -to make tests readable to everyone. SpecFlow is the most popular BDD framework for .NET projects. diff --git a/radar/2023-02-23/svelte.md b/radar/2023-02-23/svelte.md deleted file mode 100644 index 94a5726..0000000 --- a/radar/2023-02-23/svelte.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Svelte" -ring: assess -quadrant: "languages-and-frameworks" -tags: [coding, frontend] ---- - -[Svelte](https://svelte.dev/) is neither a language nor a framework, but actually a compiler. It compiles HTML templates -to specialized code that manipulates the DOM directly, which may reduce the size of transferred files and give better -client performance. - -It is surprisingly easy to work with, and we currently assess it in an internal project. diff --git a/radar/2023-02-23/trivy.md b/radar/2023-02-23/trivy.md deleted file mode 100644 index 0784fc4..0000000 --- a/radar/2023-02-23/trivy.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Trivy" -ring: adopt -quadrant: tools -tags: [ci/cd,devops,security] ---- - -[Trivy](https://trivy.dev/) is an open-source vulnerability scanner for containers and other targets. It utilizes -an extensive vulnerability database to scan for CVEs, software dependencies in use and common misconfigurations. - -Trivy is lightweight and has no external dependencies, making it suitable for use in CI/CD pipelines. Additionally, -it can support developers by providing actionable remediation advice, making it easier to fix vulnerabilities. - -As it has proven to be a good fit for both our needs and into our development pipelines, we strongly recommend to -give it a try in your own projects. diff --git a/radar/2023-02-23/turborepo.md b/radar/2023-02-23/turborepo.md deleted file mode 100644 index 2666f45..0000000 --- a/radar/2023-02-23/turborepo.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Turborepo" -ring: trial -quadrant: "tools" -tags: [frontend] ---- - -[Turborepo](https://turbo.build/repo) is a build system for JavaScript and TypeScript project, -which uses a [Monorepo](/methods-and-patterns/monorepo/) structure for their codebase. - -It helps to build projects efficiently by clever caching and resolving dependencies. -At the same time, Turborepo is very easy and fast to use and doesn't get in the way. diff --git a/radar/2023-11-01/adobe-creative-cloud.md b/radar/2023-11-01/adobe-creative-cloud.md deleted file mode 100644 index 2fb888c..0000000 --- a/radar/2023-11-01/adobe-creative-cloud.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Adobe Creative Cloud" -ring: adopt -quadrant: tools -tags: [ux/ui] ---- - -[Adobe Creative Cloud](https://www.adobe.com/creativecloud.html) transcends traditional design boundaries by providing a comprehensive platform that fosters seamless collaboration and streamlines the design process. We use applications such as Adobe XD, Photoshop, Illustrator, InDesign, and more, each of which serves a unique purpose in the design workflow, including photo and video editing. The integration of these specialized tools allows us to work efficiently and effectively, thus maximizing our productivity. diff --git a/radar/2023-11-01/akka.md b/radar/2023-11-01/akka.md deleted file mode 100644 index 8672698..0000000 --- a/radar/2023-11-01/akka.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Akka" -ring: hold -quadrant: languages-and-frameworks -tags: [coding] ---- diff --git a/radar/2023-11-01/alpakka.md b/radar/2023-11-01/alpakka.md deleted file mode 100644 index 7bee817..0000000 --- a/radar/2023-11-01/alpakka.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Alpakka" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding] -featured: false ---- diff --git a/radar/2023-11-01/angular.md b/radar/2023-11-01/angular.md deleted file mode 100644 index dd7dc60..0000000 --- a/radar/2023-11-01/angular.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Angular" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding, frontend] ---- - -[Angular](https://angular.io/), now in version 15, remains a robust and well-maintained front-end framework that continues to build new features on its solid foundation. Angular offers excellent tools for building large-scale applications. - -For instance, it includes built-in capabilities for setting up and managing a monorepo, simplifying the sharing of components across multiple projects. As a framework, Angular takes an opinionated approach to solving various problems, reducing the need for extensive decision-making while maintaining consistency, yet still providing flexibility where necessary. Angular 15 further stabilizes standalone components, a feature introduced in Angular 14, with the aim of simplifying Angular applications and reducing module complexity, addressing a common criticism of Angular. - -The ease of upgrading to new versions has improved significantly due to the framework's stability and the detailed migration guides provided by the maintainers. diff --git a/radar/2023-11-01/ansible.md b/radar/2023-11-01/ansible.md deleted file mode 100644 index 4214fb2..0000000 --- a/radar/2023-11-01/ansible.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Ansible" -ring: trial -quadrant: platforms-and-aoe-services -tags: [devops] -featured: false ---- - -We have observed a decrease in our usage of Ansible recently. Our current focus lies more on immutable infrastructure using cloud providers. Nonetheless, Ansible still offers great benefits for mutable infrastructure that require support and is an excellent tool for achieving [Infrastructure as Code](/platforms-and-aoe-services/infrastructure-as-code/) in such cases. diff --git a/radar/2023-11-01/artifactory.md b/radar/2023-11-01/artifactory.md deleted file mode 100644 index 0663f24..0000000 --- a/radar/2023-11-01/artifactory.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Artifactory" -ring: hold -quadrant: platforms-and-aoe-services -featured: false ---- - -We no longer use Artifactory; instead, we rely on the integrated artifact management of SCM platforms like [GitLab](https://gitlab.org). diff --git a/radar/2023-11-01/assisted-ai.md b/radar/2023-11-01/assisted-ai.md deleted file mode 100644 index 49cd66e..0000000 --- a/radar/2023-11-01/assisted-ai.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "AI Assisted Programming" -ring: assess -quadrant: "methods-and-patterns" -tags: [ai, architecture, coding] ---- - -In recent years, the field of Artificial Intelligence (AI) has made monumental strides, and AI has demonstrated its ability to augment human capabilities and enhance user experiences. One noteworthy facet of this evolution is Assisted AI—a paradigm that holds great promise for software development companies. - -Assisted AI combines human and machine intelligence to enhance productivity. It leverages AI's computational capabilities while preserving human critical thinking. - -### Advantages and Opportunities - -Developers should consider using generative artificial intelligence (AI) for a multitude of reasons: - -- **Code Enhancement**: Assisted AI offers intelligent code suggestions, optimizing and refactoring. It helps save time and boost quality and developer satisfaction. -- **Automated Testing**: It accelerates testing, identifies bugs, and generates test cases for more robust, reliable software. -- **NLP-powered Documentation**: Assisted AI assists in writing precise, comprehensive documentation. -- **Security**: Assisted AI can help identify vulnerabilities. - -### Providers and Solutions - -- [ChatGPT](https://chat.openai.com/) - - Powered by OpenAI's advanced GPT-3/4 technology. - - Delivers human-like conversation experiences. - - Can also interpret and generate visual content, providing a multifaceted interaction experience. -- [GitHub Copilot](https://copilot.github.com/) - - Transforms natural language prompts into relevant code suggestions. - - Offers seamless integration with numerous IDEs for an enhanced developer experience. - - Empowered by training on billions of lines of code. -- [Amazon CodeWhisperer](https://aws.amazon.com/codewhisperer/) - - Completely free to use for individual developers. - - Advanced features to trace the origin of code snippets. - - Integrated with AWS, providing robust and scalable solutions. -- [FauxPilot](https://github.com/fauxpilot/fauxpilot) - - A credible open-source counterpart to GitHub Copilot server. - - Prioritizes user privacy and data sovereignty. - - Continuously updated by a vibrant community of developers. - -### Challenges and Considerations - -Ethical, privacy, and bias concerns need careful attention, especially data protection concerns while working with cloud-based solutions, which are important to consider. - -### Future Outlook - -Assisted AI is a pivotal development. Embracing this shift promises improved efficiency and better products. - -We are currently establishing the following aspects: - -- Maintaining a risk assessment and working on mitigations regularly. -- Setting up usage guidelines and providing training. -- Establishing a regular "learning group" as an exchange between teams to share best practices and learnings. diff --git a/radar/2023-11-01/axure.md b/radar/2023-11-01/axure.md deleted file mode 100644 index 6d2d375..0000000 --- a/radar/2023-11-01/axure.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Axure" -ring: trial -quadrant: tools -tags: [ux/ui] -featured: false ---- diff --git a/radar/2023-11-01/azure_container_instances.md b/radar/2023-11-01/azure_container_instances.md deleted file mode 100644 index 1700515..0000000 --- a/radar/2023-11-01/azure_container_instances.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Azure Container Instances" -ring: hold -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -We've previously used [AWS Fargate](/platforms-and-aoe-services/aws_fargate/) when we didn't require full container orchestration and aimed for simplicity without managing the OS ourselves. When dealing with Azure projects, we searched for a similar solution. After exploring the somewhat opaque list of options for running Docker images on Azure, we decided on [Azure Container Instances](https://azure.microsoft.com/products/container-instances), as they appeared to align most closely with AWS Fargate in terms of simplicity. - -However, while it's easy to get a container up and running with Azure Container Instances, it seems that this service is still in its early stages of maturity. Some notable limitations include the inability to automatically register containers in internal networks with Azure Application Gateway, a lack of support for internal DNS, occasional issues where containers need to be deleted and recreated instead of being smoothly replaced, and unexpected container restarts during the night without clear prior announcements or post-incident explanations. - -Another limitation is that volumes can only be stored on Azure File Shares and not on regular Azure Disks, which can pose challenges when running certain applications. Surprisingly, when compared to running the same Docker container on a virtual machine, Azure Container Instances may not even be more cost-effective. - -Given these limitations and experiences, we do not recommend migrating critical workloads to Azure Container Instances. diff --git a/radar/2023-11-01/blameless-post-mortems.md b/radar/2023-11-01/blameless-post-mortems.md deleted file mode 100644 index db9fba4..0000000 --- a/radar/2023-11-01/blameless-post-mortems.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Blameless Post Mortems" -ring: adopt -quadrant: methods-and-patterns -tags: [devops, documentation] -featured: false ---- - -> Failure and invention are inseparable twins. -> -> — Jeff Bezos - -Blameless Post Mortems provide a concept for dealing with failures that inevitably occur when developing and operating complex software solutions. After any major incident or outage, the team gathers to perform an in-depth analysis of what happened and what can be done to mitigate the risk of similar issues in the future. - -Based on trust and the assumption that everyone involved had good intentions to do the best possible job given the information at hand, Blameless Post Mortems offer an opportunity to continuously improve the quality of software and infrastructure and the processes for dealing with critical situations. We consider this a fundamental principle that enables our staff to address deficiencies without fear of repercussions and reduces the probability of incidents being concealed. - -The post-mortem documentation usually includes a timeline of the events leading to an incident and the steps taken for its remediation, as well as future actions and lessons learned to enhance the resilience and stability of our services. - -At AOE, we make it a priority to conduct a Blameless Post Mortem meeting after every user-visible incident. diff --git a/radar/2023-11-01/css-in-js.md b/radar/2023-11-01/css-in-js.md deleted file mode 100644 index 48ff301..0000000 --- a/radar/2023-11-01/css-in-js.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "CSS-in-JS" -ring: adopt -quadrant: methods-and-patterns -tags: [coding, frontend] ---- - -Since the release of React 18, many CSS-in-JS libraries like styled-components, emotion, and stitches have encountered a significant challenge. They generate CSS only at runtime, making them incompatible with streaming and [React Server Components](/methods-and-patterns/react-server-components/). React developers have addressed this issue in an [article](https://github.com/reactwg/react-18/discussions/110), where they explicitly advise against using CSS-in-JS libraries that generate CSS at runtime. - -This has created substantial uncertainty among developers and the communities of these affected libraries. The question arises: Is it possible to refactor these runtime libraries into buildtime libraries? To date, none of the libraries have announced any such plans, and, unfortunately, one of the most popular new libraries, stitches, is [no longer being maintained](https://github.com/stitchesjs/stitches/discussions/1149#discussioncomment-6223090). - -Fortunately, there has been a growing number of CSS-in-JS solutions that generate CSS at buildtime. Libraries like [Vanilla Extract](https://vanilla-extract.style/), [Panda CSS](https://panda-css.com/), and [Kuma UI](https://www.kuma-ui.com/) maintain an excellent developer experience, overcome performance disadvantages, and are compatible with React 18. - -Unfortunately, these libraries are not yet widely adopted, and it's challenging to predict how they will develop in the future. Therefore, at AOE, we continue to use established solutions as long as the new React features are not mandatory. - -Moreover, we are gaining experience with these new libraries because we see significant potential in them. diff --git a/radar/2023-11-01/deno.md b/radar/2023-11-01/deno.md deleted file mode 100644 index 6bfa224..0000000 --- a/radar/2023-11-01/deno.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Deno" -ring: assess -quadrant: languages-and-frameworks -tags: [coding] ---- - -```ts -> 'node'.split('').sort().join('') -> 'deno' -``` - -[Deno](https://deno.com/runtime) is a secure, modern JavaScript and TypeScript runtime built on the V8 JavaScript engine. It was developed as a more secure and developer-friendly alternative to Node.js by Ryan Dahl, the core author of Node.js. - -Deno prioritizes security by default, enforcing strict permissions for file system access, network access, and environment variable usage. It also offers improved performance, thanks to its utilization of the latest JavaScript features and optimizations. Deno supports TypeScript out of the box, allowing developers to take advantage of static type checking and other TypeScript features. It incorporates a built-in module system, reducing dependency conflicts and simplifying module management. - -With its streamlined developer experience, which includes a standard library and support for modern language features, Deno offers a compelling option for JavaScript and TypeScript developers. diff --git a/radar/2023-11-01/design-system.md b/radar/2023-11-01/design-system.md deleted file mode 100644 index fd7e95d..0000000 --- a/radar/2023-11-01/design-system.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Design System" -ring: adopt -quadrant: "methods-and-patterns" -tags: [architecture, coding, documentation, frontend, ux/ui] ---- - -Through the implementation of design systems, we have demonstrated that this approach aligns with many of the mentioned benefits and recommend its use in future projects. diff --git a/radar/2023-11-01/devops-practices.md b/radar/2023-11-01/devops-practices.md deleted file mode 100644 index 2a7a437..0000000 --- a/radar/2023-11-01/devops-practices.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "DevOps Practices" -ring: adopt -quadrant: methods-and-patterns -tags: [devops] -featured: false ---- diff --git a/radar/2023-11-01/diagrams-as-code.md b/radar/2023-11-01/diagrams-as-code.md deleted file mode 100644 index 5c00db0..0000000 --- a/radar/2023-11-01/diagrams-as-code.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Diagrams as Code" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture, quality assurance, documentation] ---- - -Documenting concepts and software architecture as diagrams using code offers significant benefits over heavier solutions. Treating documentation and diagrams as code and checking them into version control increases transparency, collaboration, and productivity. The textual representation of diagrams is easy to write and read, and generating graphical representations as SVG or PNG images is also straightforward with the associated tools. - -We extensively use [PlantUML](/tools/plant-uml/) in combination with [Asciidoc](/tools/asciidoc/) and tools like [AsciiDoctor Diagram](https://asciidoctor.org/docs/asciidoctor-diagram/) to include and inline PlantUML diagrams in our documentation. The latter allows for a variety of other diagram formats, which can be easily mixed and matched. - -Other tools worth mentioning include: -- [Mermaid](https://mermaid.js.org/), a JavaScript-based diagramming tool natively supported by many common tools (e.g., GitHub, GitLab, Gitea, Notion, etc.). -- [D2](https://d2lang.com/), a diagram scripting language that focuses on readability and provides a CLI and a Go library for programmatically creating diagrams. -- [Structurizr](https://structurizr.com/), which brings its own DSL for creating software architecture models based on the [C4 model](https://c4model.com/) and a CLI for exporting to formats like PlantUML, Mermaid, D2, and others. diff --git a/radar/2023-11-01/dora-metrics.md b/radar/2023-11-01/dora-metrics.md deleted file mode 100644 index 20e3fa9..0000000 --- a/radar/2023-11-01/dora-metrics.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "DORA Metrics for DevOps" -ring: trial -quadrant: methods-and-patterns -tags: [devops, documentation, agile] ---- - -A primary goal of software development organizations is to enhance the performance of software delivery and operations. - -There are numerous best practices and differing opinions on how to approach "DevOps the right way." We've learned that IT organizations and software delivery are complex issues, which means that most of the time there are no "easy" answers. Instead, continuous improvement within a contextual framework is a critical element. - -To introduce more objectivity and a measure of verifiability, we like to use the four key metrics suggested by "The State of DevOps" and "DORA." These four key metrics are: - -**To evaluate velocity:** -- Deployment Frequency (How often a team successfully deploys to production, e.g., daily, weekly, monthly, yearly) -- Lead time for changes (the average time it takes to deploy a commit to production) - -**To evaluate stability:** -- Time to Restore Services (For a failure, the median time between the deployment that caused the failure and the remediation) -- Change Failure Rate (The number of failures per number of deployments) - -### About DORA -The DevOps Research and Assessment (DORA) is the largest and longest-running research program of its kind, aiming to understand the capabilities driving software delivery and operations performance. Their report, "The State of DevOps," regularly provides insights, observations, and insights into high-performing IT organizations. - -### Additional Information -- [DORA Website](https://dora.dev/) -- [DORA's Journey: An Exploration](https://medium.com/@jezhumble/doras-journey-an-exploration-4c6bfc41e667) -- [DORA GitHub Repository](https://github.com/dora-team/fourkeys) diff --git a/radar/2023-11-01/fluentd.md b/radar/2023-11-01/fluentd.md deleted file mode 100644 index f80c50a..0000000 --- a/radar/2023-11-01/fluentd.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Fluentd" -ring: hold -quadrant: tools -tags: [devops] ---- - -[Fluentd](https://www.fluentd.org) remains a great tool for collecting logs, transforming them into any required format, and distributing them to various logging backends. However, in recent years, we have often transitioned to [Grafana Loki and Promtail](/platforms-and-aoe-services/loki/) for several reasons. - -We've also learned that extensive upfront log parsing carries a risk of losing logs and requires significant effort. This doesn't fit well with most projects. diff --git a/radar/2023-11-01/flux.md b/radar/2023-11-01/flux.md deleted file mode 100644 index bf34443..0000000 --- a/radar/2023-11-01/flux.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Flux" -ring: hold -quadrant: methods-and-patterns -tags: [frontend] -featured: false ---- - -In the early days of [React](/languages-and-frameworks/react/), [Flux](https://github.com/facebookarchive/flux) was introduced by Facebook as an architectural pattern for managing global state. Later, it evolved into a library, with contributions from the community. - -Today, there are numerous libraries that offer the Flux pattern or similar approaches to state management. These include framework-agnostic solutions like [Redux](/languages-and-frameworks/redux/) or [MobX](https://mobx.js.org/README.html), as well as framework-specific options like [Pinia](https://pinia.vuejs.org/) for Vue and [Zustand](https://docs.pmnd.rs/zustand) for React, among many others. - -One of the most popular solutions to date is Redux, which is why we use it in several projects. diff --git a/radar/2023-11-01/gitlab.md b/radar/2023-11-01/gitlab.md deleted file mode 100644 index cfe2bbb..0000000 --- a/radar/2023-11-01/gitlab.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "GitLab" -ring: adopt -quadrant: tools -tags: [ci/cd, coding] -featured: false ---- diff --git a/radar/2023-11-01/gradle.md b/radar/2023-11-01/gradle.md deleted file mode 100644 index 7d8329b..0000000 --- a/radar/2023-11-01/gradle.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Gradle" -ring: adopt -quadrant: tools -tags: [ci/cd, coding] -featured: false ---- - diff --git a/radar/2023-11-01/green-it.md b/radar/2023-11-01/green-it.md deleted file mode 100644 index df4d3d9..0000000 --- a/radar/2023-11-01/green-it.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: "Green IT" -ring: assess -quadrant: methods-and-patterns -tags: [architecture, coding] ---- - -In an age of ever-increasing digitalization, the energy consumption of data centers and the Internet continues to rise, raising concerns about the environmental impact of our digital activities. In response, the concept of "Green IT" has emerged, emphasizing the need for eco-friendly software development and operational practices. By highlighting key architectural patterns, development practices, and operational strategies for reducing the carbon footprint of IT applications, it challenges software vendors and developers to explore how they can contribute to greater sustainability. - -### Sustainable Software Development Practices -Well-architected software plays a pivotal role in reducing the environmental impact of digital systems. Sustainability in software development involves the consideration of various factors throughout the entire lifecycle: -- **Agile and Modular Development**: Develop software iteratively, focusing on essential functionality and creating modular, reusable components. -- **Programming Language Choice**: Opt for compiled languages such as [Rust](/languages-and-frameworks/rust/) or [Go](/languages-and-frameworks/go-lang/) that have lower energy consumption during execution. -- **Automation and Infrastructure-as-Code**: Automate resource management and shut down unused infrastructure during idle periods to decrease energy consumption. -- **Demand Shaping**: Schedule energy-intensive workloads to align with the availability of renewable energy sources. -- **Green Power**: Source electricity from sustainable and renewable sources. -- **Optimized Hardware and Software Lifespan**: Extend the life of hardware and software through thoughtful design and maintenance. - -### Metrics and Measurement -Software applications, especially those hosted in data centers, have a substantial environmental footprint as they require significant amounts of energy to operate. In addition, their development and use often necessitate the production of hardware devices such as servers, laptops, and smartphones. - -Assessing the carbon emissions throughout an application's lifecycle enables developers and enterprises to make informed decisions that reduce emissions, lower costs, and ensure compliance with environmental regulations. Measuring energy consumption highlights areas where software can be optimized for improved efficiency. Environmental metrics support sustainability reporting, showcasing an organization's commitment to eco-friendly practices. - -### Beware the Rebound Effect -Efficiency improvements often lead to time and cost savings, which can paradoxically lead to more workload and less energy savings - a rebound effect. Finding a balance between efficiency gains and sustainable growth is critical to sustainable software development. - -### Digitalization's Environmental Impact -The environmental impact of digitalization is a nuanced interplay between its potential for energy consumption and its ability to promote sustainability. - -Blockchain technology utilizing energy-intensive mining processes of proof-of-work consensus mechanisms demands immense computational power, resulting in substantial carbon emissions. Machine learning, a cornerstone of AI, requires vast amounts of data and computational resources. - -However, digitalization also emerges as a champion of environmental stewardship in several areas: Demand-driven production optimizes inventory, reduces waste, and curtails unnecessary production, ultimately minimizing energy consumption and emissions. The digital product passport introduces traceability and transparency throughout a product's lifecycle, promoting sustainability and empowering consumers to make eco-conscious choices. - -### A Greener Future for IT -Sustainable software development is not only an ethical imperative but also a competitive advantage. However, achieving comprehensive sustainability is a complex task. More than just minimizing energy consumption, Green IT compels us to make conscientious choices at every stage of the software development lifecycle. By adopting architectural patterns that prioritize sustainability, optimizing code, and embracing best practices in operations, we can contribute to a more eco-friendly digital future. diff --git a/radar/2023-11-01/harbor.md b/radar/2023-11-01/harbor.md deleted file mode 100644 index aa2d506..0000000 --- a/radar/2023-11-01/harbor.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Harbor" -ring: trial -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -We continue to utilize [Harbor](https://goharbor.io) in our projects. Since the last iteration of the AOE Technology Radar, we have discovered both existing and new features that we find useful: - -- An official [Terraform provider](https://registry.terraform.io/providers/goharbor/harbor/latest) for provisioning Harbor resources through Infrastructure as Code (IaC). -- The introduction of [Proxy Cache](https://goharbor.io/docs/latest/administration/configure-proxy-cache/) projects, which serve as pull-through caches for public container registries. These can, among other benefits, help reduce external network traffic. diff --git a/radar/2023-11-01/infrastructure-as-code.md b/radar/2023-11-01/infrastructure-as-code.md deleted file mode 100644 index 98f666f..0000000 --- a/radar/2023-11-01/infrastructure-as-code.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Infrastructure as Code" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops, ci/cd] -featured: false ---- diff --git a/radar/2023-11-01/jest.md b/radar/2023-11-01/jest.md deleted file mode 100644 index 81afe36..0000000 --- a/radar/2023-11-01/jest.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Jest" -ring: adopt -quadrant: tools -tags: [frontend, quality assurance] -featured: false ---- diff --git a/radar/2023-11-01/kubernetes-operators.md b/radar/2023-11-01/kubernetes-operators.md deleted file mode 100644 index 3c1f6b4..0000000 --- a/radar/2023-11-01/kubernetes-operators.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Kubernetes Operators" -ring: trial -quadrant: methods-and-patterns -tags: [devops] -featured: false ---- - -We've faded out Kubernetes Operators as a standalone recommendation because they are such a central part of [Kubernetes](/platforms-and-aoe-services/kubernetes/) that their use appears self-evident. diff --git a/radar/2023-11-01/ldap-login.md b/radar/2023-11-01/ldap-login.md deleted file mode 100644 index 50a8d62..0000000 --- a/radar/2023-11-01/ldap-login.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "LDAP Login" -ring: hold -quadrant: platforms-and-aoe-services -tags: [devops, security] -featured: false ---- diff --git a/radar/2023-11-01/loki.md b/radar/2023-11-01/loki.md deleted file mode 100644 index 6d3d783..0000000 --- a/radar/2023-11-01/loki.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Loki" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -After having very positive experiences, we decided to replace our [ELK stacks](/platforms-and-aoe-services/elk-stack/) with Loki, primarily for the following reasons: - -- Loki is significantly more cost-effective than the storage requirements of Elasticsearch. -- The PromQL-like query language, familiar to users of Prometheus, makes it easier for DevOps and SRE teams who already use Prometheus for monitoring to work with logs. -- Loki's native integration with Kubernetes simplifies the setup and configuration process. -- Loki typically requires less maintenance and overhead compared to ELK. diff --git a/radar/2023-11-01/microfrontends.md b/radar/2023-11-01/microfrontends.md deleted file mode 100644 index 4d3a69f..0000000 --- a/radar/2023-11-01/microfrontends.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "Micro Frontends" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture, frontend] ---- - -While Micro Frontends have gained significant attention as a software architectural approach that mirrors the principles of microservices at the frontend level, it's crucial to recognize that they are not a universal remedy for all frontend development challenges. The decision to implement Micro Frontends should be made thoughtfully, taking into account the project's specific requirements. - -### Pros: -- **Modularity:** Breaking down the frontend into smaller, manageable pieces allows for easier development, testing, and maintenance. Teams can work on individual modules autonomously, leading to faster development cycles. -- **Technology Agnosticism:** Enabling the use of different frameworks and technologies for different parts of the application. Teams can choose the best technology stack for each component, promoting flexibility and fostering innovation. -- **Resilience:** In monolithic applications, a single bug can potentially affect the entire system. Isolation of components mitigates this risk and simplifies maintenance and debugging. - -### Cons: -- **Complexity:** Managing multiple codebases, handling cross-cutting concerns such as authentication, routing, and state management, and ensuring a consistent user experience throughout the application can introduce a level of complexity that may not be justified for all projects. -- **Performance Overhead:** Increased JavaScript bundle sizes and additional HTTP requests, as each module may be loaded separately, can impact page load times, especially in low-bandwidth environments. Careful optimization and caching strategies are required to mitigate this issue. -- **Versioning and Compatibility:** Maintaining compatibility between evolving technologies and frameworks is a substantial challenge. Compatibility issues may arise, requiring additional development and testing efforts. - -Ultimately, the decision of whether to choose Micro Frontends or other architectural approaches should align with the project's goals, team expertise, and scalability requirements. Individual teams working on well-defined, independently deployable features of a large application may benefit from using Micro Frontends. However, for smaller applications or teams with limited resources, a traditional monolithic approach might be more efficient. diff --git a/radar/2023-11-01/microservices.md b/radar/2023-11-01/microservices.md deleted file mode 100644 index 9670b41..0000000 --- a/radar/2023-11-01/microservices.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Microservices" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture] -featured: false ---- diff --git a/radar/2023-11-01/mlops.md b/radar/2023-11-01/mlops.md deleted file mode 100644 index 8b0c51a..0000000 --- a/radar/2023-11-01/mlops.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "MLOps" -ring: assess -quadrant: methods-and-patterns -tags: [devops, ai] -featured: false ---- diff --git a/radar/2023-11-01/monorepo.md b/radar/2023-11-01/monorepo.md deleted file mode 100644 index 1539ce6..0000000 --- a/radar/2023-11-01/monorepo.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "Monorepo" -ring: adopt -quadrant: methods-and-patterns -tags: [coding] ---- - -Adopting a monorepo approach for our React and Next.js-based projects offers several benefits, _although it may not be -the best fit for every project._ - -1. More efficient code sharing and reusability. -2. Consistent development environment. -3. Easier cross-project refactoring. -4. Improved collaboration. -5. **Simplified Dependency Management**: In our monorepo, we can manage dependencies at the repository level, simplifying - the process of keeping everything up to date and avoiding version conflicts. -6. **Streamlined CI/CD Pipeline**: A single CI/CD pipeline that can build and test all our projects simultaneously. - This, of course, comes with the drawback of a more complicated CI/CD setup and potentially longer running pipelines. -7. **Better Code Ownership**: It's easier to determine who is responsible for each part of the codebase, which can - improve code ownership and accountability. -8. **Simplified Testing**: We can set up end-to-end tests and integration tests that cover the entire application more - easily in a monorepo, ensuring that changes in one part of the codebase don't break other parts. -9. **Codebase Navigation**: Developers can easily navigate through different parts of the codebase without having to - switch between multiple repositories or projects. - -**However, it is important to note that monorepos are not a one-size-fits-all solution.** They can introduce complexity, -especially in very large projects, and may not be suitable for all team sizes or development workflows. The decision to -adopt a monorepo should be based on a careful consideration of your project's specific requirements, team size, and -development practices. diff --git a/radar/2023-11-01/nats.md b/radar/2023-11-01/nats.md deleted file mode 100644 index c25c7c4..0000000 --- a/radar/2023-11-01/nats.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "NATS" -ring: assess -quadrant: tools -tags: [architecture, devops] -featured: false ---- diff --git a/radar/2023-11-01/next-js.md b/radar/2023-11-01/next-js.md deleted file mode 100644 index 5fa6bdd..0000000 --- a/radar/2023-11-01/next-js.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Next.js" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding, frontend] ---- - -We are convinced that Next.js is one of the go-to frameworks for React, and we're excited about the features that version 13 has brought with it. During the Next.js Conf 2022, the team announced some exciting adaptations in this release, but the most interesting one is the new "app" router. In collaboration with the React team, this new routing architecture brings some of the newest and most promising features of React 18 to life. - -When using the app router, every component, by default, becomes a [React Server Component](/methods-and-patterns/react-server-components/), making it one of the first real integrations of this pattern in a framework. The goal is to build complex interfaces while minimizing the amount of JavaScript shipped to the client. Another exciting feature is Streaming, which allows incremental transfer of parts of the UI to the client as they become ready. For example, immediately showing some fallback UI until an asynchronous action is completed, and then streaming the final UI to the client. With the app router, it's also possible to easily create shared layouts that preserve state during navigation and remain interactive. - -The good thing is that this new architecture can coexist alongside the old page router, giving us the flexibility to incrementally adapt to the new features in existing projects. diff --git a/radar/2023-11-01/nx.md b/radar/2023-11-01/nx.md deleted file mode 100644 index 0661a14..0000000 --- a/radar/2023-11-01/nx.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "NX" -ring: adopt -quadrant: tools -tags: [coding, ci/cd] -featured: false ---- diff --git a/radar/2023-11-01/open-policy-agent.md b/radar/2023-11-01/open-policy-agent.md deleted file mode 100644 index 79cb0fc..0000000 --- a/radar/2023-11-01/open-policy-agent.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Open Policy Agent" -ring: assess -quadrant: tools -tags: [security, architecture] -featured: false ---- - -We have been transitioning away from using Open Policy Agent at AOE. For alternative solutions, please refer to [Policy as Code](/methods-and-patterns/policy-as-code/). diff --git a/radar/2023-11-01/pipeline-as-code.md b/radar/2023-11-01/pipeline-as-code.md deleted file mode 100644 index 476ff13..0000000 --- a/radar/2023-11-01/pipeline-as-code.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Pipeline as Code" -ring: adopt -quadrant: methods-and-patterns -tags: [devops] -featured: false ---- diff --git a/radar/2023-11-01/playwright.md b/radar/2023-11-01/playwright.md deleted file mode 100644 index 1a988f8..0000000 --- a/radar/2023-11-01/playwright.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Playwright" -ring: adopt -quadrant: tools -tags: [coding, frontend, quality assurance] ---- - -[Playwright](https://playwright.dev) is a versatile tool for creating reliable end-to-end tests across different browsers, platforms, and languages. It's easy to get started with and comes with a wide range of built-in features. Playwright works on Windows, macOS, and Linux and seamlessly integrates with popular testing frameworks like Jest, Mocha, and Jasmine. - -Playwright's configuration offers valuable options, including native mobile emulation for Chrome on Android and Safari on iOS. It can also be extended using BDD tools like Cucumber or SpecFlow, allowing non-technical contributors to collaborate. - -Playwright tests are robust, as they wait for elements before taking actions to eliminate timeouts, a common cause of unreliable tests. - -In contrast to Cypress, Playwright excels at interacting with different origins and multiple tabs in tests. You can create scenarios with distinct contexts to handle various users within a test, saving authentication states for reuse in other tests, thus eliminating repetitive log-in operations. - -Developed and maintained by Microsoft, Playwright benefits from extensions for Visual Studio Code, streamlining test development, execution, and debugging. - -In summary, Playwright is a versatile testing tool offering compatibility, integration with testing frameworks, and advanced features like multi-origin interactions. Its robustness, ability to handle diverse scenarios, and close ties with Visual Studio Code make it an exceptional choice for end-to-end testing. diff --git a/radar/2023-11-01/pnpm.md b/radar/2023-11-01/pnpm.md deleted file mode 100644 index f633182..0000000 --- a/radar/2023-11-01/pnpm.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "pnpm" -ring: adopt -quadrant: tools -tags: [coding, frontend] -featured: false ---- diff --git a/radar/2023-11-01/pulumi.md b/radar/2023-11-01/pulumi.md deleted file mode 100644 index 45b5371..0000000 --- a/radar/2023-11-01/pulumi.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Pulumi" -ring: assess -quadrant: platforms-and-aoe-services -tags: [devops] -featured: false ---- - -We stuck with Terraform for most projects. diff --git a/radar/2023-11-01/react-native.md b/radar/2023-11-01/react-native.md deleted file mode 100644 index 0637e1b..0000000 --- a/radar/2023-11-01/react-native.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "React Native" -ring: assess -quadrant: languages-and-frameworks -tags: [coding, frontend] ---- - -[React Native](https://reactnative.dev/) is an open-source UI software framework used to build applications for Android, Android TV, iOS, macOS, tvOS, Web, Windows, and UWP. It enables developers to utilize the React framework alongside native platform features. - -Developing applications with a single codebase can help ensure consistent user experiences across platforms, while also delivering the performance advantages of native code. diff --git a/radar/2023-11-01/react-server-components.md b/radar/2023-11-01/react-server-components.md deleted file mode 100644 index 97ebc85..0000000 --- a/radar/2023-11-01/react-server-components.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "React Server Components" -ring: assess -quadrant: methods-and-patterns -tags: [frontend, coding] ---- - -Shortly after releasing React 17 in October 2020, the team introduced React Server Components (RSC) as a working draft in December 2020. RSCs represent a new application architecture paradigm within React designed to reduce the amount of JavaScript sent to the client. The ultimate goal is to enhance performance, user experience, and maintainability. - -This new feature enables the creation of components that exclusively run on the server. As a result, there is no impact on the bundle size downloaded by the client. For instance, libraries used in server components are not shipped to the client. RSCs also have the capability to access server-side resources, such as databases and the file system, directly. - -In addition to server components, there are client components, which are essentially the classic components everyone is familiar with. The only distinction is that client components need to be explicitly declared using a directive. Determining which components should be client or server can be one of the more challenging aspects, especially when the goal is to migrate existing applications. - -RSCs appear to be most effective when used with Server Side Rendering, although it is possible to use them without it. RSCs and Server Side Rendering complement each other well, as server components are only rendered once on the server and do not need to be sent to the client. Client components are still rendered on the server and then hydrated on the client side. However, with a well-structured application that minimizes client-side code and in combination with React 18's [Suspense and Selective Hydration](https://github.com/reactwg/react-18/discussions/37) features, a performance boost is expected. To test this hypothesis, the React team has collaborated with Vercel, the maintainer of [NextJS](/languages-and-frameworks/next-js/), to integrate RSCs into a suitable environment early. - -Overall, we recognize the potential of this new approach, even though there are several steps to take, particularly for meta-frameworks to achieve production readiness. It appears to be only a matter of time before adoption of React Server Components becomes widespread. This is why we have placed it in the assess ring, keeping a watchful eye on this evolving technology. diff --git a/radar/2023-11-01/react.md b/radar/2023-11-01/react.md deleted file mode 100644 index ee60bdf..0000000 --- a/radar/2023-11-01/react.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "React.js" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding, frontend] ---- - -React today is the most widely used frontend library within our company, employed in various forms. Whether it's integrated into frameworks like [NextJS](/languages-and-frameworks/next-js/) and [Remix](/languages-and-frameworks/remix/) or utilized for client-side-only applications, React plays a significant role in many of our ongoing projects. Over time, a community of experts has emerged within the company. - -We firmly believe that React 18, with its range of new features, will further enhance its popularity within our company and the broader community. - -### Suspense -While not an entirely new feature, Suspense was initially introduced in a basic version back in 2018. However, it had certain limitations. Its first official use case was code splitting with `React.lazy`, but this feature was only available on the client side, not during server rendering. The primary goal has always been to enhance the loading experience both on the client and server. With React 18, Suspense now enables Streaming server rendering, a new feature that allows React to send the HTML of the loading fallback first and then, after loading completes, send the actual HTML content to the client. The React team continues to work on improving Suspense, particularly to enable data fetching libraries to use it. They are collaborating with authors of some of the most prominent libraries like TanStack Query, SWR, and Apollo. - -### Server Components -Server Components represent a new paradigm in React application architecture with the goal of minimizing the amount of JavaScript sent to the client. This approach introduces a new type of component that operates exclusively on the server. It shows great promise, which is why we have given [React Server Components](/methods-and-patterns/react-server-components/) a dedicated entry on our Tech Radar. - -### Concurrency -This is a fundamental update to React's rendering model, primarily occurring under the hood. It introduces the ability to create multiple versions of a user interface concurrently. With concurrent React, rendering can be interrupted, abandoned, and resumed, allowing the application to respond to user interactions immediately, even if it's currently in the middle of rendering. - -The React team is collaborating closely with some of the major players in the React ecosystem to stabilize and enhance the library. They are also experimenting with new features, ensuring that React remains as exciting as ever. diff --git a/radar/2023-11-01/sbom.md b/radar/2023-11-01/sbom.md deleted file mode 100644 index 11ee6bf..0000000 --- a/radar/2023-11-01/sbom.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "Software Bill of Materials (SBOM)" -ring: assess -quadrant: platforms-and-aoe-services -tags: [devops, security] ---- - -A Software Bill of Materials (SBOM) is an artifact that consolidates information about the dependencies of a software. - -Several standards exist that define the contents and format of SBOMs. The most prominent open-source formats include: - -- [CycloneDX](https://cyclonedx.org/) (OWASP): designed in 2017 with the goal of identifying vulnerabilities in the software supply chain. -- [SPDX](https://spdx.dev/) (Linux Foundation): primarily focused on license compliance in the context of open source software. Support for tracking security vulnerabilities was added in 2016 with SPDX 2.1. - -While the goals of these SBOM formats vary, they both support: - -- Automated generation of SBOMs from source code. -- Machine-readable output to enable automated processing of SBOMs. - -We see the potential for SBOMs to enhance software supply chain security by: - -- Providing transparency regarding direct and transitive software dependencies. -- Automating the detection of software dependencies with known vulnerabilities. -- Promoting interoperability of security tools that support the same SBOM standards. diff --git a/radar/2023-11-01/serverless.md b/radar/2023-11-01/serverless.md deleted file mode 100644 index f294fdc..0000000 --- a/radar/2023-11-01/serverless.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: "Serverless" -ring: adopt -quadrant: methods-and-patterns -tags: [devops] ---- - -The serverless pattern, also referred to as Function as a Service (FaaS), represents a paradigm shift in cloud computing. It enables developers to focus solely on writing code, which is executed in response to events without having to manage the underlying servers or infrastructure. Serverless applications are composed of multiple individual functions or microservices that automatically scale in response to demand. - -At AOE, we encourage our development teams to adopt the serverless pattern for its increased scalability, reduced operational overhead, and cost-effectiveness. - -### Common Tools for Developing and Deploying Serverless Applications -- **[AWS SAM (Serverless Application Model)](https://aws.amazon.com/serverless/sam/):** An AWS-native tool that simplifies the deployment of serverless applications on Amazon Web Services (AWS) and supports multiple programming languages. -- **[Azure Functions Core Tools](https://github.com/Azure/azure-functions-core-tools/):** Provide seamless development, debugging, and deployment of serverless functions on Microsoft Azure. These tools integrate with Visual Studio Code. -- **[Google Cloud Functions Framework](https://cloud.google.com/functions/docs/functions-framework/):** Offer a local development environment, debugging capabilities, and a framework that integrates with other Google Cloud services. It supports multiple programming languages, including Node.js, Python, Go, and others. -- **[OpenFaaS](https://www.openfaas.com/):** Allow building and deploying serverless functions using Docker containers on Kubernetes. They provide flexibility in containerization and language choice. - -### Popular FaaS Providers -- **[AWS Lambda](https://aws.amazon.com/lambda/):** Amazon Web Services' serverless compute service with extensive language support and deep integration with AWS services. -- **[Azure Functions](https://azure.microsoft.com/services/functions/):** Microsoft Azure's serverless platform supporting multiple programming languages and seamless Azure service integration. -- **[Google Cloud Functions](https://cloud.google.com/functions):** Google Cloud's serverless platform optimized for event-driven applications and simplified serverless development. -- **[IBM Cloud Functions](https://www.ibm.com/cloud/functions):** IBM's serverless computing platform based on the open-source Apache OpenWhisk project, offering flexibility and hybrid cloud capabilities. -- **[Firebase Functions](https://firebase.google.com/docs/functions):** Google's serverless solution for mobile and web app development, tightly integrated with Firebase services like the real-time database and hosting. - -### When to Apply the Serverless Pattern - -Embracing the Serverless pattern can significantly enhance development speed, scalability, and cost-effectiveness in modern software architectures. For example: -- **Event-Driven Workloads:** Serverless is ideal for applications with sporadic or unpredictable workloads driven by events like user actions, sensor data, or file uploads. -- **Scaling Microservices:** Adopt serverless for specific microservices within a larger architecture to simplify deployment and scale. -- **Cost Optimization:** Use serverless to optimize costs by paying only for the resources consumed during execution. -- **Prototyping and MVPs:** Quickly build and test minimum viable products (MVPs) and prototypes without extensive infrastructure setup. -- **Short-Lived Compute:** For tasks that require short bursts of compute power, such as data processing or image resizing. diff --git a/radar/2023-11-01/service-mesh.md b/radar/2023-11-01/service-mesh.md deleted file mode 100644 index daaf42b..0000000 --- a/radar/2023-11-01/service-mesh.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Service Mesh" -ring: trial -quadrant: platforms-and-aoe-services -tags: [architecture, devops, security] ---- - -We have implemented Service Meshes in multiple projects. In particular, mTLS is a valuable feature that we believe almost all projects can benefit from. diff --git a/radar/2023-11-01/sigstore.md b/radar/2023-11-01/sigstore.md deleted file mode 100644 index 326215f..0000000 --- a/radar/2023-11-01/sigstore.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Sigstore" -ring: trial -quadrant: platforms-and-aoe-services -tags: [devops, security] ---- - -[Sigstore](https://www.sigstore.dev) is a project by The Linux Foundation® aimed at developing a standard for signing and verifying container images. - -While its primary benefit is signing and verifying public images, it can also be used for internal images. Its central tool, `cosign`, allows the signing of container artifacts using a private key within a CI pipeline. This approach enables us to track which job built a specific image and identify the associated codebase. Furthermore, it prevents any malicious entity from tampering with an image or building an image from an unknown source outside the CI pipeline. - -With support and funding from The Linux Foundation and its relatively low integration effort, we believe this project has the potential to become the standard for signing container images in open-source projects. [Kubernetes has already begun signing their release artifacts](https://github.com/kubernetes/enhancements/issues/3031) with cosign, and we anticipate that other entities will also adopt it. Therefore, in the future, this ecosystem could serve as a reliable means of verifying the authenticity of public images. diff --git a/radar/2023-11-01/sketch.md b/radar/2023-11-01/sketch.md deleted file mode 100644 index cd65585..0000000 --- a/radar/2023-11-01/sketch.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Sketch" -ring: adopt -quadrant: tools -tags: [ux/ui] -featured: false ---- - -Sketch is no longer used by Team XD as we have moved to [Figma](/tools/figma/) and just finished the last project done in Sketch. diff --git a/radar/2023-11-01/sonarqube.md b/radar/2023-11-01/sonarqube.md deleted file mode 100644 index 607e4c9..0000000 --- a/radar/2023-11-01/sonarqube.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "SonarQube" -ring: adopt -quadrant: tools -tags: [ci/cd, quality assurance] -featured: false ---- - -SonarQube remains a good choice for checking your code quality. However, when using GitLab pipelines, it can be replaced with the built-in functionality provided by [GitLab](https://docs.gitlab.com/ee/ci/testing/code_quality.html). diff --git a/radar/2023-11-01/specflow.md b/radar/2023-11-01/specflow.md deleted file mode 100644 index d832626..0000000 --- a/radar/2023-11-01/specflow.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "SpecFlow" -ring: assess -quadrant: "languages-and-frameworks" -tags: [coding, quality assurance] -featured: false ---- diff --git a/radar/2023-11-01/spock_geb.md b/radar/2023-11-01/spock_geb.md deleted file mode 100644 index d2a9c35..0000000 --- a/radar/2023-11-01/spock_geb.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Spock + Geb" -ring: hold -quadrant: languages-and-frameworks -tags: [coding, quality assurance] -featured: false ---- - -Most projects at AOE have transitioned away from Groovy, and other testing frameworks for JVM languages are more advanced and user-friendly. Consequently, mentioning Spock no longer seems relevant. diff --git a/radar/2023-11-01/state-management-pattern.md b/radar/2023-11-01/state-management-pattern.md deleted file mode 100644 index c902cf9..0000000 --- a/radar/2023-11-01/state-management-pattern.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "State Management Pattern" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture, coding] ---- - -State Management is a design pattern with the goal of efficiently sharing state data across components while separating domain representation from state management. This pattern is widely used in many popular web frameworks such as [Vuex](/languages-and-frameworks/vuex/) or [Redux](/languages-and-frameworks/redux/). - -Especially in [reactive](/methods-and-patterns/reactive-programming/) systems, this pattern helps in maintaining decoupled, stateless components with immutable data. The implementation of state management varies and depends on the specific requirements of the application at hand. - -For distributed backend systems, one might consider utilizing [Akka's](/languages-and-frameworks/akka/) cluster sharding module to elastically manage domain object states. - -We employ various state management patterns across most [Vue](/languages-and-frameworks/vue/) and [React](/languages-and-frameworks/react/) projects that require them. diff --git a/radar/2023-11-01/stitches.md b/radar/2023-11-01/stitches.md deleted file mode 100644 index 9e2854a..0000000 --- a/radar/2023-11-01/stitches.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Stitches" -ring: hold -quadrant: languages-and-frameworks -tags: [coding, frontend] ---- - -Stitches is [no longer actively maintained](https://github.com/stitchesjs/stitches/discussions/1149#discussioncomment-6223090) due to compatibility issues with CSS-in-JS runtime injection and React 18 Server Components. Therefore, we do not recommend using it for new projects. diff --git a/radar/2023-11-01/svelte.md b/radar/2023-11-01/svelte.md deleted file mode 100644 index a582501..0000000 --- a/radar/2023-11-01/svelte.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Svelte" -ring: trial -quadrant: "languages-and-frameworks" -tags: [coding, frontend] ---- - -We have some smaller [Svelte](https://svelte.dev/) projects at AOE, and there are some features we would like to further explore, such as: - -- Compatibility with other libraries or frameworks -- Server-side rendering by default -- Exceptional performance diff --git a/radar/2023-11-01/team-start-page.md b/radar/2023-11-01/team-start-page.md deleted file mode 100644 index 4237650..0000000 --- a/radar/2023-11-01/team-start-page.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Team Start Page" -ring: adopt -quadrant: methods-and-patterns -tags: [quality assurance, documentation] -featured: false ---- diff --git a/radar/2023-11-01/typescript.md b/radar/2023-11-01/typescript.md deleted file mode 100644 index b93f09d..0000000 --- a/radar/2023-11-01/typescript.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "TypeScript" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding, frontend] ---- - -TypeScript has become more widely used and is now considered the industry standard for most JavaScript projects and provides the means to prevent errors during development, refactor code, scale projects, and enhance code collaboration. - -Its widespread adoption and the support of a large community contribute to further improving and documenting the language. - -TypeScript is our language of choice for both existing and future projects, allowing us to write robust and clean JavaScript code. diff --git a/radar/2023-11-01/vite.md b/radar/2023-11-01/vite.md deleted file mode 100644 index ecd7359..0000000 --- a/radar/2023-11-01/vite.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Vite" -ring: adopt -quadrant: tools -tags: [frontend, coding] ---- - -As modern browsers now support the native usage of [ES Modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules), it's possible to use them to enhance frontend development, which is the goal of [Vite](https://vitejs.dev/guide/why.html). - -Since its announcement in 2020, Vite has garnered significant attention and has grown a large community that provides pluggable features. Vite offers two key components: a native ESM-based development server and a bundler for production builds. - -The development server boasts improved performance during development, as modules are loaded and transpiled only on demand. This leads to faster cold-start times and quicker Hot Module Replacement (HMR) support. - -We consider Vite to be a stable and production-ready tool, and we would recommend it for upcoming projects. diff --git a/radar/2023-11-01/vue.md b/radar/2023-11-01/vue.md deleted file mode 100644 index 27e2197..0000000 --- a/radar/2023-11-01/vue.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Vue.js" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding, frontend] ---- - -[Vue](https://vuejs.org/guide/introduction.html) is a progressive and incrementally adoptable framework for building user interfaces, renowned for its simplicity and flexibility. The core library focuses on views, making it easy to integrate with other libraries and existing projects. It excels in powering single-page applications when combined with supporting libraries like [Pinia](https://pinia.vuejs.org), [vue-router](https://router.vuejs.org), and [VueUse](https://vueuse.org). However, it's also versatile enough to build server-side rendered and statically generated web applications using the [Nuxt framework](https://nuxt.com). - -Vue's HTML-based template syntax enables declarative binding of the rendered DOM to the underlying Vue instance's data. This, in conjunction with the [reactivity system](https://vuejs.org/guide/extras/reactivity-in-depth.html), ensures high performance by intelligently determining the minimal components to re-render and applying the minimal DOM manipulations when the app-state changes. Furthermore, applications can be organized into [Single File Components](https://vuejs.org/guide/scaling-up/sfc.html), each containing the template (HTML), style (CSS), and functionality (JS). The [Composition API and 'script setup'](https://vuejs.org/api/sfc-script-setup.html) syntax further enhance code readability and modularity, promoting reusability and maintainability throughout the development process. - -Vue introduces powerful features like Teleport, which enables components to render at any position on the page, and Fragment, removing the requirement for a single root element in a template. Additionally, Vue enhances performance through Tree-Shaking, reducing bundle size, and Compiler-informed Virtual DOM optimizations, resulting in faster initial renders and updates while consuming less memory. diff --git a/radar/2023-11-01/webpack.md b/radar/2023-11-01/webpack.md deleted file mode 100644 index f5d2fbf..0000000 --- a/radar/2023-11-01/webpack.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Webpack" -ring: adopt -quadrant: tools -tags: [frontend, coding] -featured: false ---- - -Webpack remains one of the, if not the most, widely used bundlers. The team behind it is continually fixing bugs and adding new features, which are released in major version updates. Despite the emergence of new bundlers in recent years, we still recommend using Webpack. diff --git a/radar/2023-11-01/yarn.md b/radar/2023-11-01/yarn.md deleted file mode 100644 index e620165..0000000 --- a/radar/2023-11-01/yarn.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Yarn" -ring: adopt -quadrant: tools -tags: [frontend, coding] -featured: false ---- - -We have decided to move Yarn into the "adopt" ring as it has continued to establish itself in recent years and has proven to be successful in many of our projects. - -Yarn consistently offers better performance than npm and, in addition, provides both offline installation and the Plug'n'Play approach. With Plug'n'Play mode, Yarn replaces the node_modules directory with a virtual file system to enhance performance and save disk space. - -Yarn is an excellent choice for monorepos, thanks to its support for workspaces, and is highly recommended as a package manager. diff --git a/radar/2023-11-01/zero-trust.md b/radar/2023-11-01/zero-trust.md deleted file mode 100644 index be60bb9..0000000 --- a/radar/2023-11-01/zero-trust.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Zero Trust" -ring: adopt -quadrant: methods-and-patterns -tags: [security, architecture] ---- - -Keynote: ["Zero Trust - The Hard Way"](https://www.youtube.com/watch?v=fCENO_Jt3QE), DevOpsCon Berlin 2023 diff --git a/radar/2024-07-10/12-factor-apps.md b/radar/2024-07-10/12-factor-apps.md deleted file mode 100644 index 59d197d..0000000 --- a/radar/2024-07-10/12-factor-apps.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: "12 / 15 factor apps" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture] ---- - -The [12-factor app](https://12factor.net/de/) methodology, originally developed by Heroku, provides a comprehensive set of best practices for building cloud-native applications. This methodology emphasizes creating applications that are easy to manage, scalable, and portable across different environments. The [15-factor model](https://developer.ibm.com/articles/15-factor-applications/) extends this framework to address additional concerns relevant in modern cloud-native development. - -### Core Principles of 12-Factor Apps - -1. **Codebase**: Maintain a single codebase tracked in version control, with multiple deployments. -2. **Dependencies**: Explicitly declare and isolate dependencies. -3. **Config**: Store configuration in the environment. -4. **Backing Services**: Treat backing services as attached resources. -5. **Build, Release, Run**: Strictly separate build and run stages. -6. **Processes**: Execute the app as one or more stateless processes. -7. **Port Binding**: Export services via port binding. -8. **Concurrency**: Scale out via the process model. -9. **Disposability**: Maximize robustness with fast startup and graceful shutdown. -10. **Dev/Prod Parity**: Keep development, staging, and production as similar as possible. -11. **Logs**: Treat logs as event streams. -12. **Admin Processes**: Run admin/management tasks as one-off processes. - -### Extending to 15 Factors - -The 15-factor model builds upon the original principles by adding: - -13. **API First**: Design APIs first to ensure interoperability and future-proofing. -14. **Telemetry**: Implement robust telemetry for monitoring and diagnostics. -15. **Authentication and Authorization**: Incorporate strong, centralized authentication and authorization mechanisms. - -### Relevance - -For us, this rather old pattern is still very relevant, and many methods, patterns, and practices on our radar are related and enable these patterns at their core. To name a few, [Kubernetes](/platforms-and-aoe-services/kubernetes/), [Prometheus](/platforms-and-aoe-services/prometheus/), [Self-Service Infrastructure](/platforms-and-aoe-services/self-service-infrastructure/), or the [API-First Design Approach](/methods-and-patterns/api-first-design-approach/) are very related. Others, like [Shared Responsibility Models](/methods-and-patterns/shared-responsibility/), are easier to implement based on this pattern. diff --git a/radar/2024-07-10/adr.md b/radar/2024-07-10/adr.md deleted file mode 100644 index 06279a7..0000000 --- a/radar/2024-07-10/adr.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "ADR" -quadrant: methods-and-patterns -ring: adopt -tags: [architecture, documentation] -featured: false ---- diff --git a/radar/2024-07-10/akka.md b/radar/2024-07-10/akka.md deleted file mode 100644 index c635b9f..0000000 --- a/radar/2024-07-10/akka.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Akka" -ring: hold -quadrant: languages-and-frameworks -tags: [coding] -featured: false ---- diff --git a/radar/2024-07-10/angular.md b/radar/2024-07-10/angular.md deleted file mode 100644 index 007905d..0000000 --- a/radar/2024-07-10/angular.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Angular" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding, frontend] ---- - -[Angular](https://angular.io/) version 18 introduces transformative features, notably the introduction of Signals and the partnership with Wiz. - -Signals offer a more efficient and declarative way to handle reactivity, allowing automatic UI updates with changing data, thus reducing boilerplate and enhancing maintainability. - -Standalone components, further refined in Angular 18, reduce module dependency and complexity, promoting a modular and maintainable codebase. Enhancements in monorepo management improve the organization and sharing of components across projects, supporting large-scale applications. - -Wiz is a Google internal framework used for performance-critical apps like Google Search. The merge with Wiz brings advanced profiling, debugging, and performance optimization tools from Wiz into Angular, streamlining workflows and improving application performance. This collaboration aims to boost developer productivity and efficiency by combining Angular's framework robustness with Wiz's powerful tools. - -Overall, Angular 18's advancements in reactivity and tooling, along with the Wiz integration, significantly boost performance, usability, and developer productivity, solidifying Angular's status as a leading framework for modern web development. diff --git a/radar/2024-07-10/api-first-design-approach.md b/radar/2024-07-10/api-first-design-approach.md deleted file mode 100644 index 05a636d..0000000 --- a/radar/2024-07-10/api-first-design-approach.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "API-First Design Approach" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture] -featured: false ---- diff --git a/radar/2024-07-10/apisix.md b/radar/2024-07-10/apisix.md deleted file mode 100644 index 0042356..0000000 --- a/radar/2024-07-10/apisix.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Apache APISIX" -ring: trial -quadrant: tools -tags: [devops] ---- - -[Apache APISIX](https://apisix.apache.org/) is an open-source, high-performance API gateway designed for microservices, cloud-native, and container-based architecture. It provides a wide range of features to manage and secure API services: - -- **Scalability**: Load balancing and routing, dynamic scaling -- **Performance**: Fast and reliable, supports caching and rate limiting -- **Multi-Protocol Support**: Supports HTTP, HTTPS, WebSockets, and gRPC -- **Customization**: Plugins for authentication, authorization, and traffic management - -APISIX is currently in trial at AOE and is being used in multiple projects. diff --git a/radar/2024-07-10/apm.md b/radar/2024-07-10/apm.md deleted file mode 100644 index 61d8fbf..0000000 --- a/radar/2024-07-10/apm.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Application Performance Management" -ring: adopt -quadrant: methods-and-patterns -tags: [devops] -featured: false ---- diff --git a/radar/2024-07-10/appium.md b/radar/2024-07-10/appium.md deleted file mode 100644 index 5cb2b88..0000000 --- a/radar/2024-07-10/appium.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Appium" -ring: trial -quadrant: tools -tags: [academy training, quality assurance, ux/ui] ---- - -[Appium](https://appium.io) is an open-source automation tool for scripting and testing native, mobile web, and hybrid applications on Android and iOS platforms. It uses the WebDriver protocol to drive iOS and Android applications. Widely used in mobile application testing, Appium allows developers and testers to write tests using the same API across different platforms and programming languages. This reduces the complexity of maintaining separate test suites for each platform, making it a versatile tool for cross-platform mobile testing. - -### Key Features - -- **Cross-Platform**: Supports Android and iOS, allowing for broad test coverage with a single tool. -- **Language Agnostic**: Compatible with any programming language that can send HTTP requests. -- **WebDriver Protocol**: Utilizes the WebDriver standard, ensuring consistency and ease of use. -- **Extensibility**: Provides a plugin system for custom extensions and functionality. -- **Community Support**: Benefits from a vibrant open-source community contributing to its growth and stability. - -At AOE, we use Appium for testing hybrid and native Android and iOS apps. diff --git a/radar/2024-07-10/argocd.md b/radar/2024-07-10/argocd.md deleted file mode 100644 index ba1a4da..0000000 --- a/radar/2024-07-10/argocd.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Argo CD" -ring: adopt -quadrant: tools -tags: [ci/cd] ---- - -Argo CD has proven its effectiveness in various projects by successfully simplifying and automating Kubernetes application deployments. diff --git a/radar/2024-07-10/assisted-ai.md b/radar/2024-07-10/assisted-ai.md deleted file mode 100644 index 1e7ced6..0000000 --- a/radar/2024-07-10/assisted-ai.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "AI Assisted Programming" -ring: adopt -quadrant: "methods-and-patterns" -tags: [ai, architecture, coding] ---- - -### Adopting GitHub Copilot - -We've adopted AI Assisted Programming to enhance our overall efficiency and product quality, with [GitHub Copilot](/tools/github-copilot/) serving as our primary tool for this purpose. - -Guidelines for its usage have been established, and we continuously refine our practices by sharing best practices and insights within our communities. - -The use of [GitHub Copilot](/tools/github-copilot/) is currently project-based and requires customer consent. While utilizing it, we remain mindful of potential risks and actively work to mitigate them. - -### Potential Risks and Mitigation Strategies - -- **Code Quality and Reliability**: Validate and review generated code before integration into the project. Manual code reviews and testing should remain fundamental to the development process. -- **Security Vulnerabilities**: Conduct thorough security assessments and penetration testing to identify and rectify potential weaknesses. Stay updated with security best practices and ensure AI-generated code aligns with secure coding guidelines. -- **Intellectual Property Concerns**: Scrutinize licensing and usage terms of AI tools. Exercise caution when incorporating code snippets from external sources and ensure compliance with relevant licenses. -- **Data Privacy**: Review data access and privacy policies of AI tools meticulously. Prevent inadvertent exposure or sharing of sensitive or confidential information with third parties. diff --git a/radar/2024-07-10/bun.md b/radar/2024-07-10/bun.md deleted file mode 100644 index 5c5fe82..0000000 --- a/radar/2024-07-10/bun.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Bun" -ring: assess -quadrant: tools -tags: [coding, frontend] ---- - -[Bun](https://bun.sh/) is an all-in-one toolkit for JavaScript and TypeScript environments. It includes a JavaScript runtime, bundler, test runner, and Node.js-compatible package manager. It is designed to optimize the performance and development experience of JavaScript and TypeScript applications. Bun provides fast startup times, native TypeScript support, and improved dependency management. - -We are very curious whether Bun is suitable for our projects and fulfills our requirements with regard to professional environments. diff --git a/radar/2024-07-10/client-side-error-logging.md b/radar/2024-07-10/client-side-error-logging.md deleted file mode 100644 index 1b66e9f..0000000 --- a/radar/2024-07-10/client-side-error-logging.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Client-Side Error Logging" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture, frontend] -featured: false ---- diff --git a/radar/2024-07-10/conventionalcommits.md b/radar/2024-07-10/conventionalcommits.md deleted file mode 100644 index d74b564..0000000 --- a/radar/2024-07-10/conventionalcommits.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Conventional Commits" -ring: adopt -quadrant: methods-and-patterns -tags: [coding] -featured: false ---- diff --git a/radar/2024-07-10/css-in-js.md b/radar/2024-07-10/css-in-js.md deleted file mode 100644 index 9560e72..0000000 --- a/radar/2024-07-10/css-in-js.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "CSS-in-JS" -ring: adopt -quadrant: methods-and-patterns -tags: [coding, frontend] ---- - -Since the last release, [Stylex](/languages-and-frameworks/stylex/) and [Panda CSS](/languages-and-frameworks/panda-css/) have emerged as the most promising CSS-in-JS solutions for us. diff --git a/radar/2024-07-10/cypress.md b/radar/2024-07-10/cypress.md deleted file mode 100644 index 6171b3d..0000000 --- a/radar/2024-07-10/cypress.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Cypress" -ring: adopt -quadrant: tools -tags: [academy training, frontend, quality assurance] ---- - -[Cypress](https://www.cypress.io/) continues to prove its value in AOE Group projects and has evolved significantly since early 2022. Cypress remains one of our preferred testing tools for front-end developers, thanks to its robust support for JavaScript and [TypeScript](/languages-and-frameworks/typescript/). The ease of adoption and implementation, combined with the maintainability of test specifications, has only improved with recent updates. - -### Key Updates and Enhancements of the Past Years - -- **Broader Browser Support**: Cypress now supports a wider range of browsers, including Edge and WebKit, in addition to Chrome, Firefox, and Electron. This expansion ensures comprehensive testing across more environments. -- **Improved Performance**: The latest versions of Cypress have focused on enhancing test execution speed. Optimizations in the core engine and better resource management have resulted in faster and more reliable test runs, even for large and complex test suites. -- **Enhanced Debugging Capabilities**: Debugging has become even more user-friendly with improved tooling. Features like time travel, where developers can step through each test command, and better error messages help in quickly identifying and resolving issues. -- **CI/CD Integration**: Cypress has strengthened its integration with popular CI/CD tools. Improved plugins and configurations for platforms like GitHub Actions, GitLab CI, CircleCI, and Jenkins make it easier to incorporate Cypress tests into continuous integration and continuous deployment pipelines. diff --git a/radar/2024-07-10/decoupling-via-messaging.md b/radar/2024-07-10/decoupling-via-messaging.md deleted file mode 100644 index 98c54f0..0000000 --- a/radar/2024-07-10/decoupling-via-messaging.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Decoupling via Messaging" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture, devops] -featured: false ---- - -In recent years, messaging systems have become more robust, scalable, and easier to integrate with existing applications. This has increased the importance of messaging in modern software architectures, making it an essential strategy for decoupling components and ensuring the resilience and stability of distributed systems: - -- **Event Streaming**: Platforms such as [Apache Kafka](/tools/kafka/) have evolved significantly to handle massive data streams with enhanced reliability and integration capabilities. -- **Serverless Messaging**: The rise of [serverless computing](/methods-and-patterns/serverless/) has simplified the creation of scalable, event-driven architectures, allowing developers to build complex workflows and event-processing pipelines without the overhead of managing infrastructure. -- **Advanced Observability**: Improved tools for monitoring and managing messaging systems now offer detailed insights into message flows and system performance, enabling faster diagnosis and resolution of issues. diff --git a/radar/2024-07-10/dependency-update-scan.md b/radar/2024-07-10/dependency-update-scan.md deleted file mode 100644 index 81f6187..0000000 --- a/radar/2024-07-10/dependency-update-scan.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Dependency Update Scan" -ring: adopt -quadrant: methods-and-patterns -tags: [coding, security] -featured: false ---- diff --git a/radar/2024-07-10/design-system.md b/radar/2024-07-10/design-system.md deleted file mode 100644 index d83a74b..0000000 --- a/radar/2024-07-10/design-system.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Design System" -ring: adopt -quadrant: "methods-and-patterns" -tags: [architecture, coding, documentation, frontend, ux/ui] -featured: false ---- diff --git a/radar/2024-07-10/devspace.md b/radar/2024-07-10/devspace.md deleted file mode 100644 index e757e2d..0000000 --- a/radar/2024-07-10/devspace.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "DevSpace" -quadrant: tools -ring: assess -tags: [coding, devops] ---- - -[DevSpace](https://www.devspace.sh/) is an open-source developer tool for Kubernetes that lets you develop and deploy cloud-native software faster. As a "client-only" development tool, it is very simple to develop Kubernetes-native applications in local or any remote cluster. - -- **Build**, test, and debug applications directly inside Kubernetes. -- **Develop** with hot reloading: updates your running containers without rebuilding images or restarting containers. -- **Unify** deployment workflows within your team and across dev, staging, and production. -- **Automate** repetitive tasks for image building and deployment. -- **Hot-Reloading** allows to recompile and restart Pods in local or remote clusters. diff --git a/radar/2024-07-10/elk-stack.md b/radar/2024-07-10/elk-stack.md deleted file mode 100644 index d884166..0000000 --- a/radar/2024-07-10/elk-stack.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "ELK Stack" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops] -featured: false ---- - -While we continue to recommend the ELK Stack for specific use cases, we now prefer [Loki](/platforms-and-aoe-services/loki/) for most [Kubernetes](/platforms-and-aoe-services/kubernetes/)-based setups due to its seamless integration, cost efficiency, and user-friendly query language. diff --git a/radar/2024-07-10/falco.md b/radar/2024-07-10/falco.md deleted file mode 100644 index b529e2a..0000000 --- a/radar/2024-07-10/falco.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Falco" -ring: assess -quadrant: tools -tags: [security] -featured: false ---- diff --git a/radar/2024-07-10/fitness-functions.md b/radar/2024-07-10/fitness-functions.md deleted file mode 100644 index 48252fb..0000000 --- a/radar/2024-07-10/fitness-functions.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "Fitness Functions" -ring: assess -quadrant: methods-and-patterns -tags: [architecture, ci/cd, quality assurance] ---- - -[Fitness Functions](https://www.thoughtworks.com/insights/articles/fitness-function-driven-development) are a method for guiding software development decisions based on predefined criteria that ensure software health and alignment with desired outcomes. Inspired by evolutionary algorithms, fitness functions evaluate how well a given solution or set of actions meets specified goals, enabling teams to maintain and improve system quality in a continuous and measurable manner. - -### Key Features - -- **Objective Measurement**: Provides quantifiable metrics for evaluating various aspects of software quality and performance. -- **Continuous Monitoring**: Integrates with CI/CD pipelines to continuously assess the system’s fitness against predefined goals. -- **Automated Feedback**: Offers immediate insight and feedback on the impact of code changes, reducing the risk of degradation over time. -- **Customizable Criteria**: Allows teams to define fitness functions tailored to specific project needs and quality attributes. -- **Alignment with Business Goals**: Ensures that technical decisions are aligned with business goals by making trade-offs explicit and measurable. -- **Evolutionary Approach**: Encourages iterative improvement and adaptation, similar to natural selection processes in evolutionary biology. - -[DORA (DevOps Research and Assessment) Metrics](/methods-and-patterns/dora-metrics/), such as deployment frequency, lead time for changes, mean time to recovery, and change failure rate, provide high-level insights into the overall health and effectiveness of an organization's software delivery practices. By integrating fitness functions into development workflows, teams receive detailed, actionable feedback on specific aspects of their systems, leading to continuous improvement in deployment speed, reliability, and quality. - -By embedding fitness functions into the CI/CD pipeline, teams can ensure that their applications adhere to architectural standards and quality attributes. This proactive approach helps maintain a robust and scalable architecture that provides a solid foundation for the software as it evolves. - -At AOE, we utilize fitness functions to ensure our software systems remain robust, maintainable, and aligned with business goals throughout the development lifecycle. diff --git a/radar/2024-07-10/flutter.md b/radar/2024-07-10/flutter.md deleted file mode 100644 index 3cbeed4..0000000 --- a/radar/2024-07-10/flutter.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Flutter" -ring: trial -quadrant: languages-and-frameworks -tags: [coding, frontend, ux/ui] -featured: false ---- diff --git a/radar/2024-07-10/gitflow.md b/radar/2024-07-10/gitflow.md deleted file mode 100644 index a5048d0..0000000 --- a/radar/2024-07-10/gitflow.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "GitFlow" -ring: hold -quadrant: methods-and-patterns -tags: [agile, coding, devops] -featured: false ---- diff --git a/radar/2024-07-10/github-copilot.md b/radar/2024-07-10/github-copilot.md deleted file mode 100644 index fa02ede..0000000 --- a/radar/2024-07-10/github-copilot.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "GitHub Copilot" -ring: adopt -quadrant: tools -tags: [ai, architecture, coding] ---- - -[GitHub Copilot](https://github.com/features/copilot) is an AI-powered code completion tool that integrates seamlessly with popular IDEs to assist our developers by providing code suggestions and automations based on natural language prompts. - -### Features and Benefits - -- **Contextual Code Suggestions**: Understands the context of your project and suggests relevant code snippets, functions, and even whole classes. -- **Natural Language Understanding**: Converts natural language comments into functional code, helping developers quickly translate ideas into executable code. -- **Code Generation Across Languages**: Supports multiple programming languages and frameworks, making it versatile for different project requirements. -- **Automated Documentation**: Generates documentation comments automatically, aiding in better code maintenance and readability. - -See [AI Assisted Programming](/methods-and-patterns/assisted-ai/) for more information on our adoption of AI tools in our development workflows. diff --git a/radar/2024-07-10/graalnative.md b/radar/2024-07-10/graalnative.md deleted file mode 100644 index b43fa47..0000000 --- a/radar/2024-07-10/graalnative.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Graal Native Image" -ring: trial -quadrant: tools -tags: [coding] -featured: false ---- diff --git a/radar/2024-07-10/graphql.md b/radar/2024-07-10/graphql.md deleted file mode 100644 index ad6dea9..0000000 --- a/radar/2024-07-10/graphql.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "GraphQL" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture] -featured: false ---- diff --git a/radar/2024-07-10/harbor.md b/radar/2024-07-10/harbor.md deleted file mode 100644 index 7c625d8..0000000 --- a/radar/2024-07-10/harbor.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Harbor" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -[Harbor](https://goharbor.io) has become the de-facto standard for self-hosted container registries in our projects. diff --git a/radar/2024-07-10/invision.md b/radar/2024-07-10/invision.md deleted file mode 100644 index 79fda36..0000000 --- a/radar/2024-07-10/invision.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "InVision" -ring: hold -quadrant: tools -tags: [ux/ui] -featured: false ---- - -InVision will discontinue its design collaboration services (including prototypes, DSM, etc.) at the end of 2024, as announced by CEO Michael Shenkman in [this statement](https://www.invisionapp.com/inside-design/invision-design-collaboration-services-shutdown/). diff --git a/radar/2024-07-10/k3d.md b/radar/2024-07-10/k3d.md deleted file mode 100644 index f8bf258..0000000 --- a/radar/2024-07-10/k3d.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "K3D" -ring: trial -quadrant: tools -tags: [devops] ---- - -[k3d](https://k3d.io/) is a lightweight wrapper to run [k3s](https://k3s.io) (Rancher Lab’s minimal Kubernetes distribution) in Docker. It is a very useful tool to create Kubernetes-native development environments or use it as a sandbox to test out things locally. diff --git a/radar/2024-07-10/langchain.md b/radar/2024-07-10/langchain.md deleted file mode 100644 index 54fd0f3..0000000 --- a/radar/2024-07-10/langchain.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "LangChain" -ring: trial -quadrant: languages-and-frameworks -tags: [ai] ---- - -[LangChain](https://github.com/langchain-ai/langchain) is a framework designed to enhance the development and deployment of applications leveraging natural language processing (NLP) models. It is particularly suited for applications such as "question-answering," "chatbots," or "conversational agents," often utilizing the [Retrieval Augmented Generation (RAG)](/methods-and-patterns/retrieval-augmented-generation/) pattern. - -## Key Features - -- **Integration with Multiple NLP Models**: LangChain supports the integration of various NLP models, allowing developers to choose the best-suited models for their specific use cases. -- **Support for Vector Databases**: The framework can seamlessly connect with different vector databases, which are crucial for implementing RAG patterns and enhancing the retrieval process in NLP applications. -- **Preconfigured Chains**: LangChain provides pre-built chains for typical NLP tasks, such as question-answering and chatbots, reducing the time and effort required to build these functionalities from scratch. -- **Compatibility with Open-Source Libraries**: LangChain is designed to work well with established open-source libraries, making it easier for developers to incorporate it into their existing workflows and leverage a wide range of tools and resources. -- **Ease of Deployment**: The framework simplifies the deployment process of NLP applications, ensuring that they can be quickly and efficiently moved from development to production. -- **Versatile Use Cases**: LangChain is suitable for a variety of NLP applications, making it a versatile tool for developers working in different domains. - -LangChain stands out as a powerful framework for developers, utilizing and integrating well-known open-source libraries. diff --git a/radar/2024-07-10/microsilos.md b/radar/2024-07-10/microsilos.md deleted file mode 100644 index b89f00b..0000000 --- a/radar/2024-07-10/microsilos.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Microsilos" -quadrant: methods-and-patterns -ring: hold -tags: [agile, architecture] ---- - -A core concept of Domain-Driven Design (DDD) is the distillation of the problem domain into distinct, bounded contexts, with dedicated teams assigned to and responsible for those contexts. Microservices are often used to implement these bounded contexts in software applications. The communication patterns between teams will shape how these microservices are designed and interact, as per Conway's Law. - -Team autonomy is crucial for achieving a truly independent microservice architecture, driving innovation and agility. However, full autonomy can lead to the formation of microsilos: isolated teams working independently, often resulting in inconsistent implementations, communication gaps, hidden dependencies, and redundancies. - -### Mitigation Strategies -- **Strategic Domain-Driven Design**: Ensure that bounded contexts and their interrelationships are well-defined, both organizationally (team structure) and technically (interfaces). -- **Cross-Team Communication**: Facilitate regular meetings, use collaborative tools, and hold periodic cross-team workshops to improve information sharing and alignment. -- **Domain Experts and Coordination Roles**: Appoint system architects, domain experts, and integration leads to oversee cross-team coordination and maintain alignment with overall project goals. - -It is important to strike a balance between autonomy and alignment to benefit from independence while ensuring cohesive and efficient collaboration across the organization. diff --git a/radar/2024-07-10/mob-programming.md b/radar/2024-07-10/mob-programming.md deleted file mode 100644 index 1931ca2..0000000 --- a/radar/2024-07-10/mob-programming.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Mob Programming" -ring: adopt -quadrant: methods-and-patterns -tags: [agile, coding] -featured: false ---- - -We have adopted mob programming as it has proven to enhance team collaboration through successful and extensive practice in our work environments. diff --git a/radar/2024-07-10/monolith-first.md b/radar/2024-07-10/monolith-first.md deleted file mode 100644 index e0e1dee..0000000 --- a/radar/2024-07-10/monolith-first.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Monolith First" -quadrant: methods-and-patterns -ring: trial -tags: [architecture] ---- - -The [Monolith First](https://martinfowler.com/bliki/MonolithFirst.html) approach advocates starting new projects with a monolithic architecture that is carefully modularized. It balances the simplicity of monolithic systems with the flexibility of microservices by ensuring that the monolith is well-structured into discrete, encapsulated modules. - -The concept of the strategic monolith stems from the idea that starting with a monolithic architecture can be beneficial for many organizations, especially when dealing with new or smaller projects. Monoliths are easier to develop, test, and deploy because of their cohesive nature. As Martin Fowler points out, many successful software systems have started as monoliths and only transitioned to microservices when scale or complexity required it. This approach allows teams to manage complexity and maintainability while providing a foundation for potential future transitions to microservices. By modularizing the monolith, developers create clear boundaries within the codebase, making it easier to extract individual services as needed. - -### Benefits - -- **Future-Proof Architecture**: Modular design within a monolith allows for parts of the system to be easily extracted into individual microservices as requirements evolve or the business grows. This approach ensures that the architecture can adapt to changing needs without extensive refactoring. -- **Operational Simplicity**: Starting with a monolithic architecture simplifies deployment and management by keeping all modules within a single deployable unit. This reduces the complexity and overhead associated with distributed systems, such as handling inter-service communication, distributed data management, and comprehensive monitoring. -- **Performance and Latency Benefits**: Intra-process communication within a monolith results in lower latency and higher performance compared to inter-service communication in microservices. This ensures that the system remains responsive and efficient as it scales. -- **Reduced Complexity**: A "monolith first" approach avoids the initial challenges of distributed systems, allowing teams to focus on building robust features and gaining a deep understanding of the domain before considering a transition to microservices. - -At AOE, we strive to follow this approach when starting greenfield projects. We aim to balance between creating systems that are "as small as possible" yet "as big as necessary," ensuring robust and maintainable architectures that can scale and evolve with business needs. This provides a balanced path that aligns immediate development needs with long-term architectural goals. diff --git a/radar/2024-07-10/nocode-lowcode.md b/radar/2024-07-10/nocode-lowcode.md deleted file mode 100644 index 81244dd..0000000 --- a/radar/2024-07-10/nocode-lowcode.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "No-Code / Low-Code" -ring: assess -quadrant: methods-and-patterns -tags: [coding] -featured: false ---- diff --git a/radar/2024-07-10/oci-container.md b/radar/2024-07-10/oci-container.md deleted file mode 100644 index 32db50a..0000000 --- a/radar/2024-07-10/oci-container.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "OCI Container" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops] -featured: false ---- diff --git a/radar/2024-07-10/ollama.md b/radar/2024-07-10/ollama.md deleted file mode 100644 index d1cbab3..0000000 --- a/radar/2024-07-10/ollama.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Ollama" -ring: trial -quadrant: tools -tags: [ai, coding] ---- - -Running large language models locally? - -Downloading [Ollama](https://ollama.com/download) and typing `ollama run llama3` is all you need. - -Ollama is great for running various open source (open weight) models locally and interacting with them. You can do this either via the command line or via the [Ollama API](https://github.com/ollama/ollama/blob/main/docs/api.md). - -Ollama takes care of downloading and running models, and it supports the specification of your own model packages in a "Modelfile". - -At AOE, we use it for local development and testing. diff --git a/radar/2024-07-10/open-api.md b/radar/2024-07-10/open-api.md deleted file mode 100644 index 69d797e..0000000 --- a/radar/2024-07-10/open-api.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "Open API" -ring: adopt -quadrant: tools -tags: [architecture] ---- - -The [OpenAPI Specification](https://www.openapis.org/) (OAS) is a broadly adopted industry standard for describing modern REST APIs. Other initiatives like RAML have [joined](https://blogs.mulesoft.com/dev/api-dev/open-api-raml-better-together/) the OpenAPI Initiative. - -**OpenAPI v3** - -The current version, OpenAPI v3, added more features to the specification, for example, the ability to describe APIs supporting request/callback patterns. - -There is a very good API designer: [Apicurio](https://www.apicur.io/) and a good mock generator: [Microcks](http://microcks.github.io/). - -The general tool support is excellent. See [OpenAPI Tools](https://openapi.tools/). - -**TM Forum Open API** - -The TeleManagement Forum (TM Forum) has introduced its own set of Open APIs to foster interoperability and standardization within the telecommunications industry. The TM Forum Open API initiative provides a suite of REST-based APIs designed to accelerate the digital transformation of service providers and their ecosystem partners. These APIs cover a wide range of business scenarios and operational areas, such as customer management, product management, and service activation. - -The TM Forum's Open API specifications aim to ensure that diverse systems can interoperate seamlessly, promoting agility and reducing integration costs. The comprehensive documentation and resources provided by TM Forum are instrumental in helping organizations adopt and implement these APIs effectively. - -For more information on the TM Forum Open API, visit the following resources: -- [TM Forum Open API Overview](https://www.tmforum.org/open-apis/) -- [TM Forum Open API Specifications](https://projects.tmforum.org/wiki/display/API/Open+API+Table) -- [TM Forum GitHub Repository](https://github.com/tmforum-apis) - -These additions from TM Forum further enhance the value of the OpenAPI Specification by providing industry-specific standards that help streamline telecommunications operations. diff --git a/radar/2024-07-10/opentofu.md b/radar/2024-07-10/opentofu.md deleted file mode 100644 index 2982e48..0000000 --- a/radar/2024-07-10/opentofu.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "OpenTofu" -ring: assess -quadrant: platforms-and-aoe-services -tags: [devops] ---- - -[OpenTofu](https://opentofu.org/) is an open-source, community-driven fork of [Terraform](/platforms-and-aoe-services/terraform/) in response to HashiCorp's license changes. It's Terraform 1.6 compatible and can act as a drop-in replacement. We watch development and ecosystem growth closely and evaluate a move from Terraform to OpenTofu in some projects. diff --git a/radar/2024-07-10/page-composing.md b/radar/2024-07-10/page-composing.md deleted file mode 100644 index d1d0e81..0000000 --- a/radar/2024-07-10/page-composing.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Page Composing" -ring: trial -quadrant: methods-and-patterns -tags: [architecture] -featured: false ---- diff --git a/radar/2024-07-10/panda-css.md b/radar/2024-07-10/panda-css.md deleted file mode 100644 index 5a91c31..0000000 --- a/radar/2024-07-10/panda-css.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Panda CSS" -ring: assess -quadrant: languages-and-frameworks -tags: [frontend, styling] ---- - -[Panda CSS](https://panda-css.com/) is a feature-rich and highly versatile [CSS-in-JS](/methods-and-patterns/css-in-js/) library that generates CSS at build time. It provides a great developer experience without the disadvantages of runtime libraries. It is framework-agnostic, but unlike [Stylex](/languages-and-frameworks/stylex/) and Vanilla Extract, it provides JSX-specific features like the `styled` function and style props on top of it. - -### Key Features: -- Compatible with [React Server Components](/methods-and-patterns/react-server-components/) -- No performance disadvantages compared to runtime libraries -- Highly versatile: - - Recipes and variants like Stitches - - Framework-agnostic - - `styled` function to create UI components like Stitches - - Style props like styled-system - - Utility classes like Tailwind -- W3C-compliant design system with tokens and utilities support -- Fully typed API - -With comprehensive documentation and great community support from the Chakra UI Team, we see a lot of potential for it to become one of the best CSS-in-JS libraries in the future. diff --git a/radar/2024-07-10/pkl.md b/radar/2024-07-10/pkl.md deleted file mode 100644 index b657dc9..0000000 --- a/radar/2024-07-10/pkl.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "PKL" -ring: assess -quadrant: languages-and-frameworks -tags: [ci/cd, devops] ---- - -[PKL](https://pkl-lang.org/) -- pronounced Pickle -- is a configuration language created by Apple. It provides rich support for data templating and validation and can be used simply from the command line, integrated into build pipelines, or embedded into programs. PKL also provides some tooling around package management, which makes it easy to split up bigger projects into packages or just consume packages that are already out there. - -Available PKL packages and docs can be found [here](https://pkl-lang.org/package-docs/). - -At AOE, we are currently using PKL for the generation of different kinds of DevOps resources like GitLab CI pipelines or Kubernetes resources, but this might change. diff --git a/radar/2024-07-10/ports-and-adapters.md b/radar/2024-07-10/ports-and-adapters.md deleted file mode 100644 index bcdbb1b..0000000 --- a/radar/2024-07-10/ports-and-adapters.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Ports and Adapters" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture] -featured: false ---- diff --git a/radar/2024-07-10/puppet.md b/radar/2024-07-10/puppet.md deleted file mode 100644 index f5100f5..0000000 --- a/radar/2024-07-10/puppet.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Puppet" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [devops] -featured: false ---- - -Puppet has worked well for us for over 11 years. diff --git a/radar/2024-07-10/react-native.md b/radar/2024-07-10/react-native.md deleted file mode 100644 index 8d6a220..0000000 --- a/radar/2024-07-10/react-native.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "React Native" -ring: assess -quadrant: languages-and-frameworks -tags: [coding, frontend] -featured: false ---- diff --git a/radar/2024-07-10/remix.md b/radar/2024-07-10/remix.md deleted file mode 100644 index ae37f7f..0000000 --- a/radar/2024-07-10/remix.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Remix" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding, frontend] ---- - -With Remix v2.2.0, Remix itself is now just a Vite plugin. This gives us access to the entire ecosystem of Vite plugins and even more, for example: - -- **Near-instant dev startup**: Vite lazily compiles your app code on-demand, so the dev server can boot immediately. -- **Pre-bundled dependencies**: Vite only processes dependencies once, so large libraries like Material UI and AntD don’t become bottlenecks for rebuilds or hot updates. -- **Incremental hot updates**: Vite keeps track of dependencies so it only needs to reprocess app code that depends on the changes. diff --git a/radar/2024-07-10/renovate.md b/radar/2024-07-10/renovate.md deleted file mode 100644 index 309505d..0000000 --- a/radar/2024-07-10/renovate.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Renovate" -ring: adopt -quadrant: tools -tags: [ci/cd] -featured: false ---- diff --git a/radar/2024-07-10/resilience-thinking.md b/radar/2024-07-10/resilience-thinking.md deleted file mode 100644 index 57aa921..0000000 --- a/radar/2024-07-10/resilience-thinking.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Resilience Thinking" -ring: adopt -quadrant: methods-and-patterns -tags: [architecture] -featured: false ---- diff --git a/radar/2024-07-10/retrieval-augmented-generation.md b/radar/2024-07-10/retrieval-augmented-generation.md deleted file mode 100644 index cb116d4..0000000 --- a/radar/2024-07-10/retrieval-augmented-generation.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: "Retrieval Augmented Generation (RAG)" -ring: trial -quadrant: methods-and-patterns -tags: [ai] ---- - -[Retrieval Augmented Generation (RAG)](https://blogs.nvidia.com/blog/what-is-retrieval-augmented-generation/) is a method that enhances generative AI models by incorporating external information retrieval. RAG combines the strengths of retrieval-based and generation-based models, enabling AI to generate more accurate and contextually relevant responses by accessing and integrating external data sources during the generation process. This approach often uses embeddings to convert text into high-dimensional vectors and vector databases to efficiently store and retrieve these vectors based on similarity searches. This significantly improves the quality and reliability of AI-generated content, making it particularly useful in applications that require up-to-date information or domain-specific knowledge. - -### Benefits - -- **Enhanced contextual accuracy**: By integrating external data, RAG models provide more accurate and contextually relevant answers than traditional generative models. -- **Dynamic information access**: Allows models to retrieve and use the most relevant information available at the time of the query, ensuring up-to-date responses. -- **Versatile applications**: Suitable for a wide range of use cases, from customer support and virtual assistants to content creation and research, where accurate information is critical. -- **Sustainable resource utilization**: By leveraging external, up-to-date data sets for information retrieval and combining them with generative capabilities, RAG models reduce the need for extensive data processing and computing power, resulting in lower energy consumption. -- **Reduced hallucination**: Minimizes the instances of AI generating plausible but incorrect information by grounding responses in verifiable external data. - -### Challenges - -- **Latency**: Retrieving and processing external data in real-time can introduce latency, potentially slowing down response times compared to purely generative models. -- **Dependence on external data quality**: The accuracy and relevance of the generated content are highly dependent on the quality and reliability of the external data sources. Poor quality or outdated data can negatively impact the results. -- **Security and privacy**: Accessing external data sources can expose the system to security vulnerabilities and privacy concerns. Mitigation strategies include careful data access management and robust security measures in the retrieval process. -- **Maintenance overhead**: Regular updates and maintenance of the retrieval system and data sources are required to ensure continued accuracy and relevance, adding to the operational burden. -- **Potential for bias**: The retrieval process can introduce biases present in the external data, which can be propagated into the generated content, affecting the fairness and objectivity of the outputs. - -At AOE, we are evaluating [LangChain](/languages-and-frameworks/langchain/) as a framework for implementing chatbots that allow users to better interact with existing knowledge and ensure that they deliver accurate, contextual, and reliable information. diff --git a/radar/2024-07-10/rxjava.md b/radar/2024-07-10/rxjava.md deleted file mode 100644 index 0366345..0000000 --- a/radar/2024-07-10/rxjava.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "RxJava" -ring: trial -quadrant: tools -tags: [architecture, coding] -featured: false ---- diff --git a/radar/2024-07-10/scala3.md b/radar/2024-07-10/scala3.md deleted file mode 100644 index 439a509..0000000 --- a/radar/2024-07-10/scala3.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Scala 3" -ring: "adopt" -quadrant: "languages-and-frameworks" -tags: [coding] -featured: false ---- diff --git a/radar/2024-07-10/self-service-infrastructure.md b/radar/2024-07-10/self-service-infrastructure.md deleted file mode 100644 index 86ab1ed..0000000 --- a/radar/2024-07-10/self-service-infrastructure.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Self-Service Infrastructure" -ring: trial -quadrant: platforms-and-aoe-services -tags: [agile, devops] -featured: false ---- diff --git a/radar/2024-07-10/service-mesh.md b/radar/2024-07-10/service-mesh.md deleted file mode 100644 index 00b9866..0000000 --- a/radar/2024-07-10/service-mesh.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Service Mesh" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [architecture, devops, security] ---- - -Service Meshes are part of all our Kubernetes implementations now. We value the additional security features they provide to our platforms. - -We are using [Istio](https://istio.io/) on multiple production clusters and are assessing [Cilium](https://docs.cilium.io/en/latest/network/servicemesh/) as it also improves on Kubernetes' NetworkPolicies. We also consider [Linkerd](https://linkerd.io) a good candidate when looking for a Service Mesh for your project. diff --git a/radar/2024-07-10/socketio.md b/radar/2024-07-10/socketio.md deleted file mode 100644 index aab971d..0000000 --- a/radar/2024-07-10/socketio.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Socket.IO" -ring: assess -quadrant: tools -tags: [architecture, coding] ---- - -[Socket.IO](https://socket.io) is a library for enabling real-time, bidirectional communication between web clients and servers based on websockets. It simplifies complex tasks involved in real-time data transfer and supports features like automatic reconnection and fallback to different transports if needed. This makes it ideal for applications such as chat apps, live notifications, and collaborative tools. Its event-based architecture and support for namespaces and rooms make it versatile and scalable. We are currently evaluating if its usage could be beneficial for some of our projects. diff --git a/radar/2024-07-10/spring-boot.md b/radar/2024-07-10/spring-boot.md deleted file mode 100644 index 0924fea..0000000 --- a/radar/2024-07-10/spring-boot.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Spring Boot" -ring: adopt -quadrant: languages-and-frameworks -tags: [coding] ---- - -For new microservices in a cloud environment, Spring Boot is still one of our defaults. In addition to the aforementioned reasons, we at AOE especially like the following features: - -- Full integration with the [Kotlin language](/languages-and-frameworks/kotlin/) -- Excellent plugins and libraries for supporting GraphQL ([DGS Framework](https://netflix.github.io/dgs/), [Spring for GraphQL](https://spring.io/projects/spring-graphql)) -- Easy-to-use and powerful provision of RESTful services, including support for [OpenAPI](/tools/open-api/) -- Support for many cache providers, including distributed and replicated caches -- Metrics and monitoring support with [Micrometer](https://micrometer.io/) diff --git a/radar/2024-07-10/spring-rest-docs.md b/radar/2024-07-10/spring-rest-docs.md deleted file mode 100644 index 48128fe..0000000 --- a/radar/2024-07-10/spring-rest-docs.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Spring REST Docs" -ring: hold -quadrant: tools -tags: [documentation] -featured: false ---- diff --git a/radar/2024-07-10/strategic-domain-driven-design.md b/radar/2024-07-10/strategic-domain-driven-design.md deleted file mode 100644 index 777e91e..0000000 --- a/radar/2024-07-10/strategic-domain-driven-design.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Strategic Domain-Driven Design" -ring: adopt -quadrant: methods-and-patterns -tags: [academy training, architecture] ---- - -With the increasing complexity of software systems, Strategic Domain-Driven Design has become more and more important. Aligning software design with business needs through tactical and strategic patterns has proven invaluable, especially in the era of microservices and Agile methodologies. - -In addition, new tools and techniques have emerged that support the practical application of Strategic Domain-Driven Design, such as: - -* **Core Domain Charts**: Introduced by Eric Evans in 2019, these support the identification and prioritization of core business domains, ensuring that critical areas receive appropriate focus and resources. -* **Event Storming**: A popular workshop format for collaboratively exploring complex domains, facilitating a shared understanding and uncovering domain insights. -* **Wardley Maps**: Created by Simon Wardley, these are a visualization tool that helps organizations understand their business landscape, anticipate change, and identify strategic opportunities. - -The continuing relevance of Eric Evans' *Domain-Driven Design*, more than 20 years after the book was first published, underscores its importance in modern software development. diff --git a/radar/2024-07-10/stride-threat-modeling.md b/radar/2024-07-10/stride-threat-modeling.md deleted file mode 100644 index 21977e5..0000000 --- a/radar/2024-07-10/stride-threat-modeling.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "STRIDE Threat Modeling" -ring: trial -quadrant: methods-and-patterns -tags: [security] -featured: false ---- diff --git a/radar/2024-07-10/stylex.md b/radar/2024-07-10/stylex.md deleted file mode 100644 index 6fb30ba..0000000 --- a/radar/2024-07-10/stylex.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "StyleX" -ring: assess -quadrant: languages-and-frameworks -tags: [frontend, styling] ---- - -Facebook has released [StyleX](https://stylexjs.com/), an open-source JavaScript syntax and compiler for styling web apps. It combines the developer experience of [CSS-in-JS](/methods-and-patterns/css-in-js/) libraries with the performance and scalability of static CSS using compile-time tools. - -It supports frameworks like [React](/languages-and-frameworks/react/) and [Angular](/languages-and-frameworks/angular/). Styles are defined using an object syntax and `create()` API, and can be conditionally applied within components. - -### Key Features -- **Atomic CSS**: Minimizes CSS output -- **Type-Safe**: Ensures reliability in large projects -- **Composable**: Facilitates reusable components -- **Fast Performance**: Optimized for speed -- **Scalable and Predictable**: Ideal for large projects - -We are eager to evaluate how well StyleX will integrate into our projects. diff --git a/radar/2024-07-10/supply-chain-security.md b/radar/2024-07-10/supply-chain-security.md deleted file mode 100644 index b81858b..0000000 --- a/radar/2024-07-10/supply-chain-security.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "Supply Chain Security" -ring: adopt -quadrant: methods-and-patterns -tags: [devops, security] ---- - -Software supply chain security is a complex endeavor. Attack vectors range from external dependencies in source code to operating systems and tools used in build, test, and production environments. Compromise of a single stage of the supply chain may lead to compromise of the produced software and subsequently of customers that rely on it. - -Over the last few years, successful attacks on large software vendors have demonstrated the potential impact of such attacks. For instance, the SolarWinds Orion software was [compromised](https://en.wikipedia.org/wiki/SolarWinds#2019%E2%80%932020_supply_chain_attacks) due to an insecure password that allowed attackers to inject a backdoor into software artifacts. Several SolarWinds customers, including US federal government agencies, were compromised as a result of this attack. The [xz backdoor](https://tukaani.org/xz-backdoor/) showed that malicious parties are also stepping up their efforts to place backdoors in widely used open-source software projects in ways that are very hard to detect and prevent. - -Software libraries and other external dependencies are a major attack vector when building software. We use the following measures regarding external dependencies to improve supply chain security: - -- Verify dependency artifact signatures and checksums to detect artifacts that were released or replaced by an attacker. -- Raise developer awareness regarding malicious dependencies and issues such as typosquatting in dependency package managers. -- Generate [Software Bills of Materials (SBOMs)](/platforms-and-aoe-services/sbom/) for transparency regarding used software dependencies and to support the automated detection of known vulnerabilities. -- Evaluate and reduce the number of external dependencies to minimize the attack surface. - -We believe that supply chain security can only be achieved when taking every step of the supply chain into account. Therefore, we utilize the DevSecOps lifecycle and evaluate potential attack vectors and countermeasures for the complete software development and operation lifecycle. As a result, we use the following general measures to improve supply chain security: - -- Secure build, test, and deployment environments with [Zero Trust](/methods-and-patterns/zero-trust/). -- Sign built software artifacts and verify the signature of artifacts before deploying them. -- Use static application security testing (SAST) and dynamic application security testing (DAST) to scan for known vulnerabilities and logic flaws before deploying artifacts to production environments. diff --git a/radar/2024-07-10/svelte.md b/radar/2024-07-10/svelte.md deleted file mode 100644 index 1eb514c..0000000 --- a/radar/2024-07-10/svelte.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Svelte" -ring: trial -quadrant: languages-and-frameworks -tags: [coding, frontend] -featured: false ---- diff --git a/radar/2024-07-10/temporal-modeling.md b/radar/2024-07-10/temporal-modeling.md deleted file mode 100644 index d782b26..0000000 --- a/radar/2024-07-10/temporal-modeling.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Temporal Modeling" -ring: assess -quadrant: methods-and-patterns -tags: [architecture] -featured: false ---- diff --git a/radar/2024-07-10/terraform.md b/radar/2024-07-10/terraform.md deleted file mode 100644 index a59e7bf..0000000 --- a/radar/2024-07-10/terraform.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Terraform" -ring: adopt -quadrant: platforms-and-aoe-services -tags: [academy training, devops] -featured: false ---- - -Terraform has become a de facto standard as a cloud-provider-agnostic infrastructure-as-code tool in recent years. - -Unfortunately, the [license change for HashiCorp products in August 2023](https://www.hashicorp.com/blog/hashicorp-adopts-business-source-license) has caused [some](https://blog.gruntwork.io/the-future-of-terraform-must-be-open-ab0b9ba65bca) [turmoil](https://zeet.co/blog/the-impact-of-hashicorps-license-change-on-terraform-users-and-providers-what-you-need-to-know) within the open-source community. Terraform can no longer be considered truly open source. Of particular concern are the [usage limitations that prohibit "competitive offerings" to HashiCorp's products](https://www.hashicorp.com/license-faq#usage-limitations). The vagueness of this definition, coupled with the fact that HashiCorp can change their interpretation of what constitutes a "competitive offer" at any time, poses a potential liability for agencies and their customers. - -As a result, we are currently [assessing OpenTofu](/platforms-and-aoe-services/opentofu/) as a drop-in replacement for Terraform. [OpenTofu](https://opentofu.org) is an open-source fork under the umbrella of the Linux Foundation, created from the last commit before Terraform's license change. diff --git a/radar/2024-07-10/trivy.md b/radar/2024-07-10/trivy.md deleted file mode 100644 index 2134fb4..0000000 --- a/radar/2024-07-10/trivy.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Trivy" -ring: adopt -quadrant: tools -tags: [ci/cd, devops, security] -featured: false ---- - -See [Supply Chain Security](/methods-and-patterns/supply-chain-security/) for updated recommendations. diff --git a/radar/2024-07-10/turborepo.md b/radar/2024-07-10/turborepo.md deleted file mode 100644 index f214066..0000000 --- a/radar/2024-07-10/turborepo.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Turborepo" -ring: trial -quadrant: tools -tags: [frontend] -featured: false ---- diff --git a/radar/2024-07-10/unleash.md b/radar/2024-07-10/unleash.md deleted file mode 100644 index 76396af..0000000 --- a/radar/2024-07-10/unleash.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Unleash" -ring: adopt -quadrant: tools -tags: [coding, devops, frontend] -featured: false ---- diff --git a/radar/2024-07-10/vistecture.md b/radar/2024-07-10/vistecture.md deleted file mode 100644 index d7ff739..0000000 --- a/radar/2024-07-10/vistecture.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Vistecture" -ring: assess -quadrant: tools -tags: [architecture, documentation] -featured: false ---- diff --git a/radar/2024-07-10/visual-regression-tests.md b/radar/2024-07-10/visual-regression-tests.md deleted file mode 100644 index 7413d5a..0000000 --- a/radar/2024-07-10/visual-regression-tests.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Visual Regression Tests for Frontend Developers" -ring: adopt -quadrant: methods-and-patterns -tags: [coding, frontend, quality assurance] ---- - -In the realm of frontend development, ensuring that applications not only function correctly but also look as intended across various devices and browsers is paramount. This is where visual regression tests come into play, solving a critical problem faced by developers: detecting unintended visual changes. By automating the comparison of screenshots over time, these tests can identify differences between expected and actual UI appearances, down to the pixel level. In this respect, they exceed and replace some use cases of traditional unit tests, which focus on functional aspects of the code. - -Visual regression tests address several challenges. They ensure consistency in the user interface, a crucial aspect of user experience. They also significantly reduce the manual effort required to check visual aspects of an application across different environments. This automation speeds up the development process, allowing for quicker feedback and iterations compared to debugging visual issues in the terminal. - -Moreover, integrating visual regression tests into development pipelines enhances the reliability of deployments. By catching visual discrepancies early, it prevents potential UI issues from reaching end-users. This not only saves time and resources but also maintains the application's quality and reputation. - -Currently, several AOE teams use visual regression tests with [Playwright](/tools/playwright/) in their daily operations, with more teams expected to adopt this practice in the future. - -In summary, visual regression tests are an invaluable tool for frontend developers. They streamline the development process, ensure visual consistency, and maintain high-quality user interfaces, making them an essential part of modern web development workflows. diff --git a/radar/2025-04-10/Ansible.md b/radar/2025-04-10/Ansible.md deleted file mode 100644 index 2705a2c..0000000 --- a/radar/2025-04-10/Ansible.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Ansible" -ring: trial -quadrant: Applications -tags: [coding, backend] ---- -# Ansible - -![ansible](https://osl.ugr.es/wp-content/uploads/2025/04/imagen_ansible.jpg) - -This is a demo entry. It is used to show how a radar item is written in Markdown format. The meta header is used to define the attributes of the item. The content of the file is used as the description of the item. - -```tsx -// code higlighting works too -const var = 'Hello World!' -console.log(var) -``` diff --git a/radar/2025-04-10/CMDBuild.md b/radar/2025-04-10/CMDBuild.md deleted file mode 100644 index bd547c0..0000000 --- a/radar/2025-04-10/CMDBuild.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "CMDBuild" -ring: trial -quadrant: Tools -tags: [CMDB] ---- - -# CMDBuild - -[link](https://www.cmdbuild.org/en) - -The open source environment for configuring customized applications for the Asset Management \ No newline at end of file diff --git a/radar/2025-04-10/NetBoxOSS.md b/radar/2025-04-10/NetBoxOSS.md deleted file mode 100644 index c513eb9..0000000 --- a/radar/2025-04-10/NetBoxOSS.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "NetBox OSS" -ring: trial -quadrant: Infrastructures and network -tags: [coding, backend] ---- - -[link](https://netboxlabs.com/docs/netbox/en/stable/) - -NetBox is the leading solution for modeling and documenting modern networks. By combining the traditional disciplines of IP address management (IPAM) and datacenter infrastructure management (DCIM) with powerful APIs and extensions, NetBox provides the ideal "source of truth" to power network automation. Read on to discover why thousands of organizations worldwide put NetBox at the heart of their infrastructure. - - - diff --git a/radar/2025-04-10/docker.md b/radar/2025-04-10/docker.md deleted file mode 100644 index 2d05ae3..0000000 --- a/radar/2025-04-10/docker.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Docker" -ring: trial -quadrant: Applications -tags: [coding] ---- - -This is a demo entry. It is used to show how a radar item is written in Markdown format. The meta header is used to define the attributes of the item. The content of the file is used as the description of the item. diff --git a/radar/2025-04-10/jetsonorinnano.md b/radar/2025-04-10/jetsonorinnano.md deleted file mode 100644 index 9a758db..0000000 --- a/radar/2025-04-10/jetsonorinnano.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Jetson Orin Nano Super Developer Kit" -ring: trial -quadrant: Hardware -tags: [new] ---- - - - - -# Jetson Orin Nano Super Developer Kit - -![nice image](https://d29g4g2dyqv443.cloudfront.net/sites/default/files/akamai/embedded/images/jetson_orin_nano/NVIDIA-JetsonOrinNano_devkit-Fornt-Angle-top.jpg) \ No newline at end of file diff --git a/radar/2025-04-10/macminim4.md b/radar/2025-04-10/macminim4.md deleted file mode 100644 index 9195cbe..0000000 --- a/radar/2025-04-10/macminim4.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Mac Mini M4" -ring: trial -quadrant: Hardware -tags: [new] ---- - - - - -# Mac Mini M4 - - -![mac mini m4](https://www.cnet.com/a/img/resize/840de5dc6bc52939cecc586a82b5bc23c5b4ab90/hub/2024/11/06/5d5e0737-856b-449c-9fb0-3113e7006c63/mac-mini-m4-08.jpg?auto=webp&fit=crop&height=362&width=644) - diff --git a/radar/2025-04-10/myos.md b/radar/2025-04-10/myos.md deleted file mode 100644 index 2e48f66..0000000 --- a/radar/2025-04-10/myos.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "My OS" -ring: trial -quadrant: Applications -tags: [coding, backend] ---- - -[link](ttps://github.com/aya/myos) - -# myos - Make Your Own Stack - -Docker paas based on docker compose and make files. - -Make Your Own Stack provides common make targets to build and run docker projects. \ No newline at end of file diff --git a/radar/2025-04-10/netbird.md b/radar/2025-04-10/netbird.md deleted file mode 100644 index 6930845..0000000 --- a/radar/2025-04-10/netbird.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "netbird" -ring: trial -quadrant: Infrastructures and network -tags: [backend, vpn] ---- - -# netbird - -[link](https://netbird.io/) - -NetBird combines a WireGuard®-based overlay network with Zero Trust Network Access, providing a unified open-source platform for reliable and secure connectivity - - diff --git a/radar/2025-04-10/openziti.md b/radar/2025-04-10/openziti.md deleted file mode 100644 index bae5162..0000000 --- a/radar/2025-04-10/openziti.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Open Ziti" -ring: trial -quadrant: Infrastructures and network -tags: [backend, vpn] ---- - -[link](https://openziti.io/) - -OpenZiti is a free and open source project focused on bringing zero trust networking principles directly into any application. The project provides all the pieces required to implement a zero trust overlay network and provides all the tools necessary to integrate zero trust into your existing solutions. The OpenZiti project believes the principles of zero trust shouldn’t stop at your network, those ideas belong in your application. diff --git a/radar/2025-04-10/osquery.md b/radar/2025-04-10/osquery.md deleted file mode 100644 index 0f61f6b..0000000 --- a/radar/2025-04-10/osquery.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "osquery" -ring: trial -quadrant: Infrastructures and network -tags: [new] ---- - - -[link](https://github.com/osquery/osquery) - -osquery is a SQL powered operating system instrumentation, monitoring, and analytics framework. -Available for Linux, macOS, and Windows. diff --git a/radar/bash.md b/radar/bash.md new file mode 100644 index 0000000..f1b2661 --- /dev/null +++ b/radar/bash.md @@ -0,0 +1,37 @@ +--- +title: "Bash" +ring: support +quadrant: technologies-commodite +tags: [bash, scripting] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: beginner +maintenanceCost: 0 +differentiation: medium +teamCoverage: 1 +skillGap: high +--- + +Technologie Bash utilisée dans l'écosystème Duniter/Ğ1. + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 1 +- Membres de l'équipe : poka +- Niveau moyen : beginner +- Risque de compétence manquante : high + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/cryptographie.md b/radar/cryptographie.md new file mode 100644 index 0000000..15d437c --- /dev/null +++ b/radar/cryptographie.md @@ -0,0 +1,37 @@ +--- +title: "Cryptographie" +ring: support +quadrant: technologies-commodite +tags: [cryptographie, chiffrage] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: beginner +maintenanceCost: 0 +differentiation: medium +teamCoverage: 1 +skillGap: high +--- + +Technologie Cryptographie utilisée dans l'écosystème Duniter/Ğ1. + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 1 +- Membres de l'équipe : tuxmain +- Niveau moyen : beginner +- Risque de compétence manquante : high + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/dart.md b/radar/dart.md new file mode 100644 index 0000000..12611e9 --- /dev/null +++ b/radar/dart.md @@ -0,0 +1,37 @@ +--- +title: "Dart" +ring: support +quadrant: technologies-commodite +tags: [Dart, Flutter] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: beginner +maintenanceCost: 0 +differentiation: medium +teamCoverage: 1 +skillGap: high +--- + +Technologie Dart utilisée dans l'écosystème Duniter/Ğ1. + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 1 +- Membres de l'équipe : poka +- Niveau moyen : beginner +- Risque de compétence manquante : high + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/docker.md b/radar/docker.md new file mode 100644 index 0000000..ad8a7bc --- /dev/null +++ b/radar/docker.md @@ -0,0 +1,37 @@ +--- +title: "Docker" +ring: support +quadrant: technologies-commodite +tags: [Docker, conteneurisation] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: low +competencyLevel: beginner +maintenanceCost: 0 +differentiation: low +teamCoverage: 1 +skillGap: high +--- + +Technologie Docker utilisée dans l'écosystème Duniter/Ğ1. + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 1 +- Membres de l'équipe : 1000i100 +- Niveau moyen : beginner +- Risque de compétence manquante : high + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/flutter.md b/radar/flutter.md new file mode 100644 index 0000000..c3359dd --- /dev/null +++ b/radar/flutter.md @@ -0,0 +1,37 @@ +--- +title: "Flutter" +ring: support +quadrant: technologies-commodite +tags: [Flutter, Dart] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: beginner +maintenanceCost: 0 +differentiation: medium +teamCoverage: 1 +skillGap: high +--- + +Technologie Flutter utilisée dans l'écosystème Duniter/Ğ1. + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 1 +- Membres de l'équipe : poka +- Niveau moyen : beginner +- Risque de compétence manquante : high + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/gitlab-ci-cd.md b/radar/gitlab-ci-cd.md new file mode 100644 index 0000000..d9bd2c6 --- /dev/null +++ b/radar/gitlab-ci-cd.md @@ -0,0 +1,37 @@ +--- +title: "GitLab CI/CD" +ring: support +quadrant: technologies-commodite +tags: [GitLab, CI/CD] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: beginner +maintenanceCost: 0 +differentiation: medium +teamCoverage: 1 +skillGap: high +--- + +Technologie GitLab CI/CD utilisée dans l'écosystème Duniter/Ğ1. + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 1 +- Membres de l'équipe : 1000i100 +- Niveau moyen : beginner +- Risque de compétence manquante : high + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/ipfs.md b/radar/ipfs.md new file mode 100644 index 0000000..dc9c048 --- /dev/null +++ b/radar/ipfs.md @@ -0,0 +1,37 @@ +--- +title: "IPFS" +ring: strategic +quadrant: technologies-emergentes +tags: [IPFS, distribué] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: intermediate +maintenanceCost: 0 +differentiation: high +teamCoverage: 2 +skillGap: medium +--- + +Technologie IPFS utilisée dans l'écosystème Duniter/Ğ1. + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 2 +- Membres de l'équipe : aya, Fred +- Niveau moyen : intermediate +- Risque de compétence manquante : medium + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/javascript-typescript.md b/radar/javascript-typescript.md new file mode 100644 index 0000000..5fd4aef --- /dev/null +++ b/radar/javascript-typescript.md @@ -0,0 +1,43 @@ +--- +title: "JavaScript/TypeScript" +ring: support +quadrant: technologies-commodite +tags: [JavaScript, TypeScript, web] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: expert +maintenanceCost: 0 +differentiation: medium +teamCoverage: 3 +skillGap: low +--- + +- **Utilisation** : Clients web, extensions navigateur, sites web +- **Projets** : + - `Ğ1Companion` : Extension web pour navigateurs + - Clients web divers +- **Compétences requises** : JavaScript/TypeScript, développement d'extensions navigateur, Web APIs + +# + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 3 +- Membres de l'équipe : ManUtopiK, 1000i100, boris +- Niveau moyen : expert +- Risque de compétence manquante : low + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/kubernetes.md b/radar/kubernetes.md new file mode 100644 index 0000000..b909073 --- /dev/null +++ b/radar/kubernetes.md @@ -0,0 +1,37 @@ +--- +title: "Kubernetes" +ring: support +quadrant: technologies-commodite +tags: [Kubernetes, orchestration] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: beginner +maintenanceCost: 0 +differentiation: medium +teamCoverage: 0 +skillGap: high +--- + +Technologie Kubernetes utilisée dans l'écosystème Duniter/Ğ1. + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 0 +- Membres de l'équipe : Aucun +- Niveau moyen : beginner +- Risque de compétence manquante : high + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/linux.md b/radar/linux.md new file mode 100644 index 0000000..a9c1219 --- /dev/null +++ b/radar/linux.md @@ -0,0 +1,37 @@ +--- +title: "Linux" +ring: support +quadrant: technologies-commodite +tags: [Linux, système] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: low +competencyLevel: intermediate +maintenanceCost: 0 +differentiation: low +teamCoverage: 2 +skillGap: medium +--- + +Technologie Linux utilisée dans l'écosystème Duniter/Ğ1. + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 2 +- Membres de l'équipe : aya, boris +- Niveau moyen : intermediate +- Risque de compétence manquante : medium + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/netlifycms.md b/radar/netlifycms.md new file mode 100644 index 0000000..a742f0b --- /dev/null +++ b/radar/netlifycms.md @@ -0,0 +1,40 @@ +--- +title: "NetlifyCMS" +ring: support +quadrant: technologies-commodite +tags: [CMS, Git] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: intermediate +maintenanceCost: 0 +differentiation: medium +teamCoverage: 2 +skillGap: medium +--- + +- **Utilisation** : CMS headless basé sur Git +- **Projets** : + - `monnaie-libre-fr` : CMS pour le site web +- **Compétences requises** : Git-based CMS, JAMstack, workflows Git + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 2 +- Membres de l'équipe : ManUtopiK, 1000i100 +- Niveau moyen : intermediate +- Risque de compétence manquante : medium + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/nostr.md b/radar/nostr.md new file mode 100644 index 0000000..d7366d7 --- /dev/null +++ b/radar/nostr.md @@ -0,0 +1,37 @@ +--- +title: "Nostr" +ring: strategic +quadrant: technologies-emergentes +tags: [Nostr, protocole] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: beginner +maintenanceCost: 0 +differentiation: high +teamCoverage: 1 +skillGap: high +--- + +Technologie Nostr utilisée dans l'écosystème Duniter/Ğ1. + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 1 +- Membres de l'équipe : Fred +- Niveau moyen : beginner +- Risque de compétence manquante : high + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/nuxt-js.md b/radar/nuxt-js.md new file mode 100644 index 0000000..7aba2c4 --- /dev/null +++ b/radar/nuxt-js.md @@ -0,0 +1,40 @@ +--- +title: "Nuxt.js" +ring: support +quadrant: technologies-commodite +tags: [Nuxt, Vue, SSR] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: intermediate +maintenanceCost: 0 +differentiation: medium +teamCoverage: 2 +skillGap: medium +--- + +- **Utilisation** : Framework Vue.js pour sites web +- **Projets** : + - `monnaie-libre-fr` : Site web avec Nuxt + nuxt-content +- **Compétences requises** : Vue.js, Nuxt.js, SSR, JAMstack + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 2 +- Membres de l'équipe : ManUtopiK, boris +- Niveau moyen : intermediate +- Risque de compétence manquante : medium + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/postgresql.md b/radar/postgresql.md new file mode 100644 index 0000000..70ed68a --- /dev/null +++ b/radar/postgresql.md @@ -0,0 +1,37 @@ +--- +title: "PostgreSQL" +ring: support +quadrant: technologies-commodite +tags: [PostgreSQL, base de données] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: low +competencyLevel: beginner +maintenanceCost: 0 +differentiation: low +teamCoverage: 0 +skillGap: high +--- + +Technologie PostgreSQL utilisée dans l'écosystème Duniter/Ğ1. + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 0 +- Membres de l'équipe : Aucun +- Niveau moyen : beginner +- Risque de compétence manquante : high + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/proxmox.md b/radar/proxmox.md new file mode 100644 index 0000000..57b221e --- /dev/null +++ b/radar/proxmox.md @@ -0,0 +1,37 @@ +--- +title: "ProxMox" +ring: support +quadrant: technologies-commodite +tags: [ProxMox, virtualisation] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: beginner +maintenanceCost: 0 +differentiation: medium +teamCoverage: 1 +skillGap: high +--- + +Technologie ProxMox utilisée dans l'écosystème Duniter/Ğ1. + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 1 +- Membres de l'équipe : poka +- Niveau moyen : beginner +- Risque de compétence manquante : high + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/python.md b/radar/python.md new file mode 100644 index 0000000..e64b4ca --- /dev/null +++ b/radar/python.md @@ -0,0 +1,41 @@ +--- +title: "Python" +ring: support +quadrant: technologies-commodite +tags: [Python, CLI] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: beginner +maintenanceCost: 0 +differentiation: medium +teamCoverage: 1 +skillGap: high +--- + +- **Utilisation** : Clients en ligne de commande et outils +- **Projets** : + - `silkaj` : Client CLI Python pour la monnaie Ğ1 + - `Tikka` : Client riche pour la monnaie Ğ1 +- **Compétences requises** : Python, développement CLI, APIs REST + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 1 +- Membres de l'équipe : poka +- Niveau moyen : beginner +- Risque de compétence manquante : high + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/rust.md b/radar/rust.md new file mode 100644 index 0000000..3dc8151 --- /dev/null +++ b/radar/rust.md @@ -0,0 +1,42 @@ +--- +title: "Rust" +ring: core +quadrant: technologies-differentiantes +tags: [Rust, blockchain, Substrate] +businessImpact: high +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: beginner +maintenanceCost: 0 +differentiation: high +teamCoverage: 1 +skillGap: high +--- + +- **Utilisation** : Développement du nœud Duniter v2S (basé sur Substrate) +- **Projets** : + - `Duniter v2S` : Nœud blockchain principal + - `Ğcli-v2s` : Interface en ligne de commande Rust + - `homebrew-duniter-gcli` : Package Homebrew pour Ğcli +- **Compétences requises** : Rust avancé, développement blockchain, Substrate framework + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 1 +- Membres de l'équipe : Eloïs +- Niveau moyen : beginner +- Risque de compétence manquante : high + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/serverless.md b/radar/serverless.md new file mode 100644 index 0000000..4d952a4 --- /dev/null +++ b/radar/serverless.md @@ -0,0 +1,37 @@ +--- +title: "Serverless" +ring: strategic +quadrant: technologies-emergentes +tags: [Serverless] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: beginner +maintenanceCost: 0 +differentiation: high +teamCoverage: 1 +skillGap: high +--- + +Technologie Serverless utilisée dans l'écosystème Duniter/Ğ1. + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 1 +- Membres de l'équipe : 1000i100 +- Niveau moyen : beginner +- Risque de compétence manquante : high + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/squid.md b/radar/squid.md new file mode 100644 index 0000000..da46c7b --- /dev/null +++ b/radar/squid.md @@ -0,0 +1,40 @@ +--- +title: "Squid" +ring: support +quadrant: technologies-commodite +tags: [Squid, indexer, GraphQL] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: beginner +maintenanceCost: 0 +differentiation: medium +teamCoverage: 1 +skillGap: high +--- + +- **Utilisation** : Indexation de données blockchain +- **Projets** : + - `duniter-squid` : Indexer basé sur Squid pour Duniter v2S +- **Compétences requises** : Indexation de données, GraphQL, blockchain data processing + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 1 +- Membres de l'équipe : boris +- Niveau moyen : beginner +- Risque de compétence manquante : high + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/substrate-framework.md b/radar/substrate-framework.md new file mode 100644 index 0000000..bc2eac0 --- /dev/null +++ b/radar/substrate-framework.md @@ -0,0 +1,39 @@ +--- +title: "Substrate Framework" +ring: core +quadrant: technologies-differentiantes +tags: [Substrate, Rust, blockchain] +businessImpact: high +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: beginner +maintenanceCost: 0 +differentiation: high +teamCoverage: 1 +skillGap: high +--- + +- **Utilisation** : Framework blockchain pour Duniter v2S +- **Description** : Framework Rust pour construire des blockchains personnalisées +- **Compétences requises** : Blockchain, Rust, Substrate, consensus algorithms + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 1 +- Membres de l'équipe : Eloïs +- Niveau moyen : beginner +- Risque de compétence manquante : high + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/vue-js.md b/radar/vue-js.md new file mode 100644 index 0000000..d324abe --- /dev/null +++ b/radar/vue-js.md @@ -0,0 +1,37 @@ +--- +title: "Vue.js" +ring: support +quadrant: technologies-commodite +tags: [Vue, JavaScript] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: intermediate +maintenanceCost: 0 +differentiation: medium +teamCoverage: 2 +skillGap: medium +--- + +Technologie Vue.js utilisée dans l'écosystème Duniter/Ğ1. + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 2 +- Membres de l'équipe : ManUtopiK, boris +- Niveau moyen : intermediate +- Risque de compétence manquante : medium + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/radar/wordup-cms.md b/radar/wordup-cms.md new file mode 100644 index 0000000..20b4c17 --- /dev/null +++ b/radar/wordup-cms.md @@ -0,0 +1,42 @@ +--- +title: "WordUp CMS" +ring: support +quadrant: technologies-commodite +tags: [CMS] +businessImpact: medium +costToReplace: 0 +revenueImpact: indirect +riskLevel: medium +competencyLevel: beginner +maintenanceCost: 0 +differentiation: medium +teamCoverage: 1 +skillGap: high +--- + +- **Utilisation** : CMS pour sites web +- **Projets** : + - `axiom-team-fr` : Site de production avec WordUp +- **Compétences requises** : CMS management, intégration d'APIs + +# + +## Impact Business + +À compléter + +## Coûts + +- Coût de remplacement : 0€ +- Coût de maintenance annuel : 0€ + +## Compétences + +- Nombre de personnes maîtrisant : 1 +- Membres de l'équipe : ManUtopiK +- Niveau moyen : beginner +- Risque de compétence manquante : high + +## Recommandations + +À compléter avec des recommandations stratégiques. diff --git a/scripts/serve-business.sh b/scripts/serve-business.sh new file mode 100755 index 0000000..c0ef42b --- /dev/null +++ b/scripts/serve-business.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +# Script pour servir le radar business en local + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" + +cd "$PROJECT_DIR" + +# Sauvegarder la config et le dossier radar actuels s'ils existent +if [ -f "config.json" ]; then + mv config.json config.json.backup +fi + +if [ -d "radar" ]; then + mv radar radar.backup +fi + +# Copier la config business et renommer le dossier +cp radar-business/config-business.json config.json +cp -r radar-business/2025-01-15 radar + +echo "Configuration business activée" +echo "Démarrage du serveur..." + +# Démarrer le serveur +npm run serve + +# Restaurer la config originale à la sortie +cleanup() { + echo "Restauration de la configuration originale..." + if [ -f "config.json.backup" ]; then + mv config.json.backup config.json + fi + if [ -d "radar.backup" ]; then + rm -rf radar + mv radar.backup radar + fi +} + +trap cleanup EXIT INT TERM +