{"id":89807,"date":"2025-10-29T09:17:14","date_gmt":"2025-10-29T08:17:14","guid":{"rendered":"https:\/\/www.skaylink.com\/?p=89807"},"modified":"2025-10-29T09:17:14","modified_gmt":"2025-10-29T08:17:14","slug":"embracing-test-driven-development","status":"publish","type":"post","link":"https:\/\/www.skaylink.com\/en\/insights\/blog\/embracing-test-driven-development\/","title":{"rendered":"Embracing test-driven development: A journey from skeptic to advocate"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"89807\" class=\"elementor elementor-89807\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6c324193 header-keyvisual-container e-flex e-con-boxed e-con e-parent\" data-id=\"6c324193\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5df336ff elementor-align-left elementor-widget elementor-widget-breadcrumbs\" data-id=\"5df336ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"breadcrumbs.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<p id=\"breadcrumbs\"><span><span><a href=\"https:\/\/www.skaylink.com\/en\/\">Home<\/a><\/span><\/span><\/p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-155dcd28 e-con-full e-flex e-con e-child\" data-id=\"155dcd28\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-4348176d header-keyvisual-content e-con-full e-flex e-con e-child\" data-id=\"4348176d\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-42e2a6cc elementor-widget elementor-widget-image\" data-id=\"42e2a6cc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"2000\" height=\"1333\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/10\/MG_9702.jpg\" class=\"attachment-full size-full wp-image-89816\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/10\/MG_9702.jpg 2000w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/10\/MG_9702-300x200.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/10\/MG_9702-1024x682.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/10\/MG_9702-768x512.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/10\/MG_9702-1536x1024.jpg 1536w\" sizes=\"(max-width: 2000px) 100vw, 2000px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-59ff142 e-con-full e-flex e-con e-child\" data-id=\"59ff142\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4d09da43 elementor-widget elementor-widget-text-editor\" data-id=\"4d09da43\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Blog<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5101b6a9 elementor-widget elementor-widget-heading\" data-id=\"5101b6a9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Embracing test-driven development: A journey from skeptic to advocate<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5770b1b7 elementor-widget elementor-widget-text-editor\" data-id=\"5770b1b7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tDiscover how Test-Driven Development (TDD) can transform your approach to building software.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-83a123a e-flex e-con-boxed e-con e-parent\" data-id=\"83a123a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-299643a3 e-flex e-con-boxed e-con e-child\" data-id=\"299643a3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-5ddca934 e-flex e-con-boxed e-con e-child\" data-id=\"5ddca934\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3831ffe8 elementor-widget elementor-widget-text-editor\" data-id=\"3831ffe8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tOctober 29, 2025\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4f856b00 e-flex e-con-boxed e-con e-child\" data-id=\"4f856b00\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-fc24119 e-flex e-con-boxed e-con e-child\" data-id=\"fc24119\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4c3d4241 elementor-author-box--image-valign-middle elementor-widget elementor-widget-author-box\" data-id=\"4c3d4241\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"author-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-author-box\">\n\t\t\t\t\t\t\t<div  class=\"elementor-author-box__avatar\">\n\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/09\/Screenshot_20240710_101648-219x300.png\" alt=\"Picture of Claudia M\u00fcller\" loading=\"lazy\">\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t<div class=\"elementor-author-box__text\">\n\t\t\t\t\t\t\t\t\t<div >\n\t\t\t\t\t\t<span class=\"elementor-author-box__name\">\n\t\t\t\t\t\t\tClaudia M\u00fcller\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-author-box__bio\">\n\t\t\t\t\t\t<p>Senior AWS Consultant<\/p>\n\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3e2c49c2 e-flex e-con-boxed e-con e-child\" data-id=\"3e2c49c2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7e853de8 elementor-widget elementor-widget-author-box\" data-id=\"7e853de8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"author-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-author-box\">\n\t\t\t\n\t\t\t<div class=\"elementor-author-box__text\">\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5a51c109 e-flex e-con-boxed e-con e-parent\" data-id=\"5a51c109\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-5fdb7a8b e-con-full e-flex e-con e-child\" data-id=\"5fdb7a8b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-363c7781 elementor-widget elementor-widget-text-editor\" data-id=\"363c7781\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Have you ever found yourself digging through log files, trying to figure out why your application isn\u2019t working as expected? Or spent hours manually testing a workflow after what seemed like a minor change? If so, you\u2019re not alone. In this article, I\u2019ll share my journey with test-driven development (TDD) and how it transformed my approach to building software.<\/p><p>I used to be skeptical about TDD. The idea of writing tests before writing any actual code seemed counterintuitive to me. How could I test something that didn\u2019t even exist yet? However, working on complex projects changed my perspective entirely.<\/p><p>When navigating unfamiliar code bases, TDD became my compass. Writing tests first forced me to deeply think about what I wanted my code to accomplish. Rather than diving straight into implementation, I had to clearly articulate my expectations \u2013 a process that often revealed gaps in my understanding and led to better designs.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a7f51f5 elementor-widget elementor-widget-heading\" data-id=\"a7f51f5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The real value of test-driven development<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4c41b8ba elementor-widget elementor-widget-text-editor\" data-id=\"4c41b8ba\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>TDD truly shines when you need to modify existing code. Instead of trying to mentally track all the intricate ways your changes might affect the system, you can rely on your test suite to detect any regressions. This safety net allows you to focus on the task at hand without worrying about unforeseen consequences.<\/p><p>As requirements evolve, my tests ensure that existing functionality remains intact while I add new features.<\/p><p>The turning point in my relationship with TDD came when I joined a large project with an unfamiliar code base. Making changes became a high-stakes game, as each modification risked having unintended consequences elsewhere in the system.<\/p><p>Writing tests first forced me to articulate exactly what I wanted to achieve. This clarity proved invaluable. Instead of jumping into the implementation details, I first had to answer some fundamental questions: What should this function return? How should it handle edge cases? What dependencies does it have?<\/p><p>Before writing a single line of implementation code, writing a test forces you to clearly define:<\/p><ul><li>What inputs the function should accept<\/li><li>What dependencies need to be mocked (if you\u2019re not familiar with mocking, see the brief overview later in this blog)<\/li><li>What the expected output structure looks like<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b70c9cf elementor-widget elementor-widget-heading\" data-id=\"b70c9cf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Integration testing: Finding the right balance<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4f215427 elementor-widget elementor-widget-text-editor\" data-id=\"4f215427\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Integration testing examines how components interact. To be effective, it isn\u2019t about testing everything at once \u2013 it\u2019s about testing the right combination of components.<\/p><p>With integration testing, the goal isn\u2019t to test the output of a function; instead, it\u2019s to determine whether a workflow still succeeds when one component is modified.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c60ff48 elementor-widget elementor-widget-heading\" data-id=\"c60ff48\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">That\u2019s the component your test should focus on.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7763a888 elementor-widget elementor-widget-text-editor\" data-id=\"7763a888\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>First, decide on the scope of your test. Then define:<\/p><ul><li>What input is needed for that workflow<\/li><li>What output it should generate<\/li><li>How many helper functions are called during the workflow<\/li><\/ul><p>While testing the code that modifies a shopping cart on a website, for example, you don\u2019t need to worry about how the items got into the shopping basket or how payment will work. What matters is whether you can change the quantity or remove items.<\/p><p>In an integration test, you don\u2019t focus on dependencies or third-party tools. Just mock their outputs where necessary. The same applies to your helper functions that aren\u2019t the focus of the test.<\/p><p>TDD is also helpful for existing code bases. Imagine you have a large function that spans hundreds of lines and has what feels like an insurmountable number of dependencies. Rather than jumping straight into adding your new feature, start by writing an integration test to check the current functionality of the code. As you go through the error messages in your test case, mock the dependencies in the code. After you complete your test, you\u2019ll have a template showing what the actual test case for your new feature will look like. Any dependencies not relevant to your test have already been mocked.<\/p><p>Now you can easily write your code and adjust it based on the results of your test. To make your new feature more stable, use your test case to simulate various scenarios and check your code for weaknesses.<\/p><h5><strong>For example:<\/strong><\/h5><p>You have a function make_cake() that calls three sub-functions: get_ingredients(), make_batter() and bake(). You want to modify the make_batter() function and see how the changes affect the execution of the entire make_cake() function.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8f712b0 elementor-widget elementor-widget-code-highlight\" data-id=\"8f712b0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp># cake_maker.py\r\ndef get_ingredients():\r\n    \"\"\"Get cake ingredients from some external source\"\"\"\r\n    # In real life, this might call an API or database\r\n    return {\"flour\": 200, \"sugar\": 150, \"eggs\": 2, \"butter\": 100}\r\n\r\ndef make_batter(ingredients):\r\n    \"\"\"Mix ingredients to create a batter\"\"\"\r\n    # This is the function we want to test for real\r\n    if not ingredients:\r\n        return None\r\n    return {\r\n        \"mixed\": True,\r\n        \"quality\": sum(ingredients.values()) \/ 10\r\n    }\r\n\r\ndef bake(batter):\r\n    \"\"\"Bake the batter into a cake\"\"\"\r\n    # Another external function we'll mock\r\n    if not batter:\r\n        return {\"success\": False}\r\n    return {\"success\": True, \"taste_score\": batter[\"quality\"] * 2}\r\n\r\ndef make_cake():\r\n    \"\"\"Main workflow function\"\"\"\r\n    ingredients = get_ingredients()\r\n    batter = make_batter(ingredients)\r\n    cake = bake(batter)\r\n    return cake\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4f1439be elementor-widget elementor-widget-text-editor\" data-id=\"4f1439be\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In your integration test, you mock the responses of get_ingredients() and bake(), because those two functions are not the focus of the test. What you want to understand is how changes to make_batter() affect make_cake(), given that the other two functions perform as expected.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9ea1e88 elementor-widget elementor-widget-code-highlight\" data-id=\"9ea1e88\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp># test_cake_maker.py\r\nimport pytest\r\nfrom cake_maker import make_cake\r\n\r\ndef test_make_cake_real_batter_only(mocker):\r\n    \"\"\"Test make_cake() but only test the make_batter function for real\"\"\"\r\n    \r\n    # Mock the ingredients function\r\n    mock_ingredients = {\"flour\": 200, \"sugar\": 150, \"eggs\": 2, \"butter\": 100}\r\n    mock_ingr = mocker.patch('cake_maker.get_ingredients', return_value=mock_ingredients)\r\n    \r\n    # Mock the bake function\r\n    mock_cake = {\"success\": True, \"taste_score\": 90}\r\n    mock_bake = mocker.patch('cake_maker.bake', return_value=mock_cake)\r\n    \r\n    # Call the function - this will use our mocked functions but the real make_batter\r\n    result = make_cake()\r\n    \r\n    # Verify result\r\n    assert result == mock_cake\r\n    \r\n    # Verify the bake function was called with the correct batter\r\n    expected_batter = {\r\n        \"mixed\": True,\r\n        \"quality\": sum(mock_ingredients.values()) \/ 10\r\n    }\r\n    actual_batter = mock_bake.call_args[0][0]\r\n    \r\n    assert actual_batter[\"mixed\"] == expected_batter[\"mixed\"]\r\n    assert actual_batter[\"quality\"] == expected_batter[\"quality\"]\r\n    \r\n    # Verify our mocks were called\r\n    mock_ingr.assert_called_once()\r\n    mock_bake.assert_called_once()<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-70d603c0 elementor-widget elementor-widget-heading\" data-id=\"70d603c0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Key points<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3caf1d7e elementor-widget elementor-widget-text-editor\" data-id=\"3caf1d7e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ol><li><strong>Mock the functions you\u2019re not testing<\/strong>: We patch get_ingredients() and bake() to isolate make_batter().<\/li><li><strong>Let the real function run<\/strong>: We don\u2019t patch make_batter() since it\u2019s the function under test.<\/li><li><strong>Verify inputs and outputs<\/strong>: Check that the mocked functions receive the expected arguments from the real function.<\/li><li><strong>Keep the test logic simple<\/strong>: Focus on ensuring that the target function integrates properly within the workflow.<\/li><\/ol><p>This approach allows you to test the behavior of a specific component within a larger system without worrying about external dependencies. This is, of course, a very simple example. In real-world scenarios, you\u2019ll often deal with complex functions in the background that might call external services. You don\u2019t want to call them every time for a variety of reasons, such as speed, authentication, or the desire to keep your test case simple.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b470b95 elementor-widget elementor-widget-heading\" data-id=\"b470b95\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Short introduction to mocking<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4a6a2a27 elementor-widget elementor-widget-text-editor\" data-id=\"4a6a2a27\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>I\u2019ve talked a lot about mocking in this blog. If you are not familiar with it, here\u2019s a brief overview.<\/p><p><strong>Mocks and integration testing for TDD<\/strong><\/p><p>Mocking is essential for isolating the code under test. In short, it prevents your code from calling an existing subfunction and instead returns a dummy \u2013 often with a fixed return value. This is particular helpful, when, for example, dealing with calls to AWS or any other external service that you\u2019re obviously not responsible for maintaining. In such cases, it doesn\u2019t make sense to account for code or tests that you can\u2019t change.<\/p><p>The pytest-mock plugin makes this process more convenient by providing the\u00a0mocker\u00a0fixture. Let\u2019s explore some powerful mocking techniques:<\/p><h5><strong>Basic mocking<\/strong><\/h5>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2f5af8d elementor-widget elementor-widget-code-highlight\" data-id=\"2f5af8d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>def test_user_service(mocker):\r\n    # Mock a database call\r\n    mock_db_query = mocker.patch('services.db.query_user', return_value = {\"id\": 1, \"name\": \"John\"})\r\n    \r\n    from services import get_user_details\r\n    result = get_user_details(1)\r\n    \r\n    assert result[\"name\"] == \"John\"\r\n    mock_db_query.assert_called_once_with(1)<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-89f7d37 elementor-widget elementor-widget-text-editor\" data-id=\"89f7d37\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In this example, we have a function called get_user_details() that we want to test. This function calls another function, query_user(). Since we don\u2019t want to test query_user(), we mock it to prevent an actual database call. By patching a function, we instruct the test suite not to call the existing function, but instead to return a fixed value whenever the patched function is called.<\/p><h5><strong>Controlling mock behavior with side_effect<\/strong><\/h5><p>The side_effect parameter offers more dynamic control than\u00a0return_value:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fc5d7fe elementor-widget elementor-widget-code-highlight\" data-id=\"fc5d7fe\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>def test_retry_mechanism(mocker):\r\n    \r\n    # Mock that raises an exception on first call, succeeds on second\r\n \r\n    mocker.patch('services.external_api.call', side_effect= [ConnectionError(\"Timeout\"), {\"data\": \"success\"}])\r\n    \r\n    from services import fetch_with_retry\r\n    result = fetch_with_retry(\"endpoint\")\r\n    \r\n    assert result == {\"data\": \"success\"}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7902728 elementor-widget elementor-widget-text-editor\" data-id=\"7902728\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>This is also helpful when you need to test a row of responses that are too complex to be put into a simple list.<\/p><h5><strong>Mocking attributes vs return values<\/strong><\/h5><p>Sometimes you need to mock an attribute rather than a return value. In this example, assume that we have a function, initialize(), which instantiates an app object by calling a subfunction, get_config(), which provides certain attributes for our app object. Here, we will mock some of the attributes in our config.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d035e0d elementor-widget elementor-widget-code-highlight\" data-id=\"d035e0d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>def test_configuration(mocker):\r\n    from unittest.mock import MagicMock\r\n    \r\n    config = MagicMock()\r\n    config.DEBUG = True\r\n    config.API_KEY = \"test_key\"\r\n    \r\n    mocker.patch('app.get_config', return_value=config)\r\n    \r\n    from app import initialize\r\n    app = initialize()\r\n    assert app.debug_mode is True<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-42726cc elementor-widget elementor-widget-text-editor\" data-id=\"42726cc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><strong>Mocking class methods<\/strong><\/h5><p>When you need to mock a method in a class, use patch.object:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fb56eb6 elementor-widget elementor-widget-code-highlight\" data-id=\"fb56eb6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>def test_class_method(mocker):\r\n    # If you have a class like:\r\n    # class MyClass:\r\n    #     def my_class_func(self):\r\n    #         return \"real result\"\r\n    \r\n    from my_module import MyClass\r\n    \r\n    # Mock the class method\r\n    mocker.patch.object(MyClass, \"my_class_func\", return_value=\"mocked result\")\r\n    \r\n    # Now any call to MyClass().my_class_func() will return \"mocked result\"\r\n    instance = MyClass()\r\n    assert instance.my_class_func() == \"mocked result\"<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d7289d0 elementor-widget elementor-widget-text-editor\" data-id=\"d7289d0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><strong>Understanding where to patch<\/strong><\/h5><p>One of the trickiest parts of mocking is determining the correct location to patch. The general rule is to\u00a0<strong>patch the function where it\u2019s imported, not where it\u2019s defined<\/strong>.<\/p><p>Consider this example:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a9614ce elementor-widget elementor-widget-code-highlight\" data-id=\"a9614ce\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>modules\/my_func.py:\r\n    def meine_func():\r\n        # Function definition here\r\n        return \"real result\"\r\n\r\nscripts\/other_func.py:\r\n    from modules.my_func import meine_func\r\n    \r\n    def random_func():\r\n        var = 2\r\n        return meine_func(var)<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f79f32a elementor-widget elementor-widget-text-editor\" data-id=\"f79f32a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If you want to mock meine_func when it\u2019s called from within random_func, you need to patch it at the import location:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-974ce4e elementor-widget elementor-widget-code-highlight\" data-id=\"974ce4e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>def test_meine_func(mocker):\r\n    # Patch where the function is imported\r\n    mock_func = mocker.patch(\"scripts.other_func.meine_func\", return_value=\"mocked result\")\r\n    \r\n    from scripts.other_func import random_func\r\n    result = random_func()\r\n    \r\n    assert result == \"mocked result\"\r\n    mock_func.assert_called_once_with(2)<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-773f97d elementor-widget elementor-widget-text-editor\" data-id=\"773f97d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><strong>Inspecting mock calls<\/strong><\/h5><p>To check how your mocks were called, you can inspect the\u00a0mock_calls\u00a0attribute:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-64705c4 elementor-widget elementor-widget-code-highlight\" data-id=\"64705c4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>def test_check_calls(mocker):\r\n    mock_service = mocker.patch(\"my_module.service_client.update\")\r\n    \r\n    # Run the function that should call the service\r\n    from my_module import update_user\r\n    update_user(user_id=123, name=\"Alice\")\r\n    \r\n    # Check that the mock was called correctly\r\n    assert mock_service.call_count == 1\r\n    mock_service.assert_called_once_with(user_id=123, name=\"Alice\")\r\n    \r\n    # For more detailed inspection\r\n    print(mock_service.mock_calls)  # Shows all calls with arguments<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-150c4a9 elementor-widget elementor-widget-text-editor\" data-id=\"150c4a9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The mock_calls attribute provides you with a list of all calls made to your mock, including their arguments. This is invaluable for verifying that your code interacts correctly with its dependencies.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b412e7 elementor-widget elementor-widget-heading\" data-id=\"4b412e7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Conclusion: The test-driven mindset<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-466fdf5 elementor-widget elementor-widget-text-editor\" data-id=\"466fdf5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Test-driven development is not just a technique \u2013 it\u2019s a shift in mindset that changes how you approach software development. By focusing on expected outcomes first, you gain clarity about what you\u2019re building and why.<\/p><p>The initial investment of time spent writing tests pays dividends in the form of faster debugging, more confident refactoring, and a deeper understanding of your system. When combined with strategic mocking and well-scoped integration tests, TDD creates a development workflow that\u2019s not only more reliable, but often more enjoyable as well.<\/p><p>So the next time you\u2019re about to dive into coding, consider taking a step back and asking: \u201cWhat test would prove that my solution works?\u201d Your future self will thank you when the test suite catches an issue before it ever reaches production.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-389befc0 e-flex e-con-boxed e-con e-parent\" data-id=\"389befc0\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3f127056 elementor-hidden-desktop elementor-widget elementor-widget-heading\" data-id=\"3f127056\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Case Stories<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-40aa3174 elementor-arrows-position-inside elementor-widget elementor-widget-loop-carousel\" data-id=\"40aa3174\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;template_id&quot;:57266,&quot;slides_to_show&quot;:&quot;1&quot;,&quot;speed&quot;:800,&quot;_skin&quot;:&quot;post&quot;,&quot;slides_to_show_tablet&quot;:&quot;2&quot;,&quot;slides_to_show_mobile&quot;:&quot;1&quot;,&quot;slides_to_scroll&quot;:&quot;1&quot;,&quot;edit_handle_selector&quot;:&quot;.elementor-loop-container&quot;,&quot;arrows&quot;:&quot;yes&quot;,&quot;image_spacing_custom&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]},&quot;image_spacing_custom_tablet_extra&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;image_spacing_custom_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;image_spacing_custom_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"loop-carousel.post\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"swiper elementor-loop-container elementor-grid\" role=\"list\" dir=\"ltr\">\n\t\t\t\t<div class=\"swiper-wrapper\" aria-live=\"polite\">\n\t\t<style id=\"loop-57266\">.elementor-57266 .elementor-element.elementor-element-55762ecb{--display:flex;--min-height:550px;--flex-direction:row;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--align-items:stretch;--gap:0px 0px;--row-gap:0px;--column-gap:0px;--overflow:hidden;--margin-top:0%;--margin-bottom:0%;--margin-left:0%;--margin-right:0%;--padding-top:0rem;--padding-bottom:0rem;--padding-left:0rem;--padding-right:0rem;}.elementor-57266 .elementor-element.elementor-element-534ce23f{--display:flex;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-widget-image .widget-image-caption{color:var( --e-global-color-text );font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-size:var( --e-global-typography-text-font-size );font-weight:var( --e-global-typography-text-font-weight );text-decoration:var( --e-global-typography-text-text-decoration );line-height:var( --e-global-typography-text-line-height );}.elementor-57266 .elementor-element.elementor-element-a274def img{width:100%;max-width:100%;height:100%;object-fit:cover;object-position:center center;}.elementor-57266 .elementor-element.elementor-element-a274def.elementor-element{--align-self:stretch;--flex-grow:1;--flex-shrink:0;}.elementor-57266 .elementor-element.elementor-element-373b26ac{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;--justify-content:center;--gap:0px 0px;--row-gap:0px;--column-gap:0px;}.elementor-57266 .elementor-element.elementor-element-373b26ac.e-con{--align-self:center;}.elementor-57266 .elementor-element.elementor-element-0fe0875{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;--justify-content:center;--gap:0px 0px;--row-gap:0px;--column-gap:0px;}.elementor-57266 .elementor-element.elementor-element-0fe0875.e-con{--align-self:center;}.elementor-widget-text-editor{font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-size:var( --e-global-typography-text-font-size );font-weight:var( --e-global-typography-text-font-weight );text-decoration:var( --e-global-typography-text-text-decoration );line-height:var( --e-global-typography-text-line-height );color:var( --e-global-color-text );}.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:var( --e-global-color-primary );}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap, .elementor-widget-text-editor.elementor-drop-cap-view-default .elementor-drop-cap{color:var( --e-global-color-primary );border-color:var( --e-global-color-primary );}.elementor-57266 .elementor-element.elementor-element-66b75a3{font-family:var( --e-global-typography-019d6db-font-family ), Sans-serif;font-size:var( --e-global-typography-019d6db-font-size );font-weight:var( --e-global-typography-019d6db-font-weight );text-decoration:var( --e-global-typography-019d6db-text-decoration );line-height:var( --e-global-typography-019d6db-line-height );letter-spacing:var( --e-global-typography-019d6db-letter-spacing );word-spacing:var( --e-global-typography-019d6db-word-spacing );color:var( --e-global-color-c37e4b1 );}.elementor-widget-heading .elementor-heading-title{font-family:var( --e-global-typography-primary-font-family ), Sans-serif;font-weight:var( --e-global-typography-primary-font-weight );color:var( --e-global-color-primary );}.elementor-57266 .elementor-element.elementor-element-b58affb .elementor-heading-title{font-family:var( --e-global-typography-849cb99-font-family ), Sans-serif;font-size:var( --e-global-typography-849cb99-font-size );font-weight:var( --e-global-typography-849cb99-font-weight );text-decoration:var( --e-global-typography-849cb99-text-decoration );line-height:var( --e-global-typography-849cb99-line-height );letter-spacing:var( --e-global-typography-849cb99-letter-spacing );word-spacing:var( --e-global-typography-849cb99-word-spacing );color:var( --e-global-color-text );}.elementor-57266 .elementor-element.elementor-element-b58affb > .elementor-widget-container{margin:0em 0em 3em 0em;}.elementor-57266 .elementor-element.elementor-element-29d94ff{font-family:var( --e-global-typography-9ae4c6f-font-family ), Sans-serif;font-size:var( --e-global-typography-9ae4c6f-font-size );font-weight:var( --e-global-typography-9ae4c6f-font-weight );text-decoration:var( --e-global-typography-9ae4c6f-text-decoration );line-height:var( --e-global-typography-9ae4c6f-line-height );letter-spacing:var( --e-global-typography-9ae4c6f-letter-spacing );word-spacing:var( --e-global-typography-9ae4c6f-word-spacing );}.elementor-57266 .elementor-element.elementor-element-29d94ff > .elementor-widget-container{margin:0em 0em 2em 0em;}.elementor-widget-button .elementor-button{font-family:var( --e-global-typography-accent-font-family ), Sans-serif;font-size:var( --e-global-typography-accent-font-size );font-weight:var( --e-global-typography-accent-font-weight );line-height:var( --e-global-typography-accent-line-height );background-color:var( --e-global-color-accent );}.elementor-57266 .elementor-element.elementor-element-79b359c .elementor-button-content-wrapper{flex-direction:row-reverse;}.elementor-57266 .elementor-element.elementor-element-79b359c .elementor-button .elementor-button-content-wrapper{gap:10px;}.elementor-57266 .elementor-element.elementor-element-79b359c .elementor-button{fill:var( --e-global-color-599c03e );color:var( --e-global-color-599c03e );background-color:var( --e-global-color-primary );border-radius:8px 8px 8px 8px;}.elementor-57266 .elementor-element.elementor-element-79b359c .elementor-button:hover, .elementor-57266 .elementor-element.elementor-element-79b359c .elementor-button:focus{background-color:var( --e-global-color-75b740e );}@media(min-width:577px){.elementor-57266 .elementor-element.elementor-element-534ce23f{--width:50%;}.elementor-57266 .elementor-element.elementor-element-373b26ac{--width:8.33333%;}.elementor-57266 .elementor-element.elementor-element-0fe0875{--width:33.333333%;}}@media(max-width:992px) and (min-width:577px){.elementor-57266 .elementor-element.elementor-element-534ce23f{--width:100%;}.elementor-57266 .elementor-element.elementor-element-373b26ac{--width:100%;}.elementor-57266 .elementor-element.elementor-element-0fe0875{--width:100%;}}@media(max-width:992px){.elementor-57266 .elementor-element.elementor-element-55762ecb{--min-height:0px;--flex-wrap:wrap;}.elementor-57266 .elementor-element.elementor-element-534ce23f{--min-height:280px;}.elementor-widget-image .widget-image-caption{font-size:var( --e-global-typography-text-font-size );line-height:var( --e-global-typography-text-line-height );}.elementor-57266 .elementor-element.elementor-element-0fe0875{--padding-top:30px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-widget-text-editor{font-size:var( --e-global-typography-text-font-size );line-height:var( --e-global-typography-text-line-height );}.elementor-57266 .elementor-element.elementor-element-66b75a3{font-size:var( --e-global-typography-019d6db-font-size );line-height:var( --e-global-typography-019d6db-line-height );letter-spacing:var( --e-global-typography-019d6db-letter-spacing );word-spacing:var( --e-global-typography-019d6db-word-spacing );}.elementor-57266 .elementor-element.elementor-element-b58affb .elementor-heading-title{font-size:var( --e-global-typography-849cb99-font-size );line-height:var( --e-global-typography-849cb99-line-height );letter-spacing:var( --e-global-typography-849cb99-letter-spacing );word-spacing:var( --e-global-typography-849cb99-word-spacing );}.elementor-57266 .elementor-element.elementor-element-29d94ff{font-size:var( --e-global-typography-9ae4c6f-font-size );line-height:var( --e-global-typography-9ae4c6f-line-height );letter-spacing:var( --e-global-typography-9ae4c6f-letter-spacing );word-spacing:var( --e-global-typography-9ae4c6f-word-spacing );}.elementor-widget-button .elementor-button{font-size:var( --e-global-typography-accent-font-size );line-height:var( --e-global-typography-accent-line-height );}}@media(max-width:576px){.elementor-57266 .elementor-element.elementor-element-534ce23f{--min-height:210px;}.elementor-widget-image .widget-image-caption{font-size:var( --e-global-typography-text-font-size );line-height:var( --e-global-typography-text-line-height );}.elementor-57266 .elementor-element.elementor-element-373b26ac{--padding-top:12%;--padding-bottom:12%;--padding-left:7%;--padding-right:7%;}.elementor-57266 .elementor-element.elementor-element-0fe0875{--padding-top:30px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-widget-text-editor{font-size:var( --e-global-typography-text-font-size );line-height:var( --e-global-typography-text-line-height );}.elementor-57266 .elementor-element.elementor-element-66b75a3{font-size:var( --e-global-typography-019d6db-font-size );line-height:var( --e-global-typography-019d6db-line-height );letter-spacing:var( --e-global-typography-019d6db-letter-spacing );word-spacing:var( --e-global-typography-019d6db-word-spacing );}.elementor-57266 .elementor-element.elementor-element-b58affb .elementor-heading-title{font-size:var( --e-global-typography-849cb99-font-size );line-height:var( --e-global-typography-849cb99-line-height );letter-spacing:var( --e-global-typography-849cb99-letter-spacing );word-spacing:var( --e-global-typography-849cb99-word-spacing );}.elementor-57266 .elementor-element.elementor-element-29d94ff{font-size:var( --e-global-typography-9ae4c6f-font-size );line-height:var( --e-global-typography-9ae4c6f-line-height );letter-spacing:var( --e-global-typography-9ae4c6f-letter-spacing );word-spacing:var( --e-global-typography-9ae4c6f-word-spacing );}.elementor-widget-button .elementor-button{font-size:var( --e-global-typography-accent-font-size );line-height:var( --e-global-typography-accent-line-height );}}<\/style>\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"57266\" class=\"elementor elementor-57266 swiper-slide e-loop-item e-loop-item-94749 post-94749 post type-post status-publish format-standard has-post-thumbnail hentry category-blog tag-ai-ml-2 tag-aws\" data-elementor-post-type=\"elementor_library\" role=\"group\" aria-roledescription=\"slide\" data-custom-edit-handle=\"1\">\n\t\t\t<div class=\"elementor-element elementor-element-55762ecb e-flex e-con-boxed e-con e-parent\" data-id=\"55762ecb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-534ce23f e-con-full e-flex e-con e-child\" data-id=\"534ce23f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a274def elementor-widget elementor-widget-image\" data-id=\"a274def\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"534\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/10\/MG_5471.jpg\" class=\"attachment-large size-large wp-image-94758\" alt=\"Mann sitzt an einem Schreibtisch vor einem Monitor in einem Hochhaus-B\u00fcro mit Stadtblick, neben einer Gr\u00fcnpflanze\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/10\/MG_5471.jpg 886w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/10\/MG_5471-300x200.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/10\/MG_5471-768x512.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-373b26ac e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child\" data-id=\"373b26ac\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0fe0875 e-con-full e-flex e-con e-child\" data-id=\"0fe0875\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66b75a3 elementor-widget elementor-widget-text-editor\" data-id=\"66b75a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tBlog\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b58affb elementor-widget elementor-widget-heading\" data-id=\"b58affb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Bedrock Agents Classic, AgentCore, and Mantle: What\u2019s the Difference?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29d94ff elementor-widget elementor-widget-text-editor\" data-id=\"29d94ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tLearn how Amazon Bedrock AgentCore differs from Agents Classic and Bedrock Mantle, and what the migration means for agent architecture and AI inference.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79b359c elementor-widget elementor-widget-button\" data-id=\"79b359c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.skaylink.com\/en\/insights\/blog\/bedrock-agents-classic-agentcore-mantle-difference\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"skaylinkicon- skaylink-icon-arrow\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Read more<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"57266\" class=\"elementor elementor-57266 swiper-slide e-loop-item e-loop-item-94821 post-94821 post type-post status-publish format-standard has-post-thumbnail hentry category-blog tag-microsoft tag-modern-work\" data-elementor-post-type=\"elementor_library\" role=\"group\" aria-roledescription=\"slide\" data-custom-edit-handle=\"1\">\n\t\t\t<div class=\"elementor-element elementor-element-55762ecb e-flex e-con-boxed e-con e-parent\" data-id=\"55762ecb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-534ce23f e-con-full e-flex e-con e-child\" data-id=\"534ce23f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a274def elementor-widget elementor-widget-image\" data-id=\"a274def\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"534\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/06\/MG_8223-1024x683.jpg\" class=\"attachment-large size-large wp-image-86615\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/06\/MG_8223-1024x683.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/06\/MG_8223-300x200.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/06\/MG_8223-768x512.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/06\/MG_8223-1536x1024.jpg 1536w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/06\/MG_8223-2048x1365.jpg 2048w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-373b26ac e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child\" data-id=\"373b26ac\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0fe0875 e-con-full e-flex e-con e-child\" data-id=\"0fe0875\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66b75a3 elementor-widget elementor-widget-text-editor\" data-id=\"66b75a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tBlog\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b58affb elementor-widget elementor-widget-heading\" data-id=\"b58affb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Creating Intranet 2.0<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29d94ff elementor-widget elementor-widget-text-editor\" data-id=\"29d94ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tIntranet 2.0 \u2013 a modern, structured, and future-proof platform\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79b359c elementor-widget elementor-widget-button\" data-id=\"79b359c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.skaylink.com\/en\/insights\/blog\/creating-the-intranet-2-0\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"skaylinkicon- skaylink-icon-arrow\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Read more<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"57266\" class=\"elementor elementor-57266 swiper-slide e-loop-item e-loop-item-94642 post-94642 post type-post status-publish format-standard has-post-thumbnail hentry category-blog tag-microsoft\" data-elementor-post-type=\"elementor_library\" role=\"group\" aria-roledescription=\"slide\" data-custom-edit-handle=\"1\">\n\t\t\t<div class=\"elementor-element elementor-element-55762ecb e-flex e-con-boxed e-con e-parent\" data-id=\"55762ecb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-534ce23f e-con-full e-flex e-con e-child\" data-id=\"534ce23f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a274def elementor-widget elementor-widget-image\" data-id=\"a274def\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"546\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/08\/Multi-Tenant-1024x699.jpg\" class=\"attachment-large size-large wp-image-88910\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/08\/Multi-Tenant-1024x699.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/08\/Multi-Tenant-300x205.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/08\/Multi-Tenant-768x524.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/08\/Multi-Tenant.jpg 1366w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-373b26ac e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child\" data-id=\"373b26ac\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0fe0875 e-con-full e-flex e-con e-child\" data-id=\"0fe0875\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66b75a3 elementor-widget elementor-widget-text-editor\" data-id=\"66b75a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tBlog\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b58affb elementor-widget elementor-widget-heading\" data-id=\"b58affb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">What is a multi-tenant organization (MTO)?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29d94ff elementor-widget elementor-widget-text-editor\" data-id=\"29d94ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tLearn how MTOs in Microsoft\u00a0365 enable seamless collaboration across tenants.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79b359c elementor-widget elementor-widget-button\" data-id=\"79b359c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.skaylink.com\/en\/insights\/blog\/what-is-a-multi-tenant-organization-mto\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"skaylinkicon- skaylink-icon-arrow\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Read more<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"57266\" class=\"elementor elementor-57266 swiper-slide e-loop-item e-loop-item-94784 post-94784 post type-post status-publish format-standard has-post-thumbnail hentry category-blog tag-microsoft tag-security\" data-elementor-post-type=\"elementor_library\" role=\"group\" aria-roledescription=\"slide\" data-custom-edit-handle=\"1\">\n\t\t\t<div class=\"elementor-element elementor-element-55762ecb e-flex e-con-boxed e-con e-parent\" data-id=\"55762ecb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-534ce23f e-con-full e-flex e-con e-child\" data-id=\"534ce23f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a274def elementor-widget elementor-widget-image\" data-id=\"a274def\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"546\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/10\/Teams-Spear-Vishing-1024x699.jpg\" class=\"attachment-large size-large wp-image-94792\" alt=\"Mann mit Kopfh\u00f6rern sitzt an einem Schreibtisch vor einem Laptop und arbeitet konzentriert in einem B\u00fcro mit Pflanzen im Hintergrund\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/10\/Teams-Spear-Vishing-1024x699.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/10\/Teams-Spear-Vishing-300x205.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/10\/Teams-Spear-Vishing-768x524.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/10\/Teams-Spear-Vishing.jpg 1366w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-373b26ac e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child\" data-id=\"373b26ac\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0fe0875 e-con-full e-flex e-con e-child\" data-id=\"0fe0875\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66b75a3 elementor-widget elementor-widget-text-editor\" data-id=\"66b75a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tBlog\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b58affb elementor-widget elementor-widget-heading\" data-id=\"b58affb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">AI-Powered Teams Spear-Vishing<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29d94ff elementor-widget elementor-widget-text-editor\" data-id=\"29d94ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tAI voice cloning turns Microsoft Teams into an attack channel. Discover why revoking sessions may not stop remote access and what defenders need to know.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79b359c elementor-widget elementor-widget-button\" data-id=\"79b359c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.skaylink.com\/en\/insights\/blog\/ai-powered-teams-spear-vishing\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"skaylinkicon- skaylink-icon-arrow\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Read more<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"57266\" class=\"elementor elementor-57266 swiper-slide e-loop-item e-loop-item-94763 post-94763 post type-post status-publish format-standard has-post-thumbnail hentry category-blog tag-ai-ml-2 tag-aws\" data-elementor-post-type=\"elementor_library\" role=\"group\" aria-roledescription=\"slide\" data-custom-edit-handle=\"1\">\n\t\t\t<div class=\"elementor-element elementor-element-55762ecb e-flex e-con-boxed e-con e-parent\" data-id=\"55762ecb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-534ce23f e-con-full e-flex e-con e-child\" data-id=\"534ce23f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a274def elementor-widget elementor-widget-image\" data-id=\"a274def\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"534\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/10\/MG_4866-johanna-lohr-fotografie-skaylink-1024x683.jpg\" class=\"attachment-large size-large wp-image-94772\" alt=\"Frau sitzt an einem Schreibtisch in einem B\u00fcro mit Blick auf die Stadt, arbeitet an einer Tastatur, auf dem Tisch liegen ein Laptop, Kopfh\u00f6rer und eine Pflanze\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/10\/MG_4866-johanna-lohr-fotografie-skaylink-1024x683.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/10\/MG_4866-johanna-lohr-fotografie-skaylink-300x200.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/10\/MG_4866-johanna-lohr-fotografie-skaylink-768x512.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/10\/MG_4866-johanna-lohr-fotografie-skaylink-1536x1024.jpg 1536w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/10\/MG_4866-johanna-lohr-fotografie-skaylink-2048x1365.jpg 2048w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-373b26ac e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child\" data-id=\"373b26ac\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0fe0875 e-con-full e-flex e-con e-child\" data-id=\"0fe0875\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66b75a3 elementor-widget elementor-widget-text-editor\" data-id=\"66b75a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tBlog\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b58affb elementor-widget elementor-widget-heading\" data-id=\"b58affb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Getting started with AWS AgentCore<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29d94ff elementor-widget elementor-widget-text-editor\" data-id=\"29d94ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tLearn how to develop, deploy, and test a scalable AI agent using AWS AgentCore and Terraform.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79b359c elementor-widget elementor-widget-button\" data-id=\"79b359c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.skaylink.com\/en\/insights\/blog\/getting-started-with-aws-agentcore\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"skaylinkicon- skaylink-icon-arrow\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Read more<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"57266\" class=\"elementor elementor-57266 swiper-slide e-loop-item e-loop-item-94452 post-94452 post type-post status-publish format-standard has-post-thumbnail hentry category-blog\" data-elementor-post-type=\"elementor_library\" role=\"group\" aria-roledescription=\"slide\" data-custom-edit-handle=\"1\">\n\t\t\t<div class=\"elementor-element elementor-element-55762ecb e-flex e-con-boxed e-con e-parent\" data-id=\"55762ecb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-534ce23f e-con-full e-flex e-con e-child\" data-id=\"534ce23f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a274def elementor-widget elementor-widget-image\" data-id=\"a274def\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"533\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/09\/MG_6017-johanna-lohr-fotografie-skaylink-1024x682.jpg\" class=\"attachment-large size-large wp-image-94500\" alt=\"Ein Skaylink-Mitarbeiter in beigem Poloshirt spricht zu einem Kollegen in einem B\u00fcro mit mehreren Computerbildschirmen\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/09\/MG_6017-johanna-lohr-fotografie-skaylink-1024x682.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/09\/MG_6017-johanna-lohr-fotografie-skaylink-300x200.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/09\/MG_6017-johanna-lohr-fotografie-skaylink-768x512.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/09\/MG_6017-johanna-lohr-fotografie-skaylink-1536x1024.jpg 1536w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/09\/MG_6017-johanna-lohr-fotografie-skaylink.jpg 2000w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-373b26ac e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child\" data-id=\"373b26ac\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0fe0875 e-con-full e-flex e-con e-child\" data-id=\"0fe0875\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66b75a3 elementor-widget elementor-widget-text-editor\" data-id=\"66b75a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tBlog\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b58affb elementor-widget elementor-widget-heading\" data-id=\"b58affb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">How to Switch Claude Code &#038; Cowork from Anthropic to Amazon Bedrock with EU Data Residency<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29d94ff elementor-widget elementor-widget-text-editor\" data-id=\"29d94ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tThis guide explains how to migrate Claude Code and Cowork from Anthropic to Amazon Bedrock while enforcing EU data residency through AWS security guardrails.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79b359c elementor-widget elementor-widget-button\" data-id=\"79b359c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.skaylink.com\/en\/insights\/blog\/claude-code-cowork-anthropic-to-amazon-bedrock\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"skaylinkicon- skaylink-icon-arrow\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Read more<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"57266\" class=\"elementor elementor-57266 swiper-slide e-loop-item e-loop-item-94304 post-94304 post type-post status-publish format-standard has-post-thumbnail hentry category-blog\" data-elementor-post-type=\"elementor_library\" role=\"group\" aria-roledescription=\"slide\" data-custom-edit-handle=\"1\">\n\t\t\t<div class=\"elementor-element elementor-element-55762ecb e-flex e-con-boxed e-con e-parent\" data-id=\"55762ecb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-534ce23f e-con-full e-flex e-con e-child\" data-id=\"534ce23f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a274def elementor-widget elementor-widget-image\" data-id=\"a274def\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"546\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/03\/zertifikate-blog-1024x699.jpg\" class=\"attachment-large size-large wp-image-91917\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/03\/zertifikate-blog-1024x699.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/03\/zertifikate-blog-300x205.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/03\/zertifikate-blog-768x524.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/03\/zertifikate-blog.jpg 1366w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-373b26ac e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child\" data-id=\"373b26ac\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0fe0875 e-con-full e-flex e-con e-child\" data-id=\"0fe0875\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66b75a3 elementor-widget elementor-widget-text-editor\" data-id=\"66b75a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tBlog\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b58affb elementor-widget elementor-widget-heading\" data-id=\"b58affb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">An end to certificate chaos<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29d94ff elementor-widget elementor-widget-text-editor\" data-id=\"29d94ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tWhy a Windows-only PKI is not enough, and how automated certificate management with ACME improves security and operations.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79b359c elementor-widget elementor-widget-button\" data-id=\"79b359c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.skaylink.com\/en\/insights\/blog\/an-end-to-certificate-chaos\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"skaylinkicon- skaylink-icon-arrow\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Read more<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"57266\" class=\"elementor elementor-57266 swiper-slide e-loop-item e-loop-item-94288 post-94288 post type-post status-publish format-standard has-post-thumbnail hentry category-blog tag-ai-ml-2\" data-elementor-post-type=\"elementor_library\" role=\"group\" aria-roledescription=\"slide\" data-custom-edit-handle=\"1\">\n\t\t\t<div class=\"elementor-element elementor-element-55762ecb e-flex e-con-boxed e-con e-parent\" data-id=\"55762ecb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-534ce23f e-con-full e-flex e-con e-child\" data-id=\"534ce23f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a274def elementor-widget elementor-widget-image\" data-id=\"a274def\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"534\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/06\/MG_4377-johanna-lohr-fotografie-skaylink-1024x683.jpg\" class=\"attachment-large size-large wp-image-92964\" alt=\"Person arbeitet am Schreibtisch mit Computermaus und Tastatur, Laptop im Hintergrund\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/06\/MG_4377-johanna-lohr-fotografie-skaylink-1024x683.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/06\/MG_4377-johanna-lohr-fotografie-skaylink-300x200.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/06\/MG_4377-johanna-lohr-fotografie-skaylink-768x512.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/06\/MG_4377-johanna-lohr-fotografie-skaylink-1536x1024.jpg 1536w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/06\/MG_4377-johanna-lohr-fotografie-skaylink.jpg 1620w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-373b26ac e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child\" data-id=\"373b26ac\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0fe0875 e-con-full e-flex e-con e-child\" data-id=\"0fe0875\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66b75a3 elementor-widget elementor-widget-text-editor\" data-id=\"66b75a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tBlog\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b58affb elementor-widget elementor-widget-heading\" data-id=\"b58affb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Why just RAG is not enough: How AI makes project knowledge truly usable<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29d94ff elementor-widget elementor-widget-text-editor\" data-id=\"29d94ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tOnly by linking documents, contexts, and workflows can AI become a true decision-making tool for complex projects.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79b359c elementor-widget elementor-widget-button\" data-id=\"79b359c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.skaylink.com\/en\/insights\/blog\/why-just-rag-is-not-enough\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"skaylinkicon- skaylink-icon-arrow\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Read more<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"57266\" class=\"elementor elementor-57266 swiper-slide e-loop-item e-loop-item-93909 post-93909 post type-post status-publish format-standard has-post-thumbnail hentry category-blog tag-ai-ml-2 tag-microsoft\" data-elementor-post-type=\"elementor_library\" role=\"group\" aria-roledescription=\"slide\" data-custom-edit-handle=\"1\">\n\t\t\t<div class=\"elementor-element elementor-element-55762ecb e-flex e-con-boxed e-con e-parent\" data-id=\"55762ecb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-534ce23f e-con-full e-flex e-con e-child\" data-id=\"534ce23f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a274def elementor-widget elementor-widget-image\" data-id=\"a274def\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"534\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/06\/MG_6741-johanna-lohr-fotografie-skaylink-1024x683.jpg\" class=\"attachment-large size-large wp-image-92889\" alt=\"Mehrere Personen sitzen an einem Tisch und schauen auf einen gro\u00dfen Monitor, auf dem ein Mann in schwarzem Hoodie die Skaylink-Website pr\u00e4sentiert\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/06\/MG_6741-johanna-lohr-fotografie-skaylink-1024x683.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/06\/MG_6741-johanna-lohr-fotografie-skaylink-300x200.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/06\/MG_6741-johanna-lohr-fotografie-skaylink-768x512.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/06\/MG_6741-johanna-lohr-fotografie-skaylink-1536x1024.jpg 1536w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/06\/MG_6741-johanna-lohr-fotografie-skaylink.jpg 1620w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-373b26ac e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child\" data-id=\"373b26ac\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0fe0875 e-con-full e-flex e-con e-child\" data-id=\"0fe0875\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66b75a3 elementor-widget elementor-widget-text-editor\" data-id=\"66b75a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tBlog\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b58affb elementor-widget elementor-widget-heading\" data-id=\"b58affb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Microsoft Entra Internet Access: More transparency and control for AI applications<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29d94ff elementor-widget elementor-widget-text-editor\" data-id=\"29d94ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tDetecting, controlling, and securing: How Microsoft Entra Internet Access protects you from shadow AI, prompt injection, and data leaks.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79b359c elementor-widget elementor-widget-button\" data-id=\"79b359c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.skaylink.com\/en\/insights\/blog\/entra-internet-access\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"skaylinkicon- skaylink-icon-arrow\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Read more<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"57266\" class=\"elementor elementor-57266 swiper-slide e-loop-item e-loop-item-94009 post-94009 post type-post status-publish format-standard has-post-thumbnail hentry category-blog tag-aws\" data-elementor-post-type=\"elementor_library\" role=\"group\" aria-roledescription=\"slide\" data-custom-edit-handle=\"1\">\n\t\t\t<div class=\"elementor-element elementor-element-55762ecb e-flex e-con-boxed e-con e-parent\" data-id=\"55762ecb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-534ce23f e-con-full e-flex e-con e-child\" data-id=\"534ce23f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a274def elementor-widget elementor-widget-image\" data-id=\"a274def\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"534\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/08\/MG_6928-johanna-lohr-fotografie-skaylink-1024x683.jpg\" class=\"attachment-large size-large wp-image-94089\" alt=\"Zwei Mitarbeiter von Skaylink sitzen sich an einem Tisch gegen\u00fcber und f\u00fchren ein Gespr\u00e4ch. Auf dem Tisch steht ein Laptop. Im Hintergrund ist das Skaylink-Logo an der Wand zu sehen\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/08\/MG_6928-johanna-lohr-fotografie-skaylink-1024x683.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/08\/MG_6928-johanna-lohr-fotografie-skaylink-300x200.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/08\/MG_6928-johanna-lohr-fotografie-skaylink-768x512.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/08\/MG_6928-johanna-lohr-fotografie-skaylink-1536x1025.jpg 1536w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/08\/MG_6928-johanna-lohr-fotografie-skaylink.jpg 2000w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-373b26ac e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child\" data-id=\"373b26ac\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0fe0875 e-con-full e-flex e-con e-child\" data-id=\"0fe0875\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66b75a3 elementor-widget elementor-widget-text-editor\" data-id=\"66b75a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tBlog\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b58affb elementor-widget elementor-widget-heading\" data-id=\"b58affb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">From legacy applications to future-ready architectures: How Skaylink approaches application modernization<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29d94ff elementor-widget elementor-widget-text-editor\" data-id=\"29d94ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tIdentify the right applications for modernization and build a clear roadmap to measurable business value.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79b359c elementor-widget elementor-widget-button\" data-id=\"79b359c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.skaylink.com\/en\/insights\/blog\/application-modernization\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"skaylinkicon- skaylink-icon-arrow\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Read more<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"57266\" class=\"elementor elementor-57266 swiper-slide e-loop-item e-loop-item-93915 post-93915 post type-post status-publish format-standard has-post-thumbnail hentry category-blog tag-microsoft\" data-elementor-post-type=\"elementor_library\" role=\"group\" aria-roledescription=\"slide\" data-custom-edit-handle=\"1\">\n\t\t\t<div class=\"elementor-element elementor-element-55762ecb e-flex e-con-boxed e-con e-parent\" data-id=\"55762ecb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-534ce23f e-con-full e-flex e-con e-child\" data-id=\"534ce23f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a274def elementor-widget elementor-widget-image\" data-id=\"a274def\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"546\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/08\/ISG_MS_Ecosystem_26-1024x699.jpg\" class=\"attachment-large size-large wp-image-93837\" alt=\"Drei Personen in einem B\u00fcro bei einer Besprechung: Ein Mann in beigem Skaylink-Poloshirt und ein j\u00fcngerer Mann in schwarzem Hoodie sitzen sich an einem Tisch gegen\u00fcber, w\u00e4hrend eine weitere Person im Vordergrund zu sehen ist. Laptops sind auf dem Tisch sichtbar, gro\u00dfe Fenster im Hintergrund\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/08\/ISG_MS_Ecosystem_26-1024x699.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/08\/ISG_MS_Ecosystem_26-300x205.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/08\/ISG_MS_Ecosystem_26-768x524.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/08\/ISG_MS_Ecosystem_26.jpg 1366w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-373b26ac e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child\" data-id=\"373b26ac\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0fe0875 e-con-full e-flex e-con e-child\" data-id=\"0fe0875\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66b75a3 elementor-widget elementor-widget-text-editor\" data-id=\"66b75a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tBlog\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b58affb elementor-widget elementor-widget-heading\" data-id=\"b58affb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">ISG Microsoft Ecosystem Leader 2026<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29d94ff elementor-widget elementor-widget-text-editor\" data-id=\"29d94ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tFor the fifth consecutive year, Skaylink has been recognized by ISG as a Leader in the Microsoft Ecosystem quadrant. Download the report here.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79b359c elementor-widget elementor-widget-button\" data-id=\"79b359c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.skaylink.com\/en\/insights\/blog\/isg-microsoft-ecosystem-leader-2026\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"skaylinkicon- skaylink-icon-arrow\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Read more<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"57266\" class=\"elementor elementor-57266 swiper-slide e-loop-item e-loop-item-93896 post-93896 post type-post status-publish format-standard has-post-thumbnail hentry category-case-studies tag-ai-ml-2 tag-microsoft\" data-elementor-post-type=\"elementor_library\" role=\"group\" aria-roledescription=\"slide\" data-custom-edit-handle=\"1\">\n\t\t\t<div class=\"elementor-element elementor-element-55762ecb e-flex e-con-boxed e-con e-parent\" data-id=\"55762ecb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-534ce23f e-con-full e-flex e-con e-child\" data-id=\"534ce23f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a274def elementor-widget elementor-widget-image\" data-id=\"a274def\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"546\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/07\/schulke_Skaylink-1024x699.jpg\" class=\"attachment-large size-large wp-image-93658\" alt=\"Teammeeting in einem B\u00fcro mit orangefarbener Wand: Eine Frau in schwarzem Shirt mit Skaylink-Logo sitzt am Tisch, im Hintergrund zwei Personen an einem digitalen Whiteboard mit Notizen\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/07\/schulke_Skaylink-1024x699.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/07\/schulke_Skaylink-300x205.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/07\/schulke_Skaylink-768x524.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/07\/schulke_Skaylink.jpg 1366w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-373b26ac e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child\" data-id=\"373b26ac\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0fe0875 e-con-full e-flex e-con e-child\" data-id=\"0fe0875\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66b75a3 elementor-widget elementor-widget-text-editor\" data-id=\"66b75a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tCase studies\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b58affb elementor-widget elementor-widget-heading\" data-id=\"b58affb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">How sch\u00fclke has successfully implemented Microsoft\u00a0365\u00a0Copilot in their company<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29d94ff elementor-widget elementor-widget-text-editor\" data-id=\"29d94ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tUsing a structured pilot project and a clear change management strategy, sch\u00fclke has successfully implemented Microsoft\u00a0365\u00a0Copilot and created the foundation for company-wide use of AI\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79b359c elementor-widget elementor-widget-button\" data-id=\"79b359c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.skaylink.com\/en\/case-studies\/how-schuelke-has-successfully-implemented-microsoft-365-copilot-in-their-company\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"skaylinkicon- skaylink-icon-arrow\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Read more<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-swiper-button elementor-swiper-button-prev\" role=\"button\" tabindex=\"0\" aria-label=\"Previous\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"skaylinkicon- skaylink-icon-arrow-circle-left\"><\/i>\t\t\t<\/div>\n\t\t\t<div class=\"elementor-swiper-button elementor-swiper-button-next\" role=\"button\" tabindex=\"0\" aria-label=\"Next\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"skaylinkicon- skaylink-icon-arrow-circle-right\"><\/i>\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Discover how Test-Driven Development (TDD) can transform your approach to building software.<\/p>\n","protected":false},"author":23,"featured_media":89816,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[100],"tags":[168],"class_list":["post-89807","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-aws"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.skaylink.com\/en\/wp-json\/wp\/v2\/posts\/89807","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skaylink.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skaylink.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skaylink.com\/en\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skaylink.com\/en\/wp-json\/wp\/v2\/comments?post=89807"}],"version-history":[{"count":9,"href":"https:\/\/www.skaylink.com\/en\/wp-json\/wp\/v2\/posts\/89807\/revisions"}],"predecessor-version":[{"id":89958,"href":"https:\/\/www.skaylink.com\/en\/wp-json\/wp\/v2\/posts\/89807\/revisions\/89958"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.skaylink.com\/en\/wp-json\/wp\/v2\/media\/89816"}],"wp:attachment":[{"href":"https:\/\/www.skaylink.com\/en\/wp-json\/wp\/v2\/media?parent=89807"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skaylink.com\/en\/wp-json\/wp\/v2\/categories?post=89807"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skaylink.com\/en\/wp-json\/wp\/v2\/tags?post=89807"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}