<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[PorscheDev - Medium]]></title>
        <description><![CDATA[Insights in developing digital products at Porsche from passionate people sharing their personal experiences and opinions in this blog. - Medium]]></description>
        <link>https://medium.com/porschedev?source=rss----c4063469d97f---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>PorscheDev - Medium</title>
            <link>https://medium.com/porschedev?source=rss----c4063469d97f---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 16:17:30 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/porschedev" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Technology Radar Vol. 2]]></title>
            <link>https://medium.com/porschedev/technology-radar-vol-2-4833fb31e2fd?source=rss----c4063469d97f---4</link>
            <guid isPermaLink="false">https://medium.com/p/4833fb31e2fd</guid>
            <category><![CDATA[techradar]]></category>
            <category><![CDATA[aws-lambda]]></category>
            <category><![CDATA[porsche]]></category>
            <category><![CDATA[myporsche]]></category>
            <dc:creator><![CDATA[Thomas Spillecke]]></dc:creator>
            <pubDate>Tue, 15 Jan 2019 12:22:44 GMT</pubDate>
            <atom:updated>2019-01-16T07:49:22.191Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CN5QD2awb2sjWFmqwdPt8Q.png" /><figcaption>My Porsche Technology Radar Vol. 2</figcaption></figure><p>See it here: <a href="https://radar.thoughtworks.com/?sheetId=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2Fd%2F1NsPAd9UUyUJeFDyYkg-rw6VIRBT0QQle78xZOuFh0es%2Fedit%23gid%3D0">The My Porsche Technology Radar Vol. 2</a></p><h3>What is a Techradar?</h3><p>Our Techradar is inspired by, follows and uses the tools from Thoughtworks. They have a very good <a href="https://www.thoughtworks.com/de/radar/faq">explanation on their website</a>.</p><h3>How does a Technology Radar help us?</h3><p>As you may know or remember from previous articles we at My Porsche align many decoupled teams. We are proud of our self-sufficient teams that work on one seamless user experience for “My Porsche”.</p><p>To understand the impact a Techradar has on our agile teams we have to look back. Not long ago a central board made the decisions about technologies to be used in all projects. There was no product-thinking for software. A book of standards defined which way to go and what to use. The teams had no choice except the company-wide tool set and methods. Regardless if this set supports a seamless user experience.</p><blockquote>We shift responsibility into the teams.</blockquote><p>Therefore we now allow the teams to use the tool set that fits the team best. They are free to choose their technology to solve customers’ demands. This is a huge responsibility since the teams have to:</p><ul><li>maintain their own software stack and keep it up to date</li><li>setup a secure cloud infrastructure</li><li>follow our rules to be part of My Porsche (like security is not negotiable, infrastrcuture as code etc.)</li></ul><blockquote>We setup teams with less effort.</blockquote><p>At the same time we setup new teams in new regions. We can only provide the best user experience when not only our backends are close to the users, but also our teams.</p><p>The Technology Radar shows the “trodden path” that worked for existing teams and helped these teams to build their product. New teams participate from that knowledge and experience.</p><blockquote>We preserve our knowledge to share it.</blockquote><p>By discussing the blips for our Technology Radar we identified a most precious value: knowledge (about what works well and what attempts were in vain). The Technology Radar preserves our knowledge — but only works if we update it regularly. We also like to share this knowledge with the world and are open for feedback.</p><p>If you are interested in how we organize our teams, have a look at this article: <a href="https://medium.com/porschedev/decoupled-alignment-2145227ca721">Decoupled Alignment</a>.</p><h3>History of our Technology Radar</h3><h4>Creation of Technology Radar Vol. 2</h4><p>We learned from our first approach (Vol. 1) and introduced the following rules:</p><ul><li>Reduce the number of participants and instead asked for input from all the teams via Email, Slack etc.</li><li>Remove all blips from Vol. 1 that didn’t cross our way in the last 6 months</li><li>Discuss what worked for our teams</li><li>Be more strict what we really set to adopt or trial (based on the discussion above)</li></ul><p>These might seem simple and self-evident. But we didn’t follow them in first place.</p><p>This time discussions were much better than in our first session. We really took the time to discuss the relevant blips from several team’s perspective. Only if a blip was successfully used in production or resulted in a productive feature in at least two teams, we set it to <strong>adopt</strong>.</p><p>If only one team uses a blip but it really had a huge positive impact during planning and implementing the feature we set it to <strong>trial</strong>.</p><p>Whenever we had the impression that we should use a certain technology to shorten the time-to-market or increase security we carefully put them into <strong>assess</strong>.</p><p>From our regular Tech Sync and Product Owner Sync meetings we identified the blips that are currently on <strong>hold</strong>.</p><p>We also used the Technology Radar to get rid of legacy software or gently push the teams into certain directions. A good example is our self-managed instance of Hashicorp Vault, which we abandoned in favour of a managed service. Managed services have better availability, are monitored permanently and require no administrative resources from our side.</p><p>The result is what we expected. The <a href="https://radar.thoughtworks.com/?sheetId=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2Fd%2F1NsPAd9UUyUJeFDyYkg-rw6VIRBT0QQle78xZOuFh0es%2Fedit%23gid%3D0">Technology Radar Vol. 2</a> is right to the point. It contains the right amount of blips to setup your team, your software stack and provide interfaces to build and maintain a product in our ecosystem.</p><p>Since we reduced the number of blips we managed to describe all of them.</p><p>We created a Technology Radar which is inspired by Thoughtworks and keep it stupid simple: use their template.</p><h4>Where is Vol. 1?</h4><p>Technology Radar Vol. 1 was never published. We started with a small group of Tech Leads and the IT Architects to collected all blips that we could think of. Then we discussed the blips, placed them in quadrants and rings — et voila: Vol. 1 was ready by March 2018.</p><p>But we missed an important part of the exercise: We did not filter the blips for their importance and also put too many of them into adopt. The result was way to big collection of all our technologies, methods, languages etc. We never managed to add even a short description for the blips.</p><p>Vol. 1 did not look like a Technology Radar (and therefore it was never published). We created an internal Confluence page but never invested time to advertise this one. I’m pretty sure, no one ever opened that page.</p><p>We decided to wait 6 months until we update the radar, filter and reduce the blips.</p><h3>Highlights of this edition</h3><h4>Techniques — Public APIs as Default</h4><p>We really want to decouple our teams but share our data. Therefore we introduced several public API topics in different quadrants — but all in assess. If the teams start to think “API first” it will reduce overhead to plan and develop interfaces for their data.</p><h4>Techniques — Operations as initiatives</h4><blockquote>With great power comes great responsibility.</blockquote><p>Teams gained freedom (=power) when moving into the cloud, but at the same time were overwhelmed by the amount of operations tasks still required. To make efforts visible to all stakeholders we would like to create initiatives for operations tasks vs. a fixed budget for these tasks.</p><h4>Platform — Lambda functions (for Apps) &amp; Serverless</h4><p>We were really impressed how serveless accelerated the speed of developement for backend services — even if the teams had no dedicated backend developers. We are sure this will make a difference in time-to-market for MVPs.</p><p>AWS Lambda is currently our tool of choice to go for our Serverless approach.</p><h4>Languages &amp; Frameworks — Java</h4><p>Oracle changes their licensing policy which will have an impact on our budget. We therefore would switch to OpenJDK wherever possible. Therefore we set the OracleJDK strictly on hold and set OpenJDK to adopt.</p><h4>Tools — Træfik</h4><p>Træfik made it into our Techradar in a very short time frame. It’s surprisingly easy to setup, configure and maintain for the teams. It therefore replaces NGINX in our cloud infrastructure setup. It is perfectly prepared to play with microservices (e.g. circuit breaker, routing, reload-less reconfiguration).</p><h3>Conclusion</h3><p>By using the tools from Thoughtworks it is fairly easy to visualize a Techradar. We had the task to collect, discuss and decide on the blips in our My Porsche ecosystem. We learnt from Vol. 1 and made Vol. 2 much more lean and to the point.</p><p>There are other tools and methods available to collect all technologies of our teams (e.g. see our <a href="https://stackshare.io/porsche/my-porsche">software stack at stackshare.io</a>).</p><p>But the most important learning from all: We entirely changed the way how we are dealing with techniques, platforms, languages &amp; frameworks and tools. We first evaluate and give the teams the freedom to try it out. Then we sort it out within our regular Tech meetings and bring this up (or not) in the Techradar. We no longer stick to centrally pre-defined project methods, software stacks and limitations imposed by decisions form central boards or books of standards.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4833fb31e2fd" width="1" height="1" alt=""><hr><p><a href="https://medium.com/porschedev/technology-radar-vol-2-4833fb31e2fd">Technology Radar Vol. 2</a> was originally published in <a href="https://medium.com/porschedev">PorscheDev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Decoupled alignment]]></title>
            <link>https://medium.com/porschedev/decoupled-alignment-2145227ca721?source=rss----c4063469d97f---4</link>
            <guid isPermaLink="false">https://medium.com/p/2145227ca721</guid>
            <category><![CDATA[enterprise-technology]]></category>
            <category><![CDATA[architecture]]></category>
            <category><![CDATA[ux]]></category>
            <dc:creator><![CDATA[Hauke Juhls]]></dc:creator>
            <pubDate>Sun, 09 Dec 2018 06:52:03 GMT</pubDate>
            <atom:updated>2018-11-01T20:58:29.104Z</atom:updated>
            <content:encoded><![CDATA[<p>In a <a href="https://medium.com/porschedev/gaining-new-capabilities-b0d6e0b9799d">previous post</a> I talked about alignment and decoupling. Motivated by some mails and questions pointing out this seems contradictory, I want to dig a little deeper on what it means for us.</p><p>Remember, that we at My Porsche decided to decouple our systems in a way that teams can develop their functionality independently from others. Our main driver for this is time-to-market — and thus — relevance for our customers.</p><p>On the other hand, it is important to ensure that the different services we offer in our digital eco-system are perceived as “one”. The user should not notice that he is switching between services developed by different teams (people who bought a product in a shiny store in seconds and faced hours in support hotlines once having problems with the product they purchased know what I am talking about).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/714/1*ddOqA4GbuHcZTzxd7-zAKA.png" /><figcaption>Multiple teams contribute to one common user experience</figcaption></figure><p>The picture above shows a high-level diagram of our approach to tackle the challenge to balance alignment and team independence. On top you can see the customer — using our services. In the bottom you can see some of our teams offering their services (in grey).</p><p>In-between you can see that we develop common standards for cross-cutting concerns we believe are important for a seamless digital experience (in blue). Apart from having a <em>single digital identity</em> and <em>a common UI design</em>, we came up with additional <em>rules &amp; common standards</em> for a seamless digital user experience.</p><p>In this article I want to share the different aspects we have identified so far. Adding technical details to the diagram, the picture looks like this (apologies if this is detailed, but for the sake of transparency, I decided to use the very same drawing we use internally):</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gEQmn4CMANK-z9Jo3VwSXw.png" /><figcaption>Technical blueprint of a My Porsche Product</figcaption></figure><p>You will notice that we have identified rules for scoping the product (exposed as services), the conceptual components (in the service and the UI layer) and the interfaces between our products.</p><p>Take our messaging product for example. It provides a secure inbox for delivering messages to our customers. When a system wants to deliver a message to the customer, it uses a REST-API in the service layer to submit the message.</p><p>The messaging service show the message to the customer via web application that is part of the messaging product in the UI layer. Other products — such as our landing page can use the REST-API to show the number of unread mails — and create a deep link to the UI showing the inbox, filtering etc. Other systems — such as a <a href="https://samnewman.io/patterns/architectural/bff/">Backend for Frontend (BFF)</a> for an app could subscribe to a Kafka topic that signals a new message — so that the BFF can send a push notification to a mobile app.</p><p>In addition, we have a number of common conventions / requirements to support a seamless user experience. I will list the major ones and state the cost of not having that rule:</p><p><strong>Supported Languages and Countries: </strong>We have different offerings and texts (e.g. instructions, legal texts) that differ per country. Without agreeing what languages we support in what country, there is the danger that language changes inside a user journey.</p><p><strong>Browser support: </strong>Without agreeing on the same set of browsers, we cannot ensure that the user does not end up in a dead-end when being forwarded to a system that does not support the browser he started with.</p><p><strong>Number of system environments </strong>(e.g. development, integration, production): Without agreeing on how many stages/system environments we have on a system level, we will not be able to test user journeys end-to-end because comprehensive test data will be impossible to produce.</p><p><strong>Logging &amp; monitoring:</strong> Without agreeing on standards on logging and monitoring we will not be able to provide support.</p><p><strong>Authentication: </strong>Without agreeing on standards for user-authentication, users will have to re-authenticate during their user journey.</p><p><strong>UI design / UX: </strong>Without standards / samples for user interface design, pages will look different. We ensure this via a UI-Kit that contains ready-to use UI elements (actually this goes beyond UI elements and also includes a common dictionary, translation process etc. to ensure that we use the same terms for things).</p><p><strong>Documentation: </strong>Without common standards for documentation of our products (think of this as a product catalog) we risk people solving the same customer-relevant aspects twice (e.g. two products offering services how addresses are formatted — leading to incompatibilities when re-using address data across systems).</p><p><strong>Networking &amp; Connectivity: </strong>Without standards for networking and connectivity (we chose the public internet), we risk situations where we cannot connect systems to each other, because products might have been created in legacy network zones that restrict internet connectivity.</p><p>There are other aspects where we believe we need to invest in (e.g. resilience and performance/timeouts), but we haven’t come up with good rules, yet. Which brings me to how we create such rules. The rules are not created by a single governance body. Instead, the product teams identify these rules as they come up. In our guilds (e.g. UX, tech, devops, …) we discuss them — and check if they seem relevant (e.g. the networking rule seems obvious, but we missed that at some point in time). When discussing, we first check if we risk negative user impact if we do not have such a rule. Next, we investigate the status quo, asking why people solved things differently — and finally trying to find consensus for a rule.</p><p><strong>Behaviour over inner workings: </strong>You will notice that above rules focus on the BEHAVIOUR of a system (old term would be requirements). I am often asked by fellow architects why we do not standardize around the building blocks of the application. They — like myself have been trained to fight redundancy in IT systems.</p><p>I strongly believe that redundancy is not bad in general. Accepting redundancy can increase delivery speed. It becomes evil if it contradicts our requirements. Remember, our requirements are: short time-to-marked, highly integrated user experience.</p><p>Will a customer notice if we are using mongoDB in one service and dynamoDB in another? I doubt it.</p><p>Will we have better time-to-market if we use mongoDB compared to DynamoDB? I believe it depends on a number of factors… factors I believe the developers of a product can judge best.</p><p>But what about cost? I believe in the power of the market. If we have the feeling that a variety of databases is too expensive or time-consuming (because each team has to figure out how to solve a particular problem), I am convinced it is best to make an offer to the teams that they are not able to resist. This can come in forms of a trodden path (e.g. we already figured out how to do backups in DynamoDB, this is how we do it and here is the documentation necessary to prove that we comply with data protection laws, we already have set up a contract to order xyz) or by having one team creating a product to solve a specific problem.</p><p>If a company fails to make such an offer, but tries to standardize via strict rules and policies, it will remove the motivation for the team offering a service to remain competitive — and eventually will result in higher costs and frustration.</p><p>Identifying potential candidates for a trodden path or a product is a challenge on its own and a topic for another post.</p><p>So as a summary, in our setup, the “enterprise architecture” must focus on rules and policies around the behaviour of a service, but not for the building-blocks used to create it.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2145227ca721" width="1" height="1" alt=""><hr><p><a href="https://medium.com/porschedev/decoupled-alignment-2145227ca721">Decoupled alignment</a> was originally published in <a href="https://medium.com/porschedev">PorscheDev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Introducing Content as a Service]]></title>
            <link>https://medium.com/porschedev/introducing-content-as-a-service-aeaaa1154dd6?source=rss----c4063469d97f---4</link>
            <guid isPermaLink="false">https://medium.com/p/aeaaa1154dd6</guid>
            <category><![CDATA[content-as-a-service]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[my-porsche]]></category>
            <dc:creator><![CDATA[Alexander Diewald]]></dc:creator>
            <pubDate>Wed, 15 Aug 2018 06:36:29 GMT</pubDate>
            <atom:updated>2018-08-15T06:36:29.028Z</atom:updated>
            <content:encoded><![CDATA[<p>Today’s approaches in agile software development such as Microservice architectures and techniques such as continuous deployment and infrastructure as code empower short development cycles and autonomous teams. APIs are no longer a communication protocol between two systems only- they are treated as a product. Keeping changes small and automate whatever is required to bring them into production is a key success factor.</p><p>When looking at Enterprise Content Management Systems it often feels as they were designed for print, treating websites as paper. Many CMS came with complex inheritance hierarchies, workflows and vendor-specific customization. None of these features makes us fast or flexible.</p><p>Through the last years, Headless CMS products gained a rapidly growing market share. Headless CMS separates representation from the content. The content itself is available through APIs, its representation will be implemented from the respective client applications. But publishing a Content API is only one part of the story. At My Porsche we evaluated different Headless CMS products and introduced <a href="https://www.contentful.com/">Contentful </a>as a fundamental part of our Content as a Service platform one year ago.</p><p><strong>Enable content creation</strong></p><p>Obviously, content editing is a major part of any CMS product. While developers often do not think about content creation, it is a crucial success factor. Many Enterprise CMS are powerful, but at the same time complex to use. Editors often need a comprehensive training to learn how to maintain content. Usually content is organized in tree structures, following an inheritance schema. For instance there is a content tree for a certain language. If you want to reuse content of a page for other languages, it is often required to duplicate that page into the schema of the second language. Customizing requires in-depth knowledge of the product.</p><p>What makes a Headless CMS different and why do we call it Content as a Service? First of all we don’t edit entire pages only functional components. Editors don’t have to deal with the complexity of the entire frontend. Contentful is fully based on APIs and comes with an easy to use editing interface, which also relies on the same APIs the developers use. It provides full control over the content model allowing us to quickly implement our use cases, without having to consult agencies or tasking the CMS vendor to customize their product.</p><p>At My Porsche we started with local content maintained by our partners in the markets. The editor user interface is just a graphical representation of the content model. Ease of use is important, as our editors are not CMS experts but experts in marketing or sales of the respective market. There is no time for comprehensive trainings.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pyP_uka2RMUrDr9sUE1JwQ.png" /><figcaption>Banner editing at Contentful web app</figcaption></figure><p>As we develop new content models, we can directly provide access to the future editors and improve with their feedback. This way we gained speed and reduced organizational overhead. We don’t need highly specialized CMS developers for that. Having knowledge in REST and a major programming language is enough to get used to the provided SDKs and Content Management APIs.</p><p><strong>WYSIWYG?</strong></p><p>In a world of devices thinking about break points and supported browsers is not enough anymore. The boundaries between HTML based frontends and native applications are fluid. One big advantage of many CMS products is the ability to see a preview of the future site. As content editors also have control over the layout.</p><p>When using a Headless CMS the API is the product and the representation is implemented at client applications. So how do we deal with the lack of previews?</p><p>We strongly believe the best preview is to look at the latest content changes in the target frontend. Contentful provides a Preview API having draft contents and production contents. Usually client applications integrate the Preview API in their non-productive stages.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*28tgvtprzBotZqFuYb7-nA.png" /><figcaption>Banner representation at My Porsche Portal</figcaption></figure><p>If it comes to content for authenticated areas, such as the My Porsche Portal, our editors have to deal with a bunch of different test accounts having different roles and capabilities. As a problem solver we started to invent own demo pages using the same components as our frontends do. This of course does not replace a full review in the target frontend, but it allows to quickly set some dropdowns and flags and see what content pieces will be visible for the target user having this context. At the same time it is a good practice in development, it forces our team to think about the content API as a consumer prior to the actual integration with the target frontends.</p><p><strong>Content modeling</strong></p><p>Content modeling is really important as the Content Type defines the API endpoint as well as the editing experience. In the past we had to consult an agency forwarding our requirements to the CMS vendor if any change at the Content Model was required. Now we can define Content Models on our own in code and highly automated.</p><p>We usually start do discuss requirements with dependent teams and intiative owners as soon as possible on the whiteboard. If the basic concept is aligned, we start to develop the first content models within our development environments just by clicking the fields together in the web app of Contentful. This enables us to get early feedback from the future editors of that content and adapt. Typical discussions are mandatory or optional fields, localization and so on. As editing is really easy most editors can immediately create their first contents without reading manuals or receiving extensive trainings.</p><p>After we have a certain state mature enough to continue we start to develop the content models in code, using the vendors SDK. In the end we have the full model in code, including tests and we are ready to deploy. As the content model also designs the content API, we are always aiming at a balance of having an easy editorial frontend and an API that allows all sort of filtering and selection with a minimal set of queries for the client developers.</p><p>Having flat content models is quite easy and straight forward. The complexity grows when you have to link the content pieces with each other. The content is organized in a content graph, allowing to associate the content entries with each other.</p><p>References are very powerful but they also come with additional complexity. Editors have to be aware of publishing all references of a content piece as well. Especially cyclic dependencies must be avoided. For client developers it also gets more complex to fetch all content pieces with ideally a single query when using references.</p><p>As an easy example we do have a simple banner rotation, distinguishing which banners to display at My Porsche for a certain target audience. Using a reference to the banners allows to reuse a banner in multiple rotations while not having to duplicate the actual banner.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RnWH3CSUq-qkCKKz9RZ_Ow.jpeg" /><figcaption>Banner Rotation composes all Banners that should be shown to Prospects</figcaption></figure><p>At the same time the Banner Rotation limits us when it comes to tagging with further attributes, that are not dependent on the banner rotation. What if we want to tag Banners with ‘Golf’ or ‘Electric Vehicle’? Think about the queries a client must request to fetch these information. This easy example illustrates pitfalls you have to be aware of at designing Content Models. We are constantly learning and evolving our content models.</p><p><strong>Content API consumption</strong></p><p>Across uses cases currently running on our platform we see both, clients that directly integrate content APIs in their frontends as well as applications having a server-side aggregation. While such an Aggregation Service allows to integrate further logic and apply specific rules on top of the content, it misses the advantage of the content API which computes queries at globally distributed Edge servers.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bIJPgoQWvPugw4XqOjtUNw.png" /><figcaption>Contentful basic components and client API consumption</figcaption></figure><p><strong>Workflows</strong></p><p>Content creation must be easy and fast. This applies to publishing as well. If publishing is limited through headquarters only, it feels save but it does not scale pretty well. We believe our editors must be empowered to take over responsibility for their contents.</p><p>Workflows are not supported, basically Contentful is mainly distinguishing between content in draft state and published content for production. As the product is highly extensible, from alerting to custom UI components and complex workflows tend to feel as overhead, we see this fact more as an advantage. For instance we can define a webhook that is triggered on certain events and fires a request to an AWS Lambda function, having all event data and parameters inside the JSON body.</p><p><strong>Providing a content platform for product teams</strong></p><p>Another important aspect is the capability of developing and deploying content models. In the past we had to describe requirements which where provided to the vendor through an agency. Having a content as a service product we can now describe content models on our own. As all content management tasks are available through a fully documented API it is possible to describe the complete content models in code, using practices such as a CI/CD pipelines and automated tests. This makes us faster but even more important, we can enable other product teams to develop their own content models for specific use cases. Usually a small kick-off is enough to explain the basics and share best practices with the other teams.</p><p>We distinguish between ‘Content’ and ‘Platform’ as products. For use cases having ‘Content’ as a product we develop all content models, take care about APIs and editors. The editors maintain content and assets.</p><p>If other teams want to develop their own content models and manage their own space, we onboard their developers and share best practices. The product team is fully responsible over content modeling, editing and API client integration.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*U4IL46SweIbJDbuQm9Uprw.png" /></figure><p><strong>Conclusion</strong></p><p>Looking at the past year the ability the create content models on our own really made us faster and more flexible. It also encourages our partners in the markets to directly get involved instead of just writing down requirements.</p><p>The Contentful web app is easy to use and the product is pretty popular among our editors. Markets are able to directly maintain content for their respective customers on their own.</p><p>As content team our major advantage is to have all the building blocks like content model, editing interface, web hooks and so on under full control to rapidly develop and deploy new uses cases. Contentful allows us to focus on the content and to limit organizational overhead.</p><p>Providing new content models fast is only one part of the story, we still need to improve our planning and dependency management with regards to content to decrease time 2 market.</p><p>Do we miss classic CMS features like Content Preview, Asset Management or Workflows? I think we have to answer this with the classic enigneering quote — “it depends”.</p><p>We strongly believe that the best preview is to have a look at the contents in the target client application. The Asset Management in Contentful is pretty basic. We also do not miss Workflows, but something like scheduled Publishing or assigning some unfinished content entry to somebody would be appreciated by our editors.</p><p>Definitely Contentful is highly extensible. Developing custom scripts and tools always comes with the cost of having to maintain and operate these tools. I would recommend to define a Code of Conduct of how you want to use your platform. Sometimes complex problems lead to a simple conclusion — business logic should not be implemented in the CMS. Implicit logic and dependencies between content fragments make editing and API consumption more complex and error prone.</p><p><strong>Whats next?</strong></p><p>Content as a Service based on Contentful gave us new capabilities. For the future it will be important to integrate further content sources. We’ll have to aggregate these contents based on certain rules and provide more dynamic APIs, aware of the user context. It will be a big challenge to provide new approaches while keeping the client APIs simple and the frontends generic enough to keep flexibility.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=aeaaa1154dd6" width="1" height="1" alt=""><hr><p><a href="https://medium.com/porschedev/introducing-content-as-a-service-aeaaa1154dd6">Introducing Content as a Service</a> was originally published in <a href="https://medium.com/porschedev">PorscheDev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Gaining new capabilities]]></title>
            <link>https://medium.com/porschedev/gaining-new-capabilities-b0d6e0b9799d?source=rss----c4063469d97f---4</link>
            <guid isPermaLink="false">https://medium.com/p/b0d6e0b9799d</guid>
            <category><![CDATA[digital-transformation]]></category>
            <category><![CDATA[architectural-design]]></category>
            <category><![CDATA[microservices]]></category>
            <dc:creator><![CDATA[Hauke Juhls]]></dc:creator>
            <pubDate>Tue, 06 Feb 2018 22:43:38 GMT</pubDate>
            <atom:updated>2018-02-08T20:19:58.031Z</atom:updated>
            <content:encoded><![CDATA[<p>As Roman described in our <a href="https://medium.com/porschedev/shifting-from-a-car-manufacturer-to-a-software-company-760cfd5ca317">first blog post</a>, we are currently in the phase where we gain new capabilities — comparable to those found in the software industry.</p><p>Before diving into the effects this change has onto Porsche’s IT system architecture, I want to give a little perspective on the key factor why we want to change.</p><p>The car/mobility becomes more and more integrated into the digital ecosystem to deliver the best experience to our customers. This requires a tight integration with all sorts of systems such as phones, calendars, preferred streaming services, social networks etc.</p><p>In contrast to a mainly closed system such as the traditional car (which also contains a lot of highly advanced software applications), this ecosystem is not controlled by a single organization — therefore timing and features are not controlled by a single instance. Every participating player needs to adapt to changes outside their control quickly and to seize new business opportunities.</p><p>This adaptability and the means to deliver new functionality quickly, fundamentally influenced our system architecture. We started with the systems that provide digital touchpoints with our customers (such as identity management, web portals).</p><p>This flexibility was in contrast to the requirements that mainly drove our IT in the past (the need for well-planned, effective, long lasting systems). And we came up with the following rules:</p><p><strong><em>Decoupled </em></strong>— Rather than developing one large system, we have chosen to implement systems that concentrate on a small set of functions. But decoupling also meant that we accept creating similar components twice (something we tried to avoid in the past).</p><p><strong><em>Highly aligned</em></strong> — While the decoupling gives the individual teams greater independence, it is imperative, that we ensure the interoperability between the systems. This goes far beyond purely technical aspects. It also covers non-functional requirements such as supported languages or common standards to enable service and support.</p><p><strong><em>Web standards </em></strong>— Existing web standards are the technical representation of this alignment. The web is an impressive example of highly decoupled services that integrate well. We have chosen to follow this great example.</p><p><strong><em>Evolutionary and demand driven</em></strong> — To prevent our systems from being over-engineered, we invest in flexibility rather than up-front guesswork of future requirements.</p><p><strong><em>Community driven</em></strong> — We integrate with a great number of existing systems and work with a lot of different partners to implement our systems. They all bring specific domain knowledge and experience. We believe that a community of this diversity ensures a reasonable balance between the decoupling and the alignment mentioned above.</p><h4>What worked well</h4><p>The chosen approach brought us quite far and showed positive effects on our ability to deliver new functionality quickly.</p><p>Our rules work well, but they are not free of contradictions. E.g. our decision to use Kafka for inter-system communication is contradictory to our commitment to open web standards (see Heiko’s Post “<a href="https://medium.com/porschedev/apache-kafka-at-porsche-literary-figure-meets-car-manufacturer-ead9d99c3bc">Apache Kafka at Porsche</a>”), but in full alignment with our evolutionary and demand driven approach.</p><p>The evolutionary and demand driven rule needs to be handled with care. There is the danger of creating solutions on a basis that this not fit for handling a requirement (alas, the German word “frickeln” — does not translate well into English — to tinker is probably close) — so the existing state must be challenged constantly.</p><p>We found that the approach to form teams that are responsible for their systems works well. We see that it ensures that everyone works on things he/she knows best. A side-effect is that problems often show-up in the same place where they can be fixed.</p><h4>What is next</h4><p>The rules and what we have done so far brought us far but they are only the beginning of our journey. This is what comes next.</p><p><strong>The Cloud: </strong>When we started the implementation of our systems, we used the existing building blocks our IT-systems were relying upon. These building blocks are the same that can be found in many manufacturing companies: a set of software components (such as Tomcat, Oracle DBs etc.) operated on on-premise hardware. These building blocks cannot be controlled by software — but rather require manual work by those responsible for the services offered by these components. This greatly impediments our ability to refactor our existing services and encourage work-arounds. See <a href="https://medium.com/porschedev/modern-infrastructure-for-modern-software-delivery-e17bcb46ace8">Florians post</a> about our cloud journey for our approach on that topic.</p><p><strong>Self-service APIs:</strong> There will always be communication and thus dependency between our systems. To make sure we can manage them in the future, we need to make sure that every service we create can be consumed via self-service (APIs). Again, we have a great example to follow: Cloud services accessible as self-service made the dependency to infrastructure less problematic.</p><p><strong>Fitness functions:</strong> The rules above only work in a smaller environment, where their meaning can be taught to new colleagues and evaluated in the community. As described in <a href="https://www.thoughtworks.com/de/books/building-evolutionary-architectures">Building Evolutionary Architectures</a>, the desired state of an architecture could also be made measurable by fitness functions. This (among other metrics) could move us forward in measuring our progress we all feel we have achieved so far.</p><p>One of my key learnings is that you as an organisation need to draw some conclusions yourself. There is a lot of great literature, excellent examples and great people to learn from, but there is no such thing as the single blue-print on how to get digital products right. So the things written here are a snapshot (hopefully you find interesting) and will change over time.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b0d6e0b9799d" width="1" height="1" alt=""><hr><p><a href="https://medium.com/porschedev/gaining-new-capabilities-b0d6e0b9799d">Gaining new capabilities</a> was originally published in <a href="https://medium.com/porschedev">PorscheDev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Modern Infrastructure for Modern Software Delivery]]></title>
            <link>https://medium.com/porschedev/modern-infrastructure-for-modern-software-delivery-e17bcb46ace8?source=rss----c4063469d97f---4</link>
            <guid isPermaLink="false">https://medium.com/p/e17bcb46ace8</guid>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[cloud-computing]]></category>
            <category><![CDATA[devops]]></category>
            <dc:creator><![CDATA[Florian Sellmayr]]></dc:creator>
            <pubDate>Mon, 23 Oct 2017 14:09:38 GMT</pubDate>
            <atom:updated>2017-10-23T14:09:37.766Z</atom:updated>
            <content:encoded><![CDATA[<h3>Modern Infrastructure for Modern Software Delivery — Moving Porsche to the Cloud</h3><p>Moving towards an agile software delivery model brings changes to the way teams work. They</p><ul><li>are empowered</li><li>need to gather feedback quickly</li><li>move fast</li><li>use modern technologies</li></ul><p>For this to succeed, they need infrastructure tools and processes that support this workflow. They need insights and control over their technology stack to iterate quickly and build the best solutions.</p><p>IT departments’ traditional ticket-driven processes and standard products are often not the right fit for this type of work. They need to evolve alongside software delivery teams.</p><p>This post describes the Porsche Connected Car programs’ journey towards a new, AWS based infrastructure.</p><h3>Finding the hook</h3><p>For business leaders, it can be hard to grasp the challenges, tradeoffs and benefits of technical tasks (be it a small refactoring or replacing the whole infrastructure). So if we want to get their support, we need to frame technical decisions in a way that makes sense in their world:</p><p><em>“This might make us better in developing software”</em> might be true and obvious to any engineer, for outsiders it is vague and hard to follow.</p><p><em>“This will improve customer experience and increase revenue”</em> is concrete, measurable and a straightforward argument for any business leader so finding it will go a long way to bring them to our side.</p><p>For us, this argument was the performance experience for our customers. As a car manufacturer that aims to provide a superior quality to customers all over the world, serving all of them from data centers in Germany does not seem to be the best approach. But how to prove it?</p><h3>Measuring Performance</h3><p>If we want to argue from a well founded base, we first have to find out if we even have a problem.</p><p>So first, we need to look at how fast our product is for users all over the world. For this, <a href="https://www.webpagetest.org/">WebPagetest</a> served us very well, allowing us to run simple scripted user sessions across a wide range of locations and gathering detailed performance-data. It also allows us to generate videos comparing user experience across regions that allow non-technical people to understand performance impact.</p><p>So, we established that we have a problem. Now it’s time to drill down to find the actual bottlenecks affecting performance.</p><p>Properly instrumented applications can provide a wealth of data to do this, logging performance metrics for incoming and outgoing requests that we can query and visualise in a log analysis tool (in our case <a href="https://www.splunk.com/">Splunk</a>).</p><p>Once we had a more detailed picture on the critical requests in our applications path, we used <a href="https://gatling.io/">Gatling</a> to build load tests that allow us to reproduce critical aspects in various scenarios.</p><p>In the end, we found a number of different aspects that affected performance and we were also able to prove our hypothesis that network latency between our customers, their cars and a central datacenter played a role end user performance, giving us a great starting point for discussions with various stakeholders.</p><h3>A vision and new team</h3><p>Having convinced various stakeholders that changes to our infrastructure stack would not only improve the ability to build and operate our software but also give our users tangible benefits, a small team formed around a core vision:</p><p><strong>An agile, modern infrastructure stack owned by empowered delivery teams.</strong></p><p>By design, this team would be temporary. They would prototype and clear the way, then coach delivery teams to take ownership of their infrastructure.</p><h3>Experimentation and Prototyping</h3><p>Before we could get started migrating our applications, we first needed to get a feel for the new platform. We needed a realistic testbed that would take real-world constraints into account.</p><p>To accomplish this, we decided to deploy a minimal subset of our existing application landscape, consisting of part of our edge layer (responsible for, among other things, managing authentication of requests) as well as one of the simpler applications with a minimum of dependencies to external systems.</p><p>This setup was simple enough to iterate quickly but also complete enough to run complete user journeys and to test a number of more complicated requirements like dependencies between systems, encryption in transit and at rest, secret management and monitoring.</p><p>Using this testbed, we were able to figure out which technologies and approaches worked for us, which solutions we want to carry over from the existing infrastructure and where we needed to find new solutions. We could experiment with migration strategies, find dependencies and pitfalls. We could extend it to new use-cases, allowing us to learn aspects we didn’t know before.</p><h3>Scale it</h3><p>After a while, our testbed evolved more and more into a production-like setup we were comfortable with. We felt we had covered most of the critical aspects and found solutions that worked for our case.</p><p>At this point, our testbed became the seed for our new infrastructure. Since it was built from the start with the same approaches we would use for a “real production” system (testing and monitoring, infrastructure as code, resilience), there was no need for re-engineering. We could use our existing testbed infrastructure and scale it.</p><p>In our case, this meant starting to hand over responsibilities. While application delivery teams were always in touch with the experiments of the cloud enablement team, now was the time to get more hands-on. To work together to create infrastructure they would own and evolve, for the applications the team owned.</p><p>This is where we are right now. Team by team, application by application, we are moving pieces onto a new kind of infrastructure, learning, adjusting and improving as we go.</p><h3>Learnings</h3><p>While this process is far from over, we already learned quite a lot. So here’s a collection of things that we found out, that worked well for us or learned the hard way.</p><h4>Be prepared for surprises and plan accordingly</h4><p>It is in the nature of transformation that not all aspects can be planned reliably. You are trying to establish something new, something your organisation doesn’t have experience with so necessarily there will be surprises, there will be things you didn’t expect. Things might take longer or won’t work in the way you want them to. Your stakeholders should be prepared for this, be on board with it and account for it in their planning.</p><h4>Use realistic examples and build for production from the start</h4><p>When starting something new, we might be tempted to start with something that is simple, to “do it properly after we are done experimenting”. This divorces your experiments from reality. You end up with situations where your results don’t work when tried “for real” or where a lot of rework is necessary.</p><p>Instead, try to find a small subset of what you are trying to do and do it as if it were a production system: Build testing and monitoring in from the start. Automate. Create delivery pipelines. Design for resiliency and scalability.</p><p>You don’t have to do all of this at once but until you took those aspects into account, you won’t discover the little edge-cases, hidden constraints and intricacies that will make or break your solution sooner or later.</p><h4>Find out what you can reuse but don’t shy away from building new things</h4><p>When moving from on-premise to cloud infrastructure, it will be tempting to reuse as much as possible. After all, you probably already have a lot of infrastructure code, custom deployment tools, technologies, architectures and processes that contain years of organisational knowledge. And some of those can be very valuable. Others don’t apply in the new world and there’s no sense in keeping them around: For lots of solutions, the cloud works fundamentally different from your on-premise IT.</p><p>As one example, on-premise datacenter often work with long-lived, mutable servers while cloud providers optimise for a model where individual servers are unreliable, short-lived and immutable. This has consequences for the way you build and maintain your infrastructure and for the tools you use:</p><ul><li>Deployment changes from deploying a new artefact to replacing the whole server</li><li>You roll out new images instead of orchestrating changes from a puppet-master</li><li>Scaling up and down based on demand replaces static upfront capacity planning</li></ul><h4>Make sure you start early working on organisational aspects</h4><p>While most of this post focuses on technical aspects, we shouldn’t forget that in large organisations, non-technical or organisational aspects will dominate a lot of what you do.</p><p>Architecture Committees will want to know about your plans, IT Security might need to sign off. Accounting and Procurement need to figure out how to pay the bills and business units will want to know how this affects their existing features and your ability to build new ones.</p><p>Most of these things will take a while to sort out. They can derail a project if we don’t. So involve people early and work with them but don’t let them set your agenda: You are trying to build something new so by definition, it will be different in some sense so standardised approaches will not apply.</p><h4>Build for your teams current capabilities but design for growth</h4><p>As a team with the mission to enable others, one of the hardest tradeoffs to make is how much abstraction to design upfront vs. how much freedoms to allow individual delivery teams. Do we want delivery teams to have a single “deploy” button and that’s all they can do or do we want them to design their own networking structure, CIDR-ranges and all?</p><p>Too much flexibility means more things to learn and keep track of for the individual, more things to go wrong and more inconsistencies across teams. Too much abstractions means longer lead times (because abstractions need to be built), less flexibility, more dependencies and the very real danger to build the wrong abstractions.</p><p>The truth will almost certainly (unless all your employees already are expert cloud engineers) be somewhere in between and will depend on your organisation. But as a general rule of thumb, try to find a solution that works for your audience’s current capabilities (to allow them to learn and adapt quickly) but design it in a way that allows for them to grow out of them eventually, to drop the abstractions when necessary.</p><p>For example, for us that meant starting to prepare <a href="http://terraform.io/">Terraform</a> modules for some common infrastructure pattern (e.g. a web application with a load balancer). Teams can use them if the default works for them but can always choose to abandon them and work on a lower layer and with different tools if they need a more custom solution.</p><h4>Prevent scope creep, aim for production as early as possible</h4><p>Our approach started with a phase of experimentation, prototyping and preparation. It allowed us to gain confidence and find solutions that we could recommend to delivery teams.</p><p>It’s also very vulnerable to scope creep: There’s always another thing to explore, another thing that “just needs to be done before we are ready”, another thing that just “isn’t good enough yet”.</p><p>So keep in mind that in isolation, this phase doesn’t add value. Value is only added once delivery teams start building on top of it, once real software is running on real infrastructure for real users.</p><p>So aim for production early. Aim for production not when things are perfect (they never are) when things are just barely good enough. This will tell you what’s important and what’s just nice to have. It will give you feedback if you are on the right track and tell you all the things you missed.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e17bcb46ace8" width="1" height="1" alt=""><hr><p><a href="https://medium.com/porschedev/modern-infrastructure-for-modern-software-delivery-e17bcb46ace8">Modern Infrastructure for Modern Software Delivery</a> was originally published in <a href="https://medium.com/porschedev">PorscheDev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Apache Kafka at Porsche — Writer meets car manufacturer]]></title>
            <link>https://medium.com/porschedev/apache-kafka-at-porsche-literary-figure-meets-car-manufacturer-ead9d99c3bc?source=rss----c4063469d97f---4</link>
            <guid isPermaLink="false">https://medium.com/p/ead9d99c3bc</guid>
            <category><![CDATA[microservices]]></category>
            <category><![CDATA[digital-transformation]]></category>
            <category><![CDATA[apache-kafka]]></category>
            <dc:creator><![CDATA[Heiko Scholtes]]></dc:creator>
            <pubDate>Sat, 15 Jul 2017 11:11:25 GMT</pubDate>
            <atom:updated>2017-08-23T09:18:09.636Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>“Roads grow out of going them!” — Franz Kafka</blockquote><p>As part of our digital transformation at Porsche the mindset of the people plays the most important role. But agility, speed and organisational culture must also find its way to the product teams and sooner or later we talk about speed in development teams.</p><p>In this article I will describe how Apache Kafka helped us to decouple microservices and led to a more independent software development process by dissolving dependencies between both organisational units and technical components. The result is an even better velocity in the teams and an even more reliable event backbone.</p><p><strong>Circumstances</strong></p><p>You might think of delivering software in ONE development team is not a big deal? You are probably right when the following requirements are met:</p><ul><li>the team understands the requirements and acceptance criteria that are described in the epics and user stories</li><li>the scrum roles are fully established</li><li>the team members trust each other and have a good personal relationship</li><li>the team is passionate</li><li>the team uses the technology stack on which it performs best</li><li>no dependencies to other teams</li></ul><p>Basically, this is an ideal state and during my 12 years experience as Project Manager I have never seen such a perfection in regards to these circumstances.</p><p>Think of complex Connected Car projects: beginning from R&amp;D, Electronic Control Units (ECUs) in a vehicle up to Vehicle Documentation Systems, various After Sales and Sales Systems (CRM System, Identity &amp; Access Management Services, Shop Systems, License &amp; Activation Management Systems for Connect Services, Picture Services, Messaging &amp; Communication Services for customer notifications, etc.) to only mention a few of them. There are massive complexities and huge dependencies between various development teams.</p><p>In 1967, Melvin Conway was right when he said that the complexity of the IT-landscape strongly depends on the complexity of the company’s organisation and communication structure (Conway’s law). The more organisational units the more heterogenous IT systems.</p><p>The complexity mentioned by Conway posed a challenge to our development teams: the vast amount of dependencies between legacy systems, microservices and their organisational ownerships led to communication overhead, many meetings and too many bounded developers for harmonising both interface integrations and test(-data) management between these systems.</p><p>Long story short: the dependencies between teams and organisational units grew and team members were most of the time arguing in meetings than developing new features.</p><p>The result: the development teams’ velocity slowed down.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/615/1*q3kawj0z29_ovIRsKSOS2w.png" /></figure><p>For sure you can rethink the size of your microservices and shift its organisational ownership to improve the communication channels and hence speed up the development of components. But you definitely want to avoid that technical components are tailored to particularly fit to organisational units that either might change in future and/or the component’s ownership will eventually change. Remember Conway’s words!</p><p><strong>Welcome Apache Kafka</strong></p><p>The point at Porsche came pretty early when we had to decide how to solve these dependencies on a technical layer.</p><p>At the same time we talked about „process-like“ microservices that encapsulate the overall business process and in turn orchestrate downstream microservices. But this kind of architecture collapsed already on the question of the product ownership of that „process-like“ microservice since processes usually span business domains.</p><p>Additionally, we doubted that introducing a new microservice orchestration layer will really speed up our development process since it increases the complexity, apparently.</p><p>So, we decided for a <em>hybrid event-driven architecture</em>. What does that mean?</p><p>Actions, triggered by the frontends (e.g. Portal- or Webshop-based-microservices) always result in synchronous transactions and synchronous communication with downstream components. This synchronous communication pattern always guarantees that the Frontend-Users get a meaningful response to their CRUD (Create, Read, Update, Delete)-operations and data consistency in frontend widgets is ensured during navigation.</p><p>The synchronous <em>main transaction</em> (e.g. establish/release car relationship between owner and vehicle) either succeeds or fails, i.e. there are no doubted transactions.</p><p>Microservices themselves might initiate several synchronous calls to downstream components and are hence responsible for the consistency of the data that are in turn provisioned back to the frontend user. But this is all done in a synchronous way.</p><p>The synchronous Create, Update and Delete <em>main transaction</em> usually results in a changed state from a business perspective, e.g.:</p><ul><li>a car relationship between owner and vehicle released successfully compared to the previous state when the owner-vehicle-relation existed</li><li>a connect service was successfully activated in a vehicle compared to the previous state when the service was not available in this specific vehicle</li></ul><p>In these cases the microservice that successfully finished the <em>main transaction</em> publishes a document-based “<em>state-changed-event</em>” which is then subscribed by various microservices. The microservice that initiated the <em>main transaction </em>is out of responsibility after having published the “<em>state-changed-event</em>”. Furthermore, the publishing microservice (event producer) does not even know if — and if yes, — which microservices subscribed to the “<em>state-changed-event</em>”.</p><p>Subscribing microservices (event consumers) are now in charge of consuming this event and of processing it in a new transaction. The event consumers act independently and are self-contained from both a technical and business point of view.</p><p>Between event producers and event consumers, Apache Kafka is established as publish/subscribe event backbone.</p><p>The big advantage: both the technical components and hence the development teams are decoupled in regards to the „<em>state-changed-events</em>”. This circumstance finally lead to faster test results, less integration efforts and hassle free integrations with help of the publish/subscribe pattern.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kHVG0f1S09XJBhdGU0TqjQ.png" /></figure><p><strong>Why Apache Kafka?</strong></p><p>Apache Kafka is an open-source distributed streaming platform that we evaluated last year in a three-months Proof-of-Concept (PoC) phase. We decided against other queuing platforms since Apache Kafka offers more than just realising the above described publish/subscribe pattern.</p><p>The main benefits for our use-cases were</p><ul><li>continuously running real-time query capabilities</li><li>excellent topic/partition management</li><li>very high throughput</li><li>low administrative overhead</li><li>many settings are decentralised, i.e. the event consumer decides what rollback, timeout, etc. behaviour fits best for its specific use-case</li><li>both decentralised settings and administration capabilities fit best for a <em>DevOps</em> approach</li><li>Open-Source Software (-license)</li></ul><p>After the successful PoC we decided that Apache Kafka is the perfect match for our event backbone: it decouples our microservices, is easy to handle and — most important — helps to speed up the overall development process. Additionally, it is a future proof streaming platform for both vehicle events and event analysis.</p><p>Furthermore, we decided for Apache AVRO as data serialisation system and exchange format in Kafka messages and checked-in a blueprint consumer and producer code in our bitbucket for the sake of re-use in other development teams.</p><p>After six months running a clustered Apache Kafka in production more and more development teams within Porsche but also from other corporate group brands ask for experiences with the platform and I usually highly recommend this setup.</p><p>In some cases the use of traditional queuing systems makes definitely more sense and should be taken into consideration but in our case at Porsche Connect, Apache Kafka was the first choice.</p><p><strong>What comes next?</strong></p><p>We are just in the process of establishing domain-specific (e.g. After Sales, Sales, etc.) Apache Kafka hubs at Porsche and interconnect these hubs with help of Apache Kafka’s Mirror Maker. This will offer new scalable and flexible possibilities across business domains especially if you think of moving some domains into the cloud.</p><p>The journey has just begun. Come along with us on this journey.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ead9d99c3bc" width="1" height="1" alt=""><hr><p><a href="https://medium.com/porschedev/apache-kafka-at-porsche-literary-figure-meets-car-manufacturer-ead9d99c3bc">Apache Kafka at Porsche — Writer meets car manufacturer</a> was originally published in <a href="https://medium.com/porschedev">PorscheDev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Shifting from a car manufacturer to a software company]]></title>
            <link>https://medium.com/porschedev/shifting-from-a-car-manufacturer-to-a-software-company-760cfd5ca317?source=rss----c4063469d97f---4</link>
            <guid isPermaLink="false">https://medium.com/p/760cfd5ca317</guid>
            <category><![CDATA[agile]]></category>
            <category><![CDATA[digital-transformation]]></category>
            <category><![CDATA[business-agility]]></category>
            <dc:creator><![CDATA[Roman Locher]]></dc:creator>
            <pubDate>Fri, 14 Jul 2017 20:33:49 GMT</pubDate>
            <atom:updated>2017-07-15T07:30:50.864Z</atom:updated>
            <content:encoded><![CDATA[<p>Porsche is well known for luxury sports cars. Just two months ago Porsche celebrated the millionth 911 coming off the production line. Porsche cars combine heritage with high-tech. You now probably think of the perfect sports car: beautiful design, best in class performance, a masterpiece of automotive engineering. But by introducing Porsche Connect with the new Panamera last year, Porsche had to shift from a car manufacturer with clear focus on hardware development to a company delivering digital products to its customers. This change had a great impact on organisational structures, mindset of people and of course the way of doing IT business.</p><h4>Moving from waterfall to agile</h4><p>At Porsche we had a standardized approach for IT projects: more or less a waterfall approach with lots of documents to write. The business side had to define the requirements, after approval of the requirements specification the IT guys started with technical specification and implementation, finally the software was delivered. For Porsche Connect with a very challenging time constraint and lots of uncertainties we had to change this approach fundamentally.</p><p>A small group of people, business and IT, started to push an agile approach. All people needed to develop the software products were organized in cross-functional teams. Writing documents was replaced by writing code and delivering working software as early as possible was the main goal. One of the most demanding tasks was to overcome internal concerns about the agile approach. We had to convince lots of people that it‘s worth to follow the agile path. Beside of training the Scrum methodology, the change of the people’s mindset was a very important enabler for our small agile outpost. Delegating responsibility to the teams, encouraging the teams to make decisions on their own in the best interest of the product and to trust each other was crucial for our success.</p><h4><strong>Agile at scale</strong></h4><p>Now we had this small group of people embracing the agile approach. But how to scale this out? We had to deliver a huge amount of features with a fixed deadline and reducing the scope was not an option. Thus we started to setup more cross-functional product teams with specific feature responsibilities. Each team should be capable of delivering features without or little dependency on other teams. Actually we tried to adapt the well known approach of Netflix and Spotify and we had some very inspiring talks with guys from Otto. The more we scaled out the more we struggled with dependencies between the teams and dependencies to the car. These dependencies made us slow and we had lots of trouble because we couldn’t deliver working user journeys as soon as more than one team was involved.</p><p>We hade to find a way to reduce these dependencies or to manage them. Getting rid of them was impossible in most cases. For example the car was one of these fixed constraints we couldn’t change. So we decided to manage the dependencies by making them visible for all teams. Furthermore we introduced an agile portfolio which allowed us to align all teams regarding scope and time. With the agile portfolio all teams should have the same goals and priorities in mind when implementing new features. This approach helped us a lot to deliver working user journeys continuously.</p><p>Another obstacle was lack of communication. Of course we had our regular meetings. But after the meeting each team went back to work and there was only little collaboration between the teams. A turning point was when we introduced HipChat to enable communication between all teams. This was the starting point for building up guilds. People with the same interests or roles started to communicate via chat. For example the UI/UX guys had a regular chat about the overall user experience. They aligned concepts and designs without any further push from outside.</p><p>Enabling communication and collaboration was definitely one key for successful product development. Another success factor is trust and to share the same mindset. We started to have events together with all teams. One very successful event is a product marketplace, where all teams are invited to show the current state of the product and everybody can discuss with each other and share information. Today we reach lots of people across the whole company with these events and it helps us to build up a community for our digital products.</p><h4><strong>Summary</strong></h4><p>One main thing we learned is that there is no blueprint out there to get an agile approach up and running within an organisation. We had to find our way, the Porsche way, and there were and are lots of challenges. The journey has just begun and there is more to come. Software is getting more and more important for the car manufacturers as customer expectations are changing rapidly. Digital transformation is one key to cope with the future challenges. But besides of technology and methodology it’s all about people, how they feel, how they act and how they work together. A lot of work has to be done in the area of mindset and cultural development and I’m happy to share our experiences in this blog.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=760cfd5ca317" width="1" height="1" alt=""><hr><p><a href="https://medium.com/porschedev/shifting-from-a-car-manufacturer-to-a-software-company-760cfd5ca317">Shifting from a car manufacturer to a software company</a> was originally published in <a href="https://medium.com/porschedev">PorscheDev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>