DevBlog 2.0 - Dev Team

In diesem Blog möchte ich etwas genauer auf die Entwicklungsabteilung bei TheLotus eingehen und dabei sowohl Anforderungen, Struktur als auch Ziele erläutern.

Abteilungen

TheLotus hat eine vergleichweise stark ausgeprägte, aber gleichzeitig flach hierarische, Struktur. Alle unsere Teams lassen sich grundsätzlich in drei Bereiche einteilen: Web, Java und DevOps

Web Development

Die Web Entwicklung ist der strukturell einfachste Bereich: Alle Projekte basieren entweder auf PHP, im Verbund mit WBB/WCF, oder JavaScript/TypeScript - sowohl mit NodeJS (Express) im Backend als auch VueJS im Frontend. Ein neueres Beispiel kann man auf unserem GitHub unter Babylon finden.

Java Development

Der Java Bereich ist da wiederum etwas strikter unterteilt in Minecraft, Proxy, AntiCheat und Network Development - doch was heißt das genau?

Minecraft Development

Der Minecraft Bereich ist genau das wonach es sich anhört: Man entwickelt auf der Basis von Bukkit/Spigot normale Plugins jeglicher Art - egal ob Lobby Plugin oder Minigame. Dieser Bereich ist insbesondere für Anfänger mehr geeignet, da hier grundlegende Bukkit API Kenntnisse ausreichen, um die Meisten Aufgaben umsetzen zu können.

Proxy Development

Im Bereich der Proxy Entwicklung geht es wiederum etwas mehr low-level zu: Man entwickelt sowohl Plugins, die mit Datenbanken und sonstigen Schnittstellen kommunizieren, als auch direkt im Proxy selber. Momentan setzen wir auf eine modifizierte und optimierte BungeeCord Version, jedoch erwägen wir zukünftig z.B. auf Velocity zu wechseln. Für einen Proxy Entwickler sollte dies kein Problem darstellen, da die Plugins sich generell nicht stark unterscheiden und man bei beidem oft mit Netty arbeiten wird.

AntiCheat Development

Einer unser momentan kleinsten und wahrscheinlich auch spezialisiertesten Bereiche ist die AntiCheat Entwicklung, welche ähnlich zur Minecraft und Proxy Entwicklung ist, jedoch wesentlich mehr Erfahrung mit Networking (im Vergleich zu MC Dev), Linearer Algebra und Datenstrukturen sowie Algorithmen benötigt. Hört sich auf den ersten Blick eventuell extrem anspruchsvoll an, jedoch sprechen wir dort hauptsächlich von Vektoren & Matrizen sowie Stochastik - nichts, das man nicht sowieso im Abitur lernt oder im Notfall auf eigene Faust.

Network Development

Network Developer sind in der Minecraft Szene eher außergewöhnlich: Unser Ziel ist es das gesamte Netzwerk in eine Private Cloud zu heben. Dafür wird die "Cloud" (Zentralserver) in MicroServices, auf Spring Boot Basis, umgeschrieben.

Sie sind damit primär für MicroServices und Schnittstellen zuständig. Wir erwarten von Network Devs, dass ihnen Technologien wie Spring und Kafka ein Begriff sind und sie sich mit der Entwicklung von REST APIs wohlfühlen.

DevOps

Zu guter Letzt kommen wir zum (Dev)Ops Bereich, welcher nahezu nichts mit Minecraft selber zu tun hat. DevOpsler kümmern sich um die gesamte Infrastruktur, Monitoring und Tooling. Doch was heißt das überhaupt?

DevOps ist eine von Google & Netflix angetriebene Strömung, die Development und Operating miteinander vereint. Statt also einzelne 36 Server einzurichten und dabei am Ende mit 36 leicht anders konfigurierten Servern darzustehen, setzt man auf z.B. Terraform oder Ansible, um jeden Server (hoffentlich) exakt gleich und automatisiert einrichten zu können. Aber nicht nur die Infrastruktur liegt im DevOps Team, wir reden auch von Monitoring (Logs, Error Tracking, Alerts etc.) und Tooling wie beispielsweise unsere Continuous Integration und Continuous Deployment Pipelines (abg.: CI/CD), welche die Projekte bei Änderungen automatisch kompilieren und die Unit Tests sowie Linter ausführen, um die Code Qualität zu gewährleisten. Zum Monitoring wird es zudem einen dedizierten DevBlog geben, der genauer auf das Thema eingeht.

Anforderungen

Uns erreichen immer wieder Nachrichten welche Anforderungen wir an Bewerber haben und ob es z.B. ein Mindestalter gibt.

Prinzipiell kann man sagen: Nein, wir haben kein Mindestalter! Jedoch erwarten wir eine angemesse geistige Reife und Verantwortungsbewusstsein - hinter TheLotus steckt eine menge Zeit und Geld über die Jahre, das sollte man nie vergessen.

Generell muss jeder Entwickler ausnahmslos ein NDA (Non Disclosure Agreement), also eine Geheimhaltungsvereinbarung, unterzeichnen, welche es jedem Entwickler verbietet den Source Code oder interne Informationen weiterzugeben, zu veröffentlichen oder nach dem Ausscheiden aus dem Team zu behalten. Für ein NDA muss man selber volljährig sein, oder ein Erziehungsberechtigter muss unterzeichnen.

Zusammengefasst haben wir für die diversen Bereiche folgende Anforderungen:

Hinweis: Man muss nicht ausnahmslos alle Anforderungen erfüllen, jedoch sind dies die hauptsächlichen Development Stacks der Bereiche und somit das, womit man arbeiten wird.

Web Development:

  1. PHP mit WBB oder
  2. NodeJS mit Express oder
  3. VueJS

Alle Java Bereiche:

  • Java 8+ (Network Developer vorzugsweise höhere Versionen)
  • Maven
  • Lombok
  • (MongoDB)

Minecraft:

  • Bukkit & Spigot API

Proxy:

  • BungeeCord oder Velocity
  • Netty
  • Minecraft Java Protocol (siehe wiki.vg)

AntiCheat:

  • NMS (net.minecraft.server)
  • Minecraft Java Protocol (siehe wiki.vg)
  • Netty
  • AntiCheat/HackClient Entwicklung (ja, das meinen wir ernst mit HackClient Entwicklung)
  • Lineare Algebra (Vektoren, Matrizen), Stochastik

Network:

  • Spring Boot
  • Kafka
  • (Konzepte wie Event Sourcing, CQRS, Service Discovery, Stateless Services etc.)

DevOps:

  • Docker
  • Kubernetes
  • Terraform
  • GitLab CI/CD
  • (Rancher)
  • ELK Stack (ElasticSearch, Kibana, FileBeat, MetricBeat etc.)
  • Jaeger Tracing
  • (Grundlegende Kenntnisse in Java mit Maven und JS mit NPM/Yarn sowie deren Konzepte)

Unsere Philosophie in der Entwicklung

Innerhalb der Entwicklung haben wir verschiedene Grundsätze, die wir verfolgen:

Do what you want - when you want

Wir arbeiten normalerweise strikt mit Kanban unter Verwendung von GitLab Issues & Milestones. Bisauf bestimmte Besprechungen der Teams, besteht keine Anwesendheitspflicht. Entwickler können sich in ihren Bereichen jederzeit Issues assignen und diese eigenständig bearbeiten - solange dies nicht wochenlang ohne sichtbaren Fortschritt/Feedback geschieht oder sich jemand 10 Issues gleichzeitig assigned.

School/Work comes first

Wie schon unter der Volix (Rewinside.tv & Bellaza), verfolgen wir auch das Prinzip, dass wir ein Projekt voller freiwilliger Entwickler sind. Jeder Entwickler ist aufgefordert immer seine Arbeit oder Schule höher als das Projekt zu priorisieren - wir sind da auch absolut nicht böse, immerhin ist es bei uns selber auch nicht anders.

Das Einzige, das wir von allen Entwicklern erwarten ist, dass diese sich abmelden, wenn sie mal mehrere Tage oder sogar Wochen nicht da sind. Wir hatten auch Fälle, in denen Entwickler kein genauen Plan hatten wie lange sie nicht aktiv sein werden - diese haben in Absprache mit der Administration dann vorübergehend das Team verlassen - mit der Option jederzeit ohne neue Bewerbung zurückkehren zu dürfen.

Enterprise grade development

Einigen mag es bereits aufgefallen sein: Unser Team besteht aus Schülern, Azubis, Studenten, professionellen Entwicklern und co.

Unser Ziel ist es TheLotus aus technischer Sicht auf ein Niveau zu heben, welches in der freien Wirtschaft konkurrenzfähig wäre. Das ermöglicht insbesondere jedem Entwickler die Möglichkeit neue Technologien zu lernen und als Entwickler zu wachsen.

Gleichzeitig wollen wir jedoch niemanden ausschließen, nur weil er keine Erfahrung in der Industrie hat: Wer bestimmte Technologien nicht kennt, der ist herzlich eingeladen diese bei uns kennenzulernen. Wir versuchen ein Umfeld zu schaffen, wo jeder wachsen kann - egal ob Schüler oder professioneller Software Engineer.

Ablauf der Bewerbung

Um sich zu bewerben, kannst du deine Bewerbung einfach bei uns im Forum einreichen. Danach laden wir dich, insofern wir genug Informationen haben, zu einem Gespräch auf Teamspeak ein. Dort sprechen wir generell über deine Erfahrung, deine Ambitionen, klären Fragen zu TheLotus und oft schweifen wir dabei auch in technische Diskussionen ab :D

Sollte das Gespräch zufriedenstellend verlaufen und wir von dir überzeugt sein, erhältst du eine generische Testaufgabe für den gewünschten Bereich und sollte deine Umsetzung unseren Anspruchen genügen, senden wir dir ein NDA zu. Nachdem der Papierkram erledigt ist, bist du ein JrDev. Als JrDev bekommst du dann Zugang zu unserem Source Code und eine JrDev Aufgabe - beispielsweise ein kleineres Feature, Plugin oder Bugfix.

Wenn du die Aufgabe zufriedenstellend erledigst, wirst du zum normalen Entwickler und bist damit ein vollständiges Teammitglied mit allen Rechten und Pflichten! :)