Schlagwortarchiv für: dev

Get to know TechTalk: Interview mit Senior Dev Michael Altmann

In unserer Interviewserie “Get to know TechTalk” stellen wir TechTalk Mitarbeitende vor. Diesmal verrät uns Senior Developer und Tech Lead Michael Altmann, der bereits seit 2013 bei TechTalk tätig ist, mit welchen Methoden er arbeitet, was die Rolle eines Tech Leads ausmacht und welche Herausforderungen es im Entwicklungsprozess gibt.

Was ist dein aktuelles Aufgabengebiet bei TechTalk?

An vier Tagen pro Woche arbeite ich als Tech Lead eines 7-köpfigen Developer Teams für einen Kunden aus dem öffentlichen Bereich. Freitags bin ich meist im TechTalk Büro. Dabei unterstütze ich unter anderem Teams und Developer innerhalb der TechTalk bei der Umsetzung von Projekten, führe Bewerbungsgespräche und trage durch die Organisation sowie Moderation von internen Formaten wie z.B. dem TechDiscuss zum Wissensaustausch bei.

Was macht die Rolle des Tech Leads aus und was gefällt dir besonders daran?

Ich finde die Rolle des Tech Leads sehr spannend und vor allem abwechslungsreich. Gemeinsam mit dem selbstorgansierten Team werden technische Lösungen entworfen und umgesetzt. In Zusammenarbeit mit Product Ownern sowie UX Designern bei der Anforderungserhebung ist man mit dem technischen Input auch am Produktdesign beteiligt. Die Rolle erfordert aber auch Leadership-Fähigkeiten. Die Skills jedes Teammitglieds müssen erkannt und Dynamiken im Team beobachtet werden. Nichtsdestotrotz muss auch Zeit zum Programmieren bleiben, damit die Beziehung zum Code nicht verloren geht.

Mit welchen Methoden löst du Herausforderungen im Entwicklungsprozess?

Als Tech Lead löse ich Herausforderungen an mehreren Fronten. Je nach Problem, Ziel und Team setze ich entweder eine spezifische oder eine Kombination aus mehreren Methoden ein, wobei ich darauf achte, dass mich die Methode im Daily-Doing unterstützt und nicht einschränkt. Dabei kommen immer agile Vorgehensweisen zum Einsatz, meistens Scrum, manchmal auch Kanban.

Darüber hinaus nutze ich bei komplexeren Domänen das Konzept des Domain Driven Designs. Das Ziel ist ein vereinfachtes Modell der Domäne, die das gesamte Team versteht, im Code abzubilden. Domain Driven Design lässt sich sehr gut mit Behavior Driven Development kombinieren, da beide eine gemeinsame Sprache zwischen Entwicklungsteam und Stakeholder als Ziel haben. Impact Mapping und Story Mapping sind ebenfalls Methoden, die ich regelmäßig verwende. Darüber hinaus ist Continuous Integration/Continuous Delivery wichtig, um in kurzen Zeitabständen das System in Betrieb zu setzen und Business Value liefern zu können. Wir experimentieren aber auch gerne mal und probieren unterschiedliche Methoden wie Event oder Story Storming aus.

In welchen Projekten hast du bei TechTalk bereits gearbeitet?

Zu Beginn meiner Karriere habe ich vor allem in In-House sowie Wartungsprojekten gearbeitet. Das waren eher kleine Teams, in denen ich meist mehrere Rollen übernommen habe, zum Beispiel die des Entwicklers und auch die des Product Owners. Besonders spannend war, in die verschiedenen Positionen hineinschnuppern zu können. Hierfür bin ich TechTalk sehr dankbar, dass so viel Vertrauen in mich gesetzt wurde. Mittlerweile bin ich hauptsächlich für Kundenprojekte zuständig. Beim aktuellen Kunden haben wir ein Scrum-of-Scrum Setup, welches aus 7 “cross functional teams” besteht.

Wie sieht dein Arbeitsumfeld aus?

Unabhängig vom Projekt ist es generell so, dass die TechTalk eine flache Hierarchie hat. Für mich bedeutet das, dass ich mich aktiv einbringen kann und so der Wissensaustausch unter Devs, UX Designern und Testern gefördert wird. Was ich zudem sehr schätze sind die netten Kolleginnen und Kollegen, von denen man sehr viel lernen kann. Ich bin bereits fast sieben Jahre bei TechTalk, dabei sind schon einige gute Freundschaften entstanden.

Wie kann man sich den Wissensaustausch unter EntwicklerInnen bei TechTalk vorstellen? Wie teilt ihr euer Wissen?

Zum einen gibt es den Austausch intern im Projektteam. Damit jedoch keine Wissenssilos entstehen, wurden bei TechTalk einige Formate etabliert, die dazu beitragen, den Austausch über Teamgrenzen hinweg zu fördern. In diesen Sessions werden unterschiedliche Themen diskutiert – von „Code Kommentare“ bis zu „Aufgaben des Tech Leads“ ist alles dabei. Aber auch Coding Dojos und Projektvorstellungen werden regelmäßig abgehalten. Dabei stehen immer die Diskussion sowie der Austausch im Vordergrund. Durch die verschiedenen Formate werden regelmäßig Entwickler-News, Updates oder Buchempfehlungen geteilt. Eine meiner Empfehlungen ist das Buch „Unit Testing Principles Practices Patterns“ von Vladimir Khorikiv.

Wie unterstützt dich TechTalk, damit du dich Themen abseits deiner Kundenprojekte widmen kannst?

In dem Rahmenbedingungen geschaffen werden, um Ideen zu diskutieren und diese auch umsetzen zu können. Das fördert den Mut, Experimente zu machen. Generell ist man nicht zu 100% seiner Arbeitszeit in Projekten verplant. Zudem gibt es sogenannte  Circles, Interessensgruppen, welche dazu motivieren, sich der Themen abseits des Arbeitsalltags anzunehmen und voranzutreiben. Hier kann man unabhängig einer Rolle beitreten und mitwirken.

Welche Konferenzen und Meetups würdest du Devs ans Herzen legen – auch in Zeiten von Corona?

Ich wähle Konferenzen und Meetups, die ich besuche, je nach persönlicher sowie beruflicher Weiterentwicklung und Interesse aus. Derzeit ist das Domain Driven Design, weil es mir eine Sammlung von Methoden bietet, mit denen ich gute Erfahrungen gemacht habe. Erst vor kurzem habe ich am remote DDD Meetup in London teilgenommen. Zum Schluss ein kleiner Tipp: Jetzt in Zeiten von Corona bieten die meisten Meetups Videoübertragungen an – wieso also nicht mal ein Meetup in New York, Oslo oder Sydney besuchen?

Auch die TechTalk organisiert regelmäßig Trainings und Workshops mit international hochkarätigen Speakern. Wirf einen Blick auf unser Trainingsangebot oder kontaktiere uns gerne direkt.

Möchtest auch du Teil der TT Familie werden?

Dann sieh dir hier die aktuellen Jobausschreibungen an:

Questions About Test Frameworks: Q&A Part #3 with J.B. Rainsberger

This is the third chapter of our three-part Q&A blog series with J. B. Rainsberger. In this chapter he adresses questions about “Questions About Test Frameworks. The first chapter and the second chapter is in our blog in case you missed it.

On June 3, 2020 J.B. Rainsberger spoke in our remote Intro Talk about managing the various kinds of uncertainty that we routinely encounter on projects that involve legacy code. He presented a handful of ideas for how we might improve our practices related to testing, design, planning, and collaboration. These ideas and practices help us with general software project work, but they help us even more when working with legacy code, since legacy code tends to add significant uncertainty and pressure to every bit of our work. Fortunately, we can build our skill while doing everyday work away from legacy code, then exploit that extra skill when we work with legacy code.


J. B. Rainsberger helps software companies better satisfy their customers and the business that they support.

Our next remote course Surviving Legacy Code from 12 – 15 April 2021.


If the code base is too old even for any available test frameworks, how you handle it?

**Testing does not need frameworks. Testing never needed frameworks.** You can always start by just writing tests and refactoring them. If you do this long enough, you will extract a testing framework. If you’ve never tried it, then I recommend it! Kent Beck’s _Test-Driven Development: By Example_ included this exercise.

Every test framework began life with `if (!condition) { throw Error(“Test failure.”) }`. If you can write this, then you can build a testing framework; if this suffices, then you don’t need a testing framework. Start there!

If you can execute one part of the system in isolation from the rest, then you can write unit tests. In the early days of web browsers, we could only execute Javascript in the browser, because even so, we could (and did!) write unit tests without frameworks. We merely had to run those tests in a browser window. Eventually, someone decided to run Javascript outside the browser, which made it easier to write microtests for Javascript code. This made it _easier_ to write tests, but we were writing tests long before NodeJS existed.

If you can invoke a function (or procedure or division or block of code) and you can signal failure (such as by raising an error), then you can write tests without waiting for someone else to build a framework.

In addition, you don’t need to write your tests in the same language or environment as the running system. Golden Master technique helps us write tests for any system that offers a text-based interface. Any protocol could help us here: for example, think of HTTP as “merely” a special way of formatting requests and responses with text. If you have (or can easily add) this kind of interface or protocol to your system, then you can write tests in any language that might offer a convenient test framework. Use Python to test your COBOL code. Why not?

Finally, not all testing must be automated. As I wrote earlier, programmers have a strong habit of forgetting alternatives to techniques that they’ve found helpful. If you don’t know how to automate your tests easily, then don’t automate them yet. Instead, make them repeatable and document them. One day, someone will have a good idea about how to automate them.

You may have to write your own test framework but it can prove a daunting task.

In addition to what I wrote in the previous answer, I encourage you to follow the general advice about building any software with a Lightweight (Agile, Lean, …) approach: build the first feature that you need, then start using it, then add more features one at a time. You don’t need to build a fully-featured testing framework before you start to benefit from it. Start with `if (!assertion) throw Error()` and then use it! The testing framework SUnit was built incrementally. All the testing frameworks you know began from there. You can do it, too. Merely start, then take one step at a time.

You also need this refactoring-without-tests skill, to effectively refactor your tests!

Maybe! I don’t say you _need_ it, but it would probably help you. Your production code helps you to refactor your tests: if you change your tests and they now expect the wrong behavior, then your production code will fail that test for “the right reasons”. It doesn’t provide perfect coverage, but it helps more than you might expect. In that way, the production code helps to test the tests.

There are testing frameworks for COBOL and NATURAL. What could be older?

Indeed, the “framework” portion of testing relates to identifying tests, collecting test results, and reporting them in a unified way, as well as adding standard mechanisms for “set up” and “tear down”. We don’t need those things to start writing tests, although eventually we will probably want to have them. **Simply start writing tests, then remove duplication in any way that your programing language allows.** I don’t know what might be older than COBOL or NATURAL.


➡️ Also read our last two Q & A Blogposts with J.B. Rainsberger Part #1 “Managing the Uncertainty of Legacy Code” and Part #2 “The Risks Related to Refactoring Without Tests“! Follow us on Twitter or LinkedIn to get new posts.


The Risks Related to Refactoring Without Tests: Q&A Part #2 with J.B. Rainsberger

This is the second chapter of our three-part Q&A blog series with J. B. Rainsberger. In this chapter he adresses questions about “The Risks Related to Refactoring Without Tests. The first chapter and the third chapter is in our blog in case you missed it.

On June 3, 2020 J.B. Rainsberger spoke in our remote Intro Talk about managing the various kinds of uncertainty that we routinely encounter on projects that involve legacy code. He presented a handful of ideas for how we might improve our practices related to testing, design, planning, and collaboration. These ideas and practices help us with general software project work, but they help us even more when working with legacy code, since legacy code tends to add significant uncertainty and pressure to every bit of our work. Fortunately, we can build our skill while doing everyday work away from legacy code, then exploit that extra skill when we work with legacy code.


J. B. Rainsberger helps software companies better satisfy their customers and the business that they support

Our next remote course Surviving Legacy Code from 12 – 15 April 2021.


What we should say to project planners who are afraid to let us do refactoring without tests, because some folks in our team are not very good at refactoring and make mistakes? How to convince them it can work for some good programmers?

First, I recognize that if I were the project planner, then I would worry about this, too! I probably don’t know how to judge the refactoring skill of the programmers in the group, so I wouldn’t know whom to trust to refactor without tests. Moreover, I probably can’t calculate the risk associated with refactoring without tests, so I wouldn’t know when to trust _anyone_ to refactor without tests, even if I feel confident in their skill. Once I have thought about these things, it becomes easier to formulate a strategy, because I can ask myself what would make _me_ feel better in this situation? I encourage you to ask yourself this question and write down a few ways that you believe you could increase your confidence from the point of view of the project planner. I can provide a few general ideas here.

I encourage you to build trust by telling the project planner that you are aware of the risks, that you care about protecting the profit stream of the code base, and that you are prepared to discuss the details with them. It often helps a lot simply to show them that you and they are working together to solve this problem and not that you are doing what helps you while creating problems for them.

I would ask the project planners what specifically they are worried about, then matching my strategies to their worries. For example, microcommitting provides one way to manage the risk of refactoring without tests, because it reduces the cost of recovering from a mistake. At the same time, if the project planner worries about different risks than the ones I have thought about, then my strategies might not make them feel any more secure! If I know more about which risks affect them more or concern them more, then I can focus my risk-management work on those points, which also helps to build trust.

I would emphasize that we do not intend to do this as a primary strategy forever. We don’t feel comfortable doing it, either! Even so, we _must_ make progress _somehow_. We refactor without tests because it would be even more expensive to add “enough” tests than to recover from our mistakes. Of course, we have to be willing to explain our judgment here and we have to be prepared that we are wrong in that judgment! I am always prepared to take suggestions from anyone who has better ideas, but outside of that, they hired me to do good work and make sound decisions, so if they don’t trust me, then I must try to earn their trust or they should give my job to someone that they trust more. I don’t mean this last part as a threat, but merely as a reminder that if they hire me to do the job, but they never trust me, then they _should_ hire someone else!

How about pair-refactoring?

I love it! Refactoring legacy code is often difficult and tiring work, so pair-refactoring fits well even in places where “ordinary” pair programing might not be needed. Refactoring legacy code often alternates periods of difficulty understanding what to do next with long periods of tedious work. Working in pairs significantly increases the profit from both of those kinds of tasks.

You also need this refactoring-without-tests skill, to effectively refactor your tests!

Maybe! I don’t say you _need_ it, but it would probably help you. Your production code helps you to refactor your tests: if you change your tests and they now expect the wrong behavior, then your production code will fail that test for “the right reasons”. It doesn’t provide perfect coverage, but it helps more than you might expect. In that way, the production code helps to test the tests.

Moreover, tests tend to have simpler design than the production code. This means that we might never need to refactor tests in certain ways that feel common when we refactor production code. I almost always write tests with a cyclomatic complexity of 1 (no branching), so the risk when refactoring tests tends to be much lower than when refactoring legacy code. This makes refactoring tests generally safer.


➡️ Also read our two Q&A Blogposts with J.B. Rainsberger Part #1 The Risks Related to Refactoring Without Tests” and Part #3 “Questions About Test Frameworks“! Follow us on Twitter or LinkedIn to get new posts.


Managing the Uncertainty of Legacy Code: Q&A Part #1 with J.B. Rainsberger

In this first chapter of our three-part Q&A blog series he adressed questions that came up during his session.

On June 3, 2020 J.B. Rainsberger spoke in our remote Intro Talk about managing the various kinds of uncertainty that we routinely encounter on projects that involve legacy code. He presented a handful of ideas for how we might improve our practices related to testing, design, planning, and collaboration. These ideas and practices help us with general software project work, but they help us even more when working with legacy code, since legacy code tends to add significant uncertainty and pressure to every bit of our work. Fortunately, we can build our skill while doing everyday work away from legacy code, then exploit that extra skill when we work with legacy code.

Our next remote course Surviving Legacy Code from 12 – 15 April 2021.

J. B. Rainsberger helps software companies better satisfy their customers and the business that they support.

Here are some questions that came up during this session and some answers to those questions.

One of the issues is that the legacy code base consists of useful code and dead code and it’s hard to know which is which.

Indeed so. Working with legacy code tends to increase the likelihood of wasting time working with dead code before we feel confident to delete it. I don’t know how to avoid this risk, so I combine monitoring, testing, and microcommitting to mitigate the risk.

Microcommits make it easier to remove code safely because we can recover it more safely. Committing frequently helps, but also committing surgically (the smallest portion of code that we know is dead) and cohesively (portions of code that seem logically related to each other) helps. If our commits are more independent, then it’s easier to move them backward and forward in time, which makes it easier to recover some code that we mistakenly deleted earlier while disturbing the live code less. We will probably never do this perfectly, but smaller and more-cohesive commits make it more likely to succeed. This seems like a special case of the general principle that as I trust my ability to recover from mistakes more, I feel less worried about making mistakes, so I change things more aggressively. When I learned test-driven development in the early years of my career, I noticed that I become much more confident to change things, because I could change them back more safely. Practising test-driven development in general and microcommitting when working with legacy code combine to help the programmer feel more confident to delete code—not only code that seems dead.

Even with all this, you might still feel afraid to delete that code. In that case, you could add “Someone executed this code” logging statements, then monitor the system for those logging statements. You could track the length of time since you last saw each of these “heartbeat” logging messages, then make a guess when it becomes safe to delete that code. You might decide that if nothing has executed that code in 6 months, then you judge it as dead and plan to remove it. This could never give us perfect confidence, but at least it goes beyond guessing to gathering some amount of evidence to support our guesses

More testing, especially microtesting, puts more positive pressure on the design to become simpler: less duplication, better names, healthier dependencies, more referential transparency. I have noticed a pattern: as I simplify the design, I find it easier to notice parts that look irrelevant and I find it clearer that those parts are indeed dead code. Moreover, sometimes obviously dead code simply appears before my eyes without trying! This makes it safer to delete that code, using the microcommitting and monitoring as a recovery strategy in case I get it wrong.

So not all legacy code adds value to the business… but it is hard to know which part does.

Indeed so. We have to spend time, energy, and money to figure this out. I accept responsibility as a programmer to give the business more options to decide when to keep the more-profitable parts running and to retire the less-profitable parts. As I improve the design of the system, I create more options by making it less expensive to separate and isolate parts of the system from each other, which reduces the cost of replacing or removing various parts. Remember: we refactor in order to reduce volatility in the marginal cost of features, but more-generally in the marginal cost of any changes, which might include strangling a troublesome subsystem or a less-profitable feature area.

The Strangler approach describes incrementally replacing something in place: adding the new thing alongside the old thing, then gradually sending traffic to the new thing until the old thing becomes dead. Refactoring the system to improve the health of the dependencies makes this strangling strategy more effective, which gives the business more options to replace parts of the legacy system as they determine that a replacement would likely generate more profit. As we improve the dependencies within the system, we give the business more options by reducing the size of the smallest part that we’d need to replace. If we make every part of the system easier to replace, then we increase the chances of investing less to replace less-profitable code with more-profitable code.

This illustrates a general principle of risk management: if we don’t know how to reduce the probability of failure, then we try reducing the cost of failure. If we can’t clearly see which parts of the legacy code generate more profit and which ones generate less, then we could instead work to reduce the cost of replacing anything, so that we waste less money trying to replace things. This uses the strategy outlined in Black Swan of accepting small losses more often in order to create the possibility of unplanned large wins.

What do you think about exploratory refactoring? Do you use this technique sometimes?

Yes, I absolutely do! I believe that programmers can benefit from both exploratory refactoring and feature-oriented refactoring, but they need to remain aware of which they are doing at any time, because they might need to work differently with each strategy to achieve those benefits.

When I’m refactoring in order to add a feature or change a specific part of the code, I remind myself to focus on that part of the code and to treat any other issues I find as distractions. I write down other design problems or testing tasks in my Inbox as I work. I relentlessly resist the urge to do those things “while I’m in this part of the code”. I don’t even follow the Two-Minute Rule here: I insist on refactoring only the code that right now stands between me and finishing the task. Once I have added my feature, I release the changes, then spend perhaps 30 minutes cleaning up before moving on, which might include finishing a few of those Two-Minute tasks.

The rest of the time, I’m exploring. I’m removing duplication, improving names, trying to add microtests, and hoping that those activities lead somewhere helpful. This reminds me of the part of The Goal, when the manufacturing floor workers engineered a sale by creating an efficiency that nobody in the sales department had previously thought possible. When I do this, I take great care to timebox the activity. I use timers to monitor how much time I’m investing and I stop when my time runs out. I take frequent breaks—I use programming episodes of about 40 minutes—in order to give my mind a chance to rise out of the details and notice higher-level patterns. I don’t worry about making progress, because I donI ’t yet know what progress would look like—instead I know it when I see it. By putting all these safeguards in place, I feel confident in letting myself focus deeply on exploring by refactoring. I avoid distracting feelings of guilt or pressure while I do this work. I also feel comfortable throwing it all away in case it leads nowhere good or somewhere bad. This combination of enabling focus and limiting investment leads me over time to increasingly better results. As I learn more about the code, exploratory refactoring turns into feature-oriented refactoring, which provides more slack for more exploratory refactoring, creating a virtuous cycle.

What is your experience with Approval Tests, in cases where writing conventional unit tests might be to expensive?

I like the Golden Master technique (and particularly using the Approval Tests library), especially when text is already a convenient format for describing the output of the system. I use it freely and teach it as part of my Surviving Legacy Code course. It provides a way to create tests from whatever text output the system might already produce.

I get nervous when programmers start going out of their way to add a text-based interfaces to code that doesn’t otherwise need it only for the purpose of writing Golden Master tests. In this case, checking objects in memory with equals() tends to work well enough and costs less. I notice it often that programmers discover a helpful technique, then try to use it everywhere, then run into difficulties, then invest more in overcoming those difficulties than they would invest in merely doing things another way. Golden Master/Approval Tests represents merely another situation in which this risk comes to the surface.

I get nervous when programmers start choosing to write integrated tests for code where microtests would work equally well. When programmers think about adding Golden Master tests, they tend to think of these as end-to-end tests, because they often judge that as the wisest place to start. Just as in the previous paragraph, they sometimes fall into the trap of believing that “since it has helped so far, we must always do it this way”. No law prevents you from writing unit tests using Golden Master/Approval Tests! Indeed, some of the participants of my Surviving Legacy Code training independently discover this idea and use it to great effect. Imagine a single function that tangles together complicated calculations and JSON integration: it might help a lot to use Approval Tests to write Golden Master tests for this function while you slowly isolate the calculations from the JSON parsing and formatting. The Golden Master tests work very well with multiline text, such as values expressed in JSON format, but probably make the calculation tests awkward, compared with merely checking numeric values in memory using assertEquals().

When programmers use Golden Master/Approval Tests, they need to treat it as just one tool in their toolbox. This is the same as with any technique! I tend to treat Golden Master as a temporary and complementary technique. I use it when I focus on writing tests as a testing technique, even though I tend to prefer to write tests for design feedback. Not everyone does this! If you find yourself in the stage where you’re drowning in defects and need to focus on fixing them, then Golden Master can be a great tool to get many tests running early. Once you’ve stopped drowning, it becomes easier to look at replacing Golden Master with simpler and more-powerful unit tests—eventually microtests.


➡️ Also read our two Q&A Blogposts with J.B. Rainsberger Part #2 The Risks Related to Refactoring Without Tests” and Part #3 “Questions About Test Frameworks“! Follow us on Twitter or LinkedIn to get new posts.


The Global Day of Coderetreat 2019 am 16. November

Es ist wieder mal soweit, ein weiteres Jahr ist vorüber und der nächste “Global Day of Coderetreat” (GDCR) steht vor der Tür.

Was ist aber nun der Global Day of Coderetreat und warum sollte mich das interessieren?

Die Website coderetreat.org sagt dazu:

“A Coderetreat is a day-long, intensive practice event, focusing on the fundamentals of software development and design. By providing developers the opportunity to take part in focused practice away from the pressures of ‘getting things done’, the coderetreat format has proven itself to be a highly effective means of skill improvement.”

Am Global Day of Coderetreat treffen sich also auf der ganzen Welt Gruppen von Software-EntwicklerInnen um unter fachkundiger Anleitung mehrmals an einer Aufgabe zu arbeiten. Im Gegensatz zum realen Projektleben geht es aber nicht darum fertig zu werden, sondern sich in einem Pair der Aufgabe immer wieder von einer neuen Seite zu nähern. In gemeinsamen Retrospektiven wird über die vergangene Session reflektiert. Auf diese Weise sammeln die Teilnehmerinnen im Laufe des Tages viele Erfahrungen und Erkenntnisse, die sie auch im zurück im Projektalltag gewinnbringend einsetzen können.

Im Zuge vom Global Day of Coderetreat 2016 haben wir die Gelegenheit genutzt ein paar Eindrücke und Impressionen einzufangen. Diese kannst du dir im folgenden Video ansehen:

TechTalk Stories – Coderetreat 2016

Als Facilitator dürfen wir heuer Sandra Parsick (@SandraParsick) und Peter “CodeCop” Kofler (@codecopkofler) begrüßen.

TechTalk ist heuer bereits zum vierten Mal in Folge Gastgeber und Sponsor des GDCR in Wien, diesmal in den Räumlichkeiten Donau City Spaces by TechTalk. Die Hosts vor Ort sind die TechTalk-Kollegen Paul Rohorzka (@paulroho), Daniel Sack (@DanielTheCoder) und Raoul Holzer (@RaoulHolzer). Für Fragen (z.B. “Ist das eine Veranstaltung für mich?”) können sie jederzeit kontaktiert werden.

Details zur Anmeldung zum Global Day of Coderetreat 2019.

Du schaffst es nicht zum Global Day of Coderetreat? Gar kein Problem! Wir als TechTalk sind auf vielen Community Events und Trainings anzutreffen, einige davon findest du unter Meet TechTalk.

Hinweis:

Da der GDCR heute zum zehnten Mal stattfindet, gibt es in Wien auch am Tag davor die Möglichkeit an einer anderen Ausgabe des GDCR 2019 teilzunehmen. Die beiden Veranstaltungen werden unabhängig voneinander organisiert.

Wir wünschen dir viel Spaß beim Global Day of Coderetreat oder einen der nächsten Community Events!