{"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 fetchpriority=\"high\" 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-92161 post-92161 post type-post status-publish format-standard has-post-thumbnail hentry category-case-studies 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\/03\/MG_5973-johanna-lohr-fotografie-skaylink-1024x683.jpg\" class=\"attachment-large size-large wp-image-92171\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/03\/MG_5973-johanna-lohr-fotografie-skaylink-1024x683.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/03\/MG_5973-johanna-lohr-fotografie-skaylink-300x200.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/03\/MG_5973-johanna-lohr-fotografie-skaylink-768x512.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/03\/MG_5973-johanna-lohr-fotografie-skaylink-1536x1024.jpg 1536w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/03\/MG_5973-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\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\">Hotel software provider ibelsa achieves better scalability and enhanced security with Skaylink on AWS<\/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 hotel property management system ibelsa gained better scalability, lower costs, and improved security.\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\/ibelsa\/\">\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-92224 post-92224 post type-post status-publish format-standard has-post-thumbnail hentry category-case-studies 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=\"533\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/02\/STABILO_Produktion_BOSS-ORIGINAL-1-1024x682.jpg\" class=\"attachment-large size-large wp-image-91644\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/02\/STABILO_Produktion_BOSS-ORIGINAL-1-1024x682.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/02\/STABILO_Produktion_BOSS-ORIGINAL-1-300x200.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/02\/STABILO_Produktion_BOSS-ORIGINAL-1-768x512.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/02\/STABILO_Produktion_BOSS-ORIGINAL-1-1536x1024.jpg 1536w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/02\/STABILO_Produktion_BOSS-ORIGINAL-1.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\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\">Professional backup for your IT security<\/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\tSTABILO relies on Skaylink\u2019s Cyber Security Center \u2013 a Managed SOC solution that provides reliable 24\/7\u00a0protection for cloud infrastructure.\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\/stabilo\/\">\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-92006 post-92006 post type-post status-publish format-standard has-post-thumbnail hentry category-case-studies 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 loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"546\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/02\/StWN-Konzern-1024x699.jpg\" class=\"attachment-large size-large wp-image-91712\" alt=\"(\u00a9 StWN, Claus Felix\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/02\/StWN-Konzern-1024x699.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/02\/StWN-Konzern-300x205.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/02\/StWN-Konzern-768x524.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/02\/StWN-Konzern.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\">The StWN Group focuses on users: That\u2019s what modern work is all about!<\/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\tSkaylink helped the municipal utility St\u00e4dtische Werke N\u00fcrnberg (StWN) along its way towards creating a state-of-the-art, highly secure work environment.\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\/user-centricity-stwn-group\/\">\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-91490 post-91490 post type-post status-publish format-standard has-post-thumbnail hentry category-case-studies tag-microsoft tag-modern-work 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 loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"546\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/swiss_life_case_studies-1024x699.jpg\" class=\"attachment-large size-large wp-image-91031\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/swiss_life_case_studies-1024x699.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/swiss_life_case_studies-300x205.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/swiss_life_case_studies-768x524.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/swiss_life_case_studies.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\">Swiss Life Germany<\/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\tSkaylink migrated 6,000\u00a0advisors to a central communication platform for Swiss Life Germany in record time\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\/swiss-life-germany\/\">\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-91331 post-91331 post type-post status-publish format-standard has-post-thumbnail hentry category-blog tag-aws tag-sovereignty-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 loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"533\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/MG_4374-1024x682.jpg\" class=\"attachment-large size-large wp-image-91334\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/MG_4374-1024x682.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/MG_4374-300x200.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/MG_4374-768x512.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/MG_4374.jpg 1343w\" 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\">AWS European Sovereign Cloud explained: architecture, governance and use cases<\/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\tHow European organizations meet strict regulatory requirements while staying innovative.\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\/aws-european-sovereign-cloud-explained\/\">\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-91377 post-91377 post type-post status-publish format-standard has-post-thumbnail hentry category-white-papers\" 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 loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"546\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/ISG-Multi-Public-Cloud-2025-1024x699.jpg\" class=\"attachment-large size-large wp-image-91131\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/ISG-Multi-Public-Cloud-2025-1024x699.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/ISG-Multi-Public-Cloud-2025-300x205.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/ISG-Multi-Public-Cloud-2025-768x524.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/ISG-Multi-Public-Cloud-2025.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\tWhite papers\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 Multi Public Cloud Leader 2025<\/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\tAnalyst firm ISG has positioned Skaylink in the Leaders quadrant for Multi Public Cloud Services. 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\/white-papers\/isg-multi-public-cloud-leader-2025\/\">\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-91253 post-91253 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 loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"400\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/Matt-stage-RIV2024-1024x512.jpg\" class=\"attachment-large size-large wp-image-91234\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/Matt-stage-RIV2024-1024x512.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/Matt-stage-RIV2024-300x150.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/Matt-stage-RIV2024-768x384.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/Matt-stage-RIV2024-1536x768.jpg 1536w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/Matt-stage-RIV2024.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\">AWS re:Invent 2025: New momentum for FinOps and cost management in AWS<\/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\tAWS re:Invent 2025 shows the next leap in FinOps maturity: operational cost control, AI-powered analytics, forecasts, savings plans, &amp; automation for sustainable cloud management.\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\/finops-cost-management-aws\/\">\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-91101 post-91101 post type-post status-publish format-standard has-post-thumbnail hentry category-press tag-aws tag-sovereignty-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 loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"533\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/MG_6023-1024x682.jpg\" class=\"attachment-large size-large wp-image-91118\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/MG_6023-1024x682.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/MG_6023-300x200.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/MG_6023-768x512.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2026\/01\/MG_6023.jpg 1532w\" 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\tPress\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\">Skaylink collaborates with AWS to deploy Sovereign Cloud Solutions on AWS European Sovereign Cloud<\/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\tWith the launch of the AWS European Sovereign Cloud, Skaylink supports European organizations in adopting sovereign cloud solutions.\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\/press\/aws-european-sovereign-cloud\/\">\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-90870 post-90870 post type-post status-publish format-standard has-post-thumbnail hentry category-press tag-company-news\" 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 loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"546\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/12\/Frank_Zoltan-1024x699.jpg\" class=\"attachment-large size-large wp-image-90856\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/12\/Frank_Zoltan-1024x699.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/12\/Frank_Zoltan-300x205.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/12\/Frank_Zoltan-768x524.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/12\/Frank_Zoltan.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\tPress\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\">Acquisition successfully completed<\/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\tVodafone and Skaylink join forces for cloud and security\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\/press\/acquisition-successfully-completed\/\">\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-90746 post-90746 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 loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"533\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/12\/MG_5951-1024x682.jpg\" class=\"attachment-large size-large wp-image-90753\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/12\/MG_5951-1024x682.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/12\/MG_5951-300x200.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/12\/MG_5951-768x512.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/12\/MG_5951.jpg 1532w\" 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 memory and storage costs are surging \u2013 and what it means for your IT and cloud strategy<\/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\tMemory and storage prices are rising fast. Learn why cloud and hybrid strategies can give you a clear economic advantage and how Skaylink can support your transition.\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\/memory-storage-costs-are-surging\/\">\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-89991 post-89991 post type-post status-publish format-standard has-post-thumbnail hentry category-press\" 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 loading=\"lazy\" decoding=\"async\" width=\"683\" height=\"466\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/10\/PM-Header-Skaylink.jpeg\" class=\"attachment-large size-large wp-image-89981\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/10\/PM-Header-Skaylink.jpeg 683w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/10\/PM-Header-Skaylink-300x205.jpeg 300w\" sizes=\"(max-width: 683px) 100vw, 683px\" \/>\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\tPress\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\">Waterland sells majority stake in Skaylink to Vodafone<\/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\tEuropean private equity firm Waterland Private Equity has sold its majority stake in Skaylink, a leading IT specialist for public cloud solutions and digital transformation, to Vodafone\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\/press\/waterland-sells-majority-stake-in-skaylink-to-vodafone\/\">\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-89807 post-89807 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 loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"533\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/10\/MG_9702-1024x682.jpg\" class=\"attachment-large size-large wp-image-89816\" alt=\"\" srcset=\"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-300x200.jpg 300w, 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, https:\/\/www.skaylink.com\/wp-content\/uploads\/2025\/10\/MG_9702.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\">Embracing test-driven development: A journey from skeptic to advocate<\/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\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 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\/embracing-test-driven-development\/\">\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}]}}