Scrum Team


title: “Scrum Team”
date: 2022-03-01T20:45:22
slug: scrum-team


Das Scrum Team besteht aus Scrum Master, Product Owner und den Entwicklern (vormals Entwicklungsteam)

Der Sprint Backlog


title: “Der Sprint Backlog”
date: 2022-03-01T20:44:20
slug: der-sprint-backlog


In jedem Sprint soll ein funktionsfähiges Zwischenprodukt entwickelt werden. Deshalb wird bereits vorab im Sprint Planning Meeting entschieden, welche Anforderungen aus dem Product Backlog im nächsten Sprint bearbeitet werden sollen. Das Sprint Planning Meeting findet zu Beginn jedes Sprints zur Planung dieser Projektetappe statt.

Nachdem die Anforderungen ausgewählt wurden, werden sie im jeweiligen Sprint Backlog festgehalten. Das Scrum Team ist Eigentümer des Sprint Backlogs und entscheidet welche Anforderungen im nächsten Sprint bearbeitet werden.

Zusammenfassend, enthält der Sprint Backlog also diejenigen Projektaufgaben, die im jeweiligen Sprint erledigt werden sollen. Ergänzt werden die Projektaufgaben um weitere Details, die das Scrum Team benötigt, um das Sprintziel (Sprint Goal) zu erreichen.

Was sind eigentlich Sprint Backlog Tasks?

Nachdem die Anforderungen für den nächsten Sprint vom Product Owner ausgewählt wurden, werden sie in Aufgaben, die innerhalb eines Tages erledigt werden können, unterteilt. Deshalb nennen wir die Bestandteile des Sprint Backlogs auch Sprint Backlog Tasks. Genau wie im Product Backlog wird für jedes Bestandteil des Sprint Backlogs eine Aufwandsschätzung durchgeführt.

Product Backlog


title: “Product Backlog”
date: 2022-03-01T20:42:32
slug: product-backlog


Der Product Backlog besteht bei Scrum aus einer Liste mit Punkten (User Stories), die bei der Entwicklung des Produkts erledigt werden müssen. Im Product Backlog werden Änderungen und Ergänzungen aufgeführt, die auf das Produkt anzuwenden sind . Der Product Owner nimmt eine Einteilung nach Prioritäten vor, bei der die wichtigsten Punkte an erster Stelle stehen. Das heißt, dass diese Aufgaben zuerst erledigt werden.

Allen Items im Product Backlog wird ein Wert zugewiesen, beispielsweise ein Geschäftswert. Der Product Owner und das Scrum-Team schätzen ein, welcher Arbeitsaufwand mit jedem einzelnen Punkt verbunden ist. Auf der Grundlage der erwarteten Werte und des Aufwands kann das ROI (Return On Investment) berechnet werden.

Backlog Refinement


title: “Backlog Refinement”
date: 2022-03-01T20:40:55
slug: backlog-refinement


Backlog Refinement Definition

Die kontinuierliche Pflege und Weiterentwicklung des Product Backlogs wird als Backlog Refinement (oder alternativ Backlog Estimation oder Backlog Grooming*) bezeichnet. Es ist ein regelmäßiger Prozess, bei dem Product Owner und Entwickler das Backlog auf den aktuellen Stand bringen. Typische Tätigkeiten im Backlog Refinement sind:

  • Aufnahme von neuen User Storys, Features und Epics in das Backlog
  • Verfeinerung von vorhandenen Epics, Features und User Storys und gegebenenfalls Aufteilung in mehrere kleine Backlog Items
  • Zusammenfassen von User Storys
  • Diskussion der Akzeptanzkriterien, Annahmen und Einschränkungen
  • Identifikation von Abhängigkeiten
  • Korrektur von Aufwandsschätzung aufgrund neuer Erkenntnisse
  • Veränderung der Priorisierung aufgrund neuer Erkenntnisse
  • Entfernen von irrelevanten User Storys, Features oder Epics aus dem Backlog
  • Beseitigung von Unklarheiten durch gemeinsame Diskussion, wobei es um das „was“ und nicht das „wie“ geht

Backlog Refinement - der Prozess zur Pflege von Backlog Items

Das Ziel beim Backlog Refinement

Das Ziel beim Backlog Refinement ist es, die höher priorisierten Items im Backlog so vorzubereiten, dass sie sich gut für das Sprint Planning nutzen lassen. Dies führt in der Folge zur Verkürzung von Planungsmeetings bei gleichzeitiger Berücksichtigung aktueller Informationen.

Laut aktuellen Scrum Guide ist der Product Owner für das Product Backlog verantwortlich, als Konsequenz daraus ist er auch für das Refinement verantwortlich, selbst wenn er die Aufgabe delegiert und/oder Entwickler aktiv bei der Verfeinerung mitwirken.

Epic, Story und Task


title: “Epic, Story und Task”
date: 2022-03-01T20:38:52
slug: epic-story-und-task


Die folgende Grafik illustriert den Zusammenhang zwischen Epics, Storys und Tasks als Elemente eines Scrum-Projekts.

Epic

Epic ist eine User Story auf höchster Abstraktionsstufe. Für einen Sprint ist sie zu groß. Der Product Owner zerlegt sie deshalb in mehrere kleinere User Storys.

Story

Die Story ist eine User Story und Teil einer Epic. Eine Story enthält die Anforderungen, geschrieben als kleine handhabbare Texte. Auf dieser Basis schätzt das Scrum-Team den Aufwand für die Realisierung der Anforderung ein.

Task

Entwickler und Tester zerlegen eine Story in einzelne Aufgaben (Tasks). Wenn eine Aufgabe eine vereinbarte Zeitspanne überschreitet, kann sie in zusätzliche Aufgaben aufgeteilt werden. Eine Story ist dann erledigt, wenn alle Aufgaben der Story erledigt sind.

Wie sollte eine User Story formuliert sein?


title: “Wie sollte eine User Story formuliert sein?”
date: 2022-03-01T20:38:29
slug: wie-sollte-eine-user-story-formuliert-sein


Eine User Story sollte einfach und leicht verständlich sein. Das gelingt mit einfachen Satzkonstruktionen: Subjekt, Verb, Objekt. Mehrdeutige Begriffe gehören nicht in eine User Story.

Die User Story soll sich auch auf das Wesentliche konzentrieren. Rachel Davie, Co-Autorin des Buchs „Agile Coaching“, empfiehlt die Formulierung der User Story nach folgendem Muster:

„Als [Rolle] möchte ich [Funktion] um [Nutzen].“

Dabei ergeben sich Rolle, Funktion und Nutzen aus den Antworten auf die folgenden W-Fragen:

Wer fordert etwas an? (=Rolle)

Der Anforderer ist meist der spätere Nutzer des Systems oder der Nutznießer der zu entwickelnden Lösung.

Was wünscht sich der Anforderer? (=Funktion)

Der Anforderer wünscht sich, dass etwas Bestimmtes passiert. Je klarer und präziser der Wunsch in die User Story eingeht, desto hilfreicher ist die User Story für das Entwicklerteam, um die Anforderungen zu realisieren.

Warum ist das für den Geschäftsfall wichtig? (=Nutzen)

Durch die Anforderung soll ein Ziel erreicht werden. Der Anforderer verspricht sich davon einen Nutzen. Die Beschreibung des Grundes der Anforderung liefert dem Entwicklerteam weitere Informationen zur richtigen Ausführung.

Beispiele für die Formulierung einer User Story

Ein Beispiel für dieses Schema einer User Story ist: Ein E-Learning-Portal, das Seminare für Projektleiter anbietet, könnte für die Registrierung eines neuen Kunden diese User Story texten:

Als Neukunde möchte ich mich im E-Learning Portal registrieren, um mich auf die PMI-Zertifizierung vorzubereiten.

Ein weiteres Beispiel ist:

Als Mitarbeiterin möchte ich auf meiner Startseite des Intranets eine Liste der von mir am häufigsten genutzten Seiten haben, um schnell und direkt auf die Informationen zugreifen zu können.

s3cmd –configure


title: “s3cmd –configure”
date: 2022-02-17T16:06:12
slug: s3cmd-configure


New settings:
Access Key: 39fd11fd00c94e1e9c7662f13310ab08
Secret Key: f0e03538e2d24d0cb12442c9f1dcc59f
Default Region: US
S3 Endpoint: object-store.fra.cloud.inovex.io
DNS-style bucket+hostname:port template for accessing a bucket: object-store.fra.cloud.inovex.io/%(bucket)
Encryption password:
Path to GPG program: /usr/bin/gpg
Use HTTPS protocol: True
HTTP Proxy server name:
HTTP Proxy server port: 0
$ cat /home/thomas/.s3cfg
[default]
access\_key = 39fd11fd00c94e1e9c7662f13310ab08
access\_token =
add\_encoding\_exts =
add\_headers =
bucket\_location = US
ca\_certs\_file =
cache\_file =
check\_ssl\_certificate = True
check\_ssl\_hostname = True
cloudfront\_host = cloudfront.amazonaws.com
content\_disposition =
content\_type =
default\_mime\_type = binary/octet-stream
delay\_updates = False
delete\_after = False
delete\_after\_fetch = False
delete\_removed = False
dry\_run = False
enable\_multipart = True
encoding = UTF-8
encrypt = False
expiry\_date =
expiry\_days =
expiry\_prefix =
follow\_symlinks = False
force = False
get\_continue = False
gpg\_command = /usr/bin/gpg
gpg\_decrypt = %(gpg\_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase\_fd)s -o %(output\_file)s %(input\_file)s
gpg\_encrypt = %(gpg\_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase\_fd)s -o %(output\_file)s %(input\_file)s
gpg\_passphrase =
guess\_mime\_type = True
host\_base = object-store.fra.cloud.inovex.io
host\_bucket = object-store.fra.cloud.inovex.io/%(bucket)
human\_readable\_sizes = False
invalidate\_default\_index\_on\_cf = False
invalidate\_default\_index\_root\_on\_cf = True
invalidate\_on\_cf = False
kms\_key =
limit = -1
limitrate = 0
list\_md5 = False
log\_target\_prefix =
long\_listing = False
max\_delete = -1
mime\_type =
multipart\_chunk\_size\_mb = 15
multipart\_max\_chunks = 10000
preserve\_attrs = True
progress\_meter = True
proxy\_host =
proxy\_port = 0
put\_continue = False
recursive = False
recv\_chunk = 65536
reduced\_redundancy = False
requester\_pays = False
restore\_days = 1
restore\_priority = Standard
secret\_key = f0e03538e2d24d0cb12442c9f1dcc59f
send\_chunk = 65536
server\_side\_encryption = False
signature\_v2 = False
signurl\_use\_https = False
simpledb\_host = sdb.amazonaws.com
skip\_existing = False
socket\_timeout = 300
stats = False
stop\_on\_error = False
storage\_class =
throttle\_max = 100
upload\_id =
urlencoding\_mode = normal
use\_http\_expect = False
use\_https = True
use\_mime\_magic = True
verbosity = WARNING
website\_endpoint = http://%(bucket)s.s3-website-%(location)s.amazonaws.com/
website\_error =
website\_index = index.html

Azure Regions


title: “Azure Regions”
date: 2022-02-10T08:21:15
slug: azure-regions


DisplayName Name RegionalDisplayName
———————— ——————- ————————————-
East US eastus (US) East US
East US 2 eastus2 (US) East US 2
South Central US southcentralus (US) South Central US
West US 2 westus2 (US) West US 2
West US 3 westus3 (US) West US 3
Australia East australiaeast (Asia Pacific) Australia East
Southeast Asia southeastasia (Asia Pacific) Southeast Asia
North Europe northeurope (Europe) North Europe
Sweden Central swedencentral (Europe) Sweden Central
UK South uksouth (Europe) UK South
West Europe westeurope (Europe) West Europe
Central US centralus (US) Central US
North Central US northcentralus (US) North Central US
West US westus (US) West US
South Africa North southafricanorth (Africa) South Africa North
Central India centralindia (Asia Pacific) Central India
East Asia eastasia (Asia Pacific) East Asia
Japan East japaneast (Asia Pacific) Japan East
Jio India West jioindiawest (Asia Pacific) Jio India West
Korea Central koreacentral (Asia Pacific) Korea Central
Canada Central canadacentral (Canada) Canada Central
France Central francecentral (Europe) France Central
Germany West Central germanywestcentral (Europe) Germany West Central
Norway East norwayeast (Europe) Norway East
Switzerland North switzerlandnorth (Europe) Switzerland North
UAE North uaenorth (Middle East) UAE North
Brazil South brazilsouth (South America) Brazil South
Central US (Stage) centralusstage (US) Central US (Stage)
East US (Stage) eastusstage (US) East US (Stage)
East US 2 (Stage) eastus2stage (US) East US 2 (Stage)
North Central US (Stage) northcentralusstage (US) North Central US (Stage)
South Central US (Stage) southcentralusstage (US) South Central US (Stage)
West US (Stage) westusstage (US) West US (Stage)
West US 2 (Stage) westus2stage (US) West US 2 (Stage)
Asia asia Asia
Asia Pacific asiapacific Asia Pacific
Australia australia Australia
Brazil brazil Brazil
Canada canada Canada
Europe europe Europe
Global global Global
India india India
Japan japan Japan
United Kingdom uk United Kingdom
United States unitedstates United States
East Asia (Stage) eastasiastage (Asia Pacific) East Asia (Stage)
Southeast Asia (Stage) southeastasiastage (Asia Pacific) Southeast Asia (Stage)
Central US EUAP centraluseuap (US) Central US EUAP
East US 2 EUAP eastus2euap (US) East US 2 EUAP
West Central US westcentralus (US) West Central US
South Africa West southafricawest (Africa) South Africa West
Australia Central australiacentral (Asia Pacific) Australia Central
Australia Central 2 australiacentral2 (Asia Pacific) Australia Central 2
Australia Southeast australiasoutheast (Asia Pacific) Australia Southeast
Japan West japanwest (Asia Pacific) Japan West
Jio India Central jioindiacentral (Asia Pacific) Jio India Central
Korea South koreasouth (Asia Pacific) Korea South
South India southindia (Asia Pacific) South India
West India westindia (Asia Pacific) West India
Canada East canadaeast (Canada) Canada East
France South francesouth (Europe) France South
Germany North germanynorth (Europe) Germany North
Norway West norwaywest (Europe) Norway West
Sweden South swedensouth (Europe) Sweden South
Switzerland West switzerlandwest (Europe) Switzerland West
UK West ukwest (Europe) UK West
UAE Central uaecentral (Middle East) UAE Central
Brazil Southeast brazilsoutheast (South America) Brazil Southeast

gvisor under eks


title: “gvisor under eks”
date: 2022-02-09T16:22:29
slug: gvisor-under-eks


ssh -i $eks\_key ec2-user@$gVisor\_node\_EIP

cat kubelet.service

[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/kubernetes/kubernetes
After=docker.service iptables-restore.service
Requires=docker.service
[Service]
ExecStartPre=/sbin/iptables -P FORWARD ACCEPT -w 5
ExecStart=/usr/bin/kubelet --cloud-provider aws \
--config /etc/kubernetes/kubelet/kubelet-config.json \
--kubeconfig /var/lib/kubelet/kubeconfig \
--container-runtime remote \
--network-plugin cni $KUBELET\_ARGS $KUBELET\_EXTRA\_ARGS
Restart=always
RestartSec=5
KillMode=process
[Install]
WantedBy=multi-user.target
$ sudo systemctl daemon-reload
$ sudo systemctl restart kubelet

Install latest gvisor release

(
set -e
ARCH=$(uname -m)
URL=https://storage.googleapis.com/gvisor/releases/release/latest/${ARCH}
wget ${URL}/runsc ${URL}/runsc.sha512 \
${URL}/containerd-shim-runsc-v1 ${URL}/containerd-shim-runsc-v1.sha512
sha512sum -c runsc.sha512 \
-c containerd-shim-runsc-v1.sha512
rm -f \*.sha512
chmod a+rx runsc containerd-shim-runsc-v1
sudo mv runsc containerd-shim-runsc-v1 /usr/local/bin
)

Install gvisor-containerd-shim

$ git clone https://github.com/google/gvisor-containerd-shim.git
$ cd gvisor-containerd-shim
$ make
$ sudo make install

cat kubelet.service.d/10-kubelet-args.conf

[Service]
Environment='KUBELET\_ARGS=--node-ip=10.0.1.14 --pod-infra-container-image=602401143452.dkr.ecr.eu-central-1.amazonaws.com/eks/pause:3.1-eksbuild.1 --v=2 --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock'
mkdir /etc/containerd/
cat <
kubectl label node $gVisor\_node\_name runtime=gvisor
cat <
cat <