<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Max Ritter</title>
    <description>The latest articles on DEV Community by Max Ritter (@maxritter).</description>
    <link>https://dev.to/maxritter</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F455701%2Ff365be6f-d026-4695-921f-a3e13958a895.jpg</url>
      <title>DEV Community: Max Ritter</title>
      <link>https://dev.to/maxritter</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maxritter"/>
    <language>en</language>
    <item>
      <title>AWS Bedrock Multi-Agent Blueprint with CDK &amp; Streamlit</title>
      <dc:creator>Max Ritter</dc:creator>
      <pubDate>Tue, 21 Jan 2025 07:43:10 +0000</pubDate>
      <link>https://dev.to/maxritter/aws-bedrock-multi-agent-blueprint-45g7</link>
      <guid>https://dev.to/maxritter/aws-bedrock-multi-agent-blueprint-45g7</guid>
      <description>&lt;p&gt;The AWS Bedrock Multi-Agent Blueprint is a project that allows you to create and deploy multi-agent applications on AWS Bedrock. It is built with AWS CDK and offers advanced features such as agent collaboration, vector database storage, observability via LangFuse, authentication, and a Streamlit web interface.&lt;/p&gt;

&lt;p&gt;Check out the project here: &lt;a href="https://github.com/maxritter/aws-bedrock-multi-agent-blueprint" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is a video of the application in action:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/C4E9A4qw0tU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🤖 &lt;strong&gt;Multi-Agent Architecture&lt;/strong&gt;: Built with AWS Bedrock Agents including a Supervisor Agent, RAG Agent and Tools Agent working together seamlessly as a multi-agent system&lt;/li&gt;
&lt;li&gt;🔍 &lt;strong&gt;Knowledge Base Integration&lt;/strong&gt;: Leverages AWS Bedrock Knowledge Base for intelligent processing of PDF documents via RAG&lt;/li&gt;
&lt;li&gt;🔄 &lt;strong&gt;Tools Calling Integration&lt;/strong&gt;: Custom Bedrock Action group for fetching and analyzing relevant clinical trials data from ClinicalTrials.gov using AWS Lambda&lt;/li&gt;
&lt;li&gt;🧮 &lt;strong&gt;Code Interpreter&lt;/strong&gt;: Built-in Code Interpreter capabilities for data analysis and visualization tasks that is able to generate images and HTML code&lt;/li&gt;
&lt;li&gt;🎯 &lt;strong&gt;Prompt Engineering&lt;/strong&gt;: Custom prompt templates and configurations for knowledge base responses and orchestration of the Bedrock Agents&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;Vector Database Storage&lt;/strong&gt;: Uses Amazon Aurora Vector Store for efficient storage and retrieval of embeddings for RAG&lt;/li&gt;
&lt;li&gt;📈 &lt;strong&gt;Observability&lt;/strong&gt;: Built-in monitoring and tracing with LangFuse integration for evaluation, tracing, and cost tracking&lt;/li&gt;
&lt;li&gt;🛠️ &lt;strong&gt;Infrastructure as Code&lt;/strong&gt;: Complete AWS CDK v2 for TypeScript setup with projen for consistent infrastructure management&lt;/li&gt;
&lt;li&gt;🔐 &lt;strong&gt;Authentication&lt;/strong&gt;: Integrated Cognito-based authentication system for secure access control to the application via username / password&lt;/li&gt;
&lt;li&gt;💻 &lt;strong&gt;Streamlit App&lt;/strong&gt;: Interactive web interface built with Streamlit for easy interaction with the agents deployed to AWS ECS Fargate&lt;/li&gt;
&lt;li&gt;📚 &lt;strong&gt;OpenAPI Schema&lt;/strong&gt;: Automatically generated from annotated code of your Lambda function using Lambda Powertools for Bedrock&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Solution Design
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fphuwzch37vwslgfu7aj2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fphuwzch37vwslgfu7aj2.png" alt="Solution Design" width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Login to your AWS account, go to AWS Bedrock Model catalog in eu-central-1 region and request access to the following models:

&lt;ul&gt;
&lt;li&gt;Titan Text Embeddings V2&lt;/li&gt;
&lt;li&gt;Claude 3.5 Sonnet V1&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Eventually, you may need to increase your AWS account limits / service quota for Claude &lt;a href="https://docs.aws.amazon.com/bedrock/latest/userguide/quotas.html" rel="noopener noreferrer"&gt;as described here&lt;/a&gt;
&lt;/li&gt;

&lt;li&gt;Register a free LangFuse account for observability at &lt;a href="https://langfuse.com/" rel="noopener noreferrer"&gt;LangFuse&lt;/a&gt; and create a new project called &lt;code&gt;multi-agent-blueprint&lt;/code&gt;. Then create a new AWS Secret named &lt;code&gt;langfuse/api&lt;/code&gt;  that stores the public and private API key as JSON:
&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"LANGFUSE_PUBLIC_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;YOUR_PUBLIC_API_KEY&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"LANGFUSE_SECRET_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;YOUR_PRIVATE_API_KEY&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://docs.astral.sh/uv/" rel="noopener noreferrer"&gt;uv&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html" rel="noopener noreferrer"&gt;AWS CDK&lt;/a&gt; on your machine, then run the following commands:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;cd &lt;/span&gt;infra &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npx projen &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ../
  uv &lt;span class="nb"&gt;sync&lt;/span&gt; &lt;span class="nt"&gt;--frozen&lt;/span&gt;
  uv pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; src/app/requirements.dev.txt
  uv pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; src/tools/clinicaltrials/requirements.dev.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Execute the following commands to deploy the infrastructure via AWS CDK:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;cd &lt;/span&gt;infra &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; cdk bootstrap
  &lt;span class="nv"&gt;DOCKER_DEFAULT_PLATFORM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;linux/amd64 cdk deploy &lt;span class="nt"&gt;--require-approval&lt;/span&gt; never &lt;span class="nt"&gt;--all&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;In the AWS Console under Bedrock Knowledge Bases, open the created knowledge base and make sure the data source sync is completed, otherwise trigger it manually&lt;/li&gt;
&lt;li&gt;Go to the AWS Console and create a new Cognito user with username and password. Use this to login to the Streamlit app over the HTTP URL that is printed out after the deployment is complete&lt;/li&gt;
&lt;li&gt;For local testing, set the Supervisor Agent ID and Alias ID as well as your LangFuse API keys in the &lt;code&gt;.vscode/launch.json&lt;/code&gt; file, then run the &lt;code&gt;APP&lt;/code&gt; launch configuration:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"SUPERVISOR_AGENT_ID"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;YOUR_SUPERVISOR_AGENT_ID&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"SUPERVISOR_AGENT_ALIAS_ID"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;YOUR_SUPERVISOR_AGENT_ALIAS_ID&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"LANGFUSE_SECRET_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;YOUR_LANGFUSE_SECRET_KEY&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"LANGFUSE_PUBLIC_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;YOUR_LANGFUSE_PUBLIC_KEY&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;To regenerate the OpenAPI schema from the annotated code of your Lambda function, run the &lt;code&gt;API SCHEMA&lt;/code&gt; launch configuration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Possible Improvements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Add end-to-end agent evaluation using a framework like &lt;a href="https://awslabs.github.io/agent-evaluation/" rel="noopener noreferrer"&gt;AWS Agent Evaluation&lt;/a&gt; or &lt;a href="https://langfuse.com/docs/scores/external-evaluation-pipelines" rel="noopener noreferrer"&gt;LangFuse Evaluation Pipelines&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Add a reranker to the knowledge base to improve the quality of the RAG responses as shown in &lt;a href="https://github.com/aws-samples/amazon-bedrock-samples/blob/main/rag/knowledge-bases/features-examples/02-optimizing-accuracy-retrieved-results/re-ranking_using_kb.ipynb" rel="noopener noreferrer"&gt;this code example&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Split the application into frontend and backend using FastAPI for the backend server, similar to &lt;a href="https://github.com/aws-samples/amazon-bedrock-samples/tree/main/rag/knowledge-bases/features-examples/03-deploying-fastapi-server" rel="noopener noreferrer"&gt;this example&lt;/a&gt; that does the same for LangGraph&lt;/li&gt;
&lt;li&gt;Use a prompt router for Anthropic to route the user's query to the most appropriate agent, as explained in &lt;a href="https://github.com/awslabs/generative-ai-cdk-constructs/blob/main/src/cdk-lib/bedrock/README.md#prompt-routing" rel="noopener noreferrer"&gt;this example&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>aws</category>
      <category>development</category>
      <category>agents</category>
    </item>
    <item>
      <title>Leveraging AWS CDK for Scalable and Secure Infrastructure: A DevSecOps Approach</title>
      <dc:creator>Max Ritter</dc:creator>
      <pubDate>Fri, 12 Jul 2024 06:57:22 +0000</pubDate>
      <link>https://dev.to/maxritter/leveraging-aws-cdk-for-scalable-and-secure-infrastructure-a-devsecops-approach-5d27</link>
      <guid>https://dev.to/maxritter/leveraging-aws-cdk-for-scalable-and-secure-infrastructure-a-devsecops-approach-5d27</guid>
      <description>&lt;p&gt;As we navigate the complex landscape of cloud infrastructure in 2024, the AWS Cloud Development Kit (CDK) continues to be a game-changer for organizations looking to implement robust DevSecOps practices. While Terraform and OpenTofu are popular IaC tools among many companies, I still prefer CDK due to its unique advantages through its use of familiar programming languages, rich construct ecosystem, and native AWS integration. This allows for more flexible, type-safe infrastructure code with better IDE support, making CDK an increasingly attractive choice for teams heavily invested in the AWS ecosystem.&lt;/p&gt;

&lt;p&gt;In this post, we'll explore how AWS CDK can be used with reusable components (constructs) and how it enables the implementation of DevSecOps best practices, particularly in multi-account and cross-region deployments, automated governance, and observability.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Power of Reusable Components
&lt;/h2&gt;

&lt;p&gt;One of the key strengths of AWS CDK is its ability to create and utilize reusable components called Constructs. These Constructs serve as building blocks for your cloud infrastructure, enabling teams to standardize best practices, enforce security policies, and accelerate development.&lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits of Using Constructs
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Standardization&lt;/strong&gt;: Constructs allow organizations to create standardized, pre-approved components that adhere to security and compliance requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reusability&lt;/strong&gt;: Once created, Constructs can be shared across multiple teams and projects, promoting consistency and reducing duplication of effort.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extensibility&lt;/strong&gt;: Constructs can be easily extended or customized to meet specific project requirements while maintaining core organizational standards.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Custom Constructs for Enhanced Security
&lt;/h3&gt;

&lt;p&gt;Many organizations create custom constructs to enforce security best practices. For example, you might develop a &lt;code&gt;MyCompanyBucket&lt;/code&gt; construct that implements your organization's specific security requirements, replacing the default Amazon S3 Bucket construct. This approach ensures that teams across your organization are using components that have been validated by your security and compliance teams.&lt;/p&gt;

&lt;h3&gt;
  
  
  Construct Hub: A Central Repository
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://constructs.dev/" rel="noopener noreferrer"&gt;Construct Hub&lt;/a&gt; serves as a central destination for discovering and sharing cloud application design patterns and reference architectures. While AWS provides a public Construct Hub, enterprises can also maintain their private Construct Hub within their own AWS accounts. This approach promotes consistency, reusability, and ultimately leads to cost reduction and faster development timelines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Balancing Standardization and Innovation
&lt;/h3&gt;

&lt;p&gt;While standardization is crucial, it's essential to strike a balance between enforcing best practices and allowing for innovation. Platform engineering teams can act as approvers for new Constructs, enabling pilot teams to experiment with new technologies while ensuring compliance with organizational standards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementing DevSecOps Best Practices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Automated Deployment Pipelines
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/cdk/v2/guide/cdk_pipeline.html" rel="noopener noreferrer"&gt;AWS CDK Pipelines&lt;/a&gt;, powered by AWS CodePipeline, enables the creation of automated pipelines for production deployments across multiple environments, regions, and accounts. These pipelines can be extended to include stages that ensure deployed code meets quality, security, risk, compliance, and cloud financial management criteria.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-Account and Cross-Region Deployments
&lt;/h3&gt;

&lt;p&gt;AWS CDK supports multi-account and cross-region deployments, aligning with AWS best practices for resource isolation and access control. This strategy allows organizations to have dedicated accounts for different stages (development, staging, production), enhancing security and governance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/aws-samples/biotech-blueprint-multi-account" rel="noopener noreferrer"&gt;Here&lt;/a&gt; is an example how to use CDK together with AWS Managed Services like AWS Control Tower, AWS SSO and AWS Organization to create a customized Landing Zone using best-practices. If this seems to complicated for you, there are other solutions like &lt;a href="https://github.com/superwerker/superwerker" rel="noopener noreferrer"&gt;Superwerker&lt;/a&gt; that help to automate this setup (also based on CDK code that is abstracted away from you).&lt;/p&gt;

&lt;h3&gt;
  
  
  Automated Governance
&lt;/h3&gt;

&lt;p&gt;Several tools and practices can be implemented to enforce security controls and policies:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/cdklabs/cdk-nag" rel="noopener noreferrer"&gt;&lt;strong&gt;cdk-nag&lt;/strong&gt;&lt;/a&gt;: This industry-standard tool checks applications for best practices using various rule packs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/aws-cloudformation/cloudformation-guard" rel="noopener noreferrer"&gt;&lt;strong&gt;CloudFormation Guard&lt;/strong&gt;&lt;/a&gt;: This tool allows the verification of synthesized CloudFormation templates using policy-as-code domain-specific language (DSL) rules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AWS CloudFormation Hooks&lt;/strong&gt;: These allow inspection of resources prior to create, update, or delete operations, providing warnings or preventing provisioning of non-compliant resources.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AWS Config&lt;/strong&gt;: Conformance packs can be deployed via CDK to enforce security standards at scale.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Observability and Monitoring
&lt;/h3&gt;

&lt;p&gt;Open-source projects like &lt;a href="https://github.com/cdklabs/cdk-monitoring-constructs" rel="noopener noreferrer"&gt;cdk-monitoring-constructs&lt;/a&gt; and &lt;a href="https://github.com/aws-samples/cdk-wakeful" rel="noopener noreferrer"&gt;Cdk-wakeful&lt;/a&gt; expand the monitoring capabilities of CDK applications. These tools make it easy to set up comprehensive monitoring and alerting systems, integrating with services like AWS Systems Manager Incident Manager, AWS Chatbot, and Amazon SNS.&lt;/p&gt;

&lt;p&gt;Using AWS Chatbot, you can send your observability messages to &lt;a href="https://docs.aws.amazon.com/chatbot/latest/adminguide/teams-setup.html" rel="noopener noreferrer"&gt;Microsoft Teams&lt;/a&gt; or &lt;a href="https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html" rel="noopener noreferrer"&gt;Slack&lt;/a&gt;, so that your team is informed about them. Adding e-mail notifications via AWS SQS and AWS SES is also a good practice for critical alerts that happen in the production environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices for CDK Implementation
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Start Simple&lt;/strong&gt;: Begin with basic constructs and add complexity gradually as needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Align with AWS Well-Architected Framework&lt;/strong&gt;: Ensure your CDK components adhere to &lt;a href="https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html" rel="noopener noreferrer"&gt;AWS best practices for cloud applications&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Leverage Platform Engineering&lt;/strong&gt;: Encourage platform engineering teams to create and curate reusable constructs, enabling innovation while maintaining standards.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Implement Robust CI/CD&lt;/strong&gt;: Utilize CDK Pipelines to create fully functional deployment pipelines that reduce cognitive load on development teams.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enforce Code Quality&lt;/strong&gt;: Treat CDK applications like any other code, applying standard quality assurance tools and practices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Utilize IDE Integration&lt;/strong&gt;: Take advantage of tools like the AWS CDK Explorer in Visual Studio Code for efficient project management that is part of the &lt;a href="https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-toolkit.html" rel="noopener noreferrer"&gt;AWS Toolkit Extension&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;AWS CDK, when leveraged effectively, can significantly enhance an organization's ability to implement DevSecOps best practices. By utilizing reusable components, implementing automated governance, and focusing on observability, teams can create more secure, scalable, and maintainable cloud infrastructure. As we continue to see advancements in cloud technologies, AWS CDK remains a powerful tool in the modern developer's toolkit, enabling the creation of robust, compliant, and efficient cloud applications.&lt;/p&gt;




&lt;p&gt;🔗 If you want to read more content from me on topics like IT Freelancing, AWS Best-Practices, DevOps and AI, check out my personal blog: &lt;a href="https://maxritter.bloggi.co/" rel="noopener noreferrer"&gt;Max Ritter | Personal Blog&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>infrastructureascode</category>
      <category>cloud</category>
      <category>devops</category>
    </item>
    <item>
      <title>Serverless on AWS with CDK #1: App Runner with VPC Integration</title>
      <dc:creator>Max Ritter</dc:creator>
      <pubDate>Sat, 26 Mar 2022 18:35:19 +0000</pubDate>
      <link>https://dev.to/maxritter/serverless-on-aws-with-cdk-1-app-runner-with-vpc-integration-3k5l</link>
      <guid>https://dev.to/maxritter/serverless-on-aws-with-cdk-1-app-runner-with-vpc-integration-3k5l</guid>
      <description>&lt;p&gt;This is part one of a four part series on deploying serverless application on AWS with the Cloud Development Kit (CDK) and will cover App Runner with VPC integration. Each post goes into detail about one particular AWS service to run the application, as well as one sample application that uses a particular architectural pattern or framework.&lt;/p&gt;

&lt;p&gt;The next posts of this series will be about: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;#2: AWS Lambda with Hexagonal Service Architecture using Golang and DynamoDB&lt;/li&gt;
&lt;li&gt;#3: AWS ECS on Fargate with Blue/Green Deployments&lt;/li&gt;
&lt;li&gt;#4: AWS EKS on Fargate with cdk8s&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.bloggi.co%2Fabbc28ed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.bloggi.co%2Fabbc28ed.png" alt="Content of the four-part series" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS App Runner
&lt;/h2&gt;

&lt;p&gt;Introduced in May 2021, AWS App Runner is another managed container service for the cloud. Its principal use cases are web applications and APIs. Like its cousins, DigitalOcean App Platform, Heroku, or Google Cloud Run, AWS doesn’t want you worrying about scaling or infrastructure while using their service. &lt;/p&gt;

&lt;p&gt;Until February 2022, the service was barely usable for production scenarios, as it had no VPC support until this point. Luckily &lt;a href="https://aws.amazon.com/de/blogs/aws/new-for-app-runner-vpc-support/" rel="noopener noreferrer"&gt;this has changed in the meantime&lt;/a&gt; and there is also &lt;a href="https://docs.aws.amazon.com/cdk/api/v2/docs/aws-apprunner-alpha-readme.html" rel="noopener noreferrer"&gt;CDK&lt;/a&gt; and &lt;a href="https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/apprunner_service" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt; support for it, so we can setup it using Infrastructure-as-Code. If you are not familiar with those tools already, another and definitely easier option is to use &lt;a href="https://aws.github.io/copilot-cli/" rel="noopener noreferrer"&gt;AWS Copilot&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;How does App Runner compare to Lambda, ECS or EKS? The point is clearly about keeping management overhead low. While ECS and EKS are nice, they require a lot of components to setup. For EKS it's even more complex, as Kubernetes is a topic on its own and requires a lot of effort to get a stable and secure setup. Lambda might be a good solution for a lot of use-cases, but it has limitations on the &lt;a href="https://aws.amazon.com/de/blogs/aws/new-for-app-runner-vpc-support/" rel="noopener noreferrer"&gt;maximum number of concurrent executions&lt;/a&gt; and there is also the cold start issue, that might not be suitable for every scenario.&lt;/p&gt;

&lt;p&gt;Behind the scenes, App Runner runs on Amazon ECS Cluster and Fargate to execute your containers. Compared to them, App Runner is a lot easier to get into, but you lose some of the more fine-grained configuration options:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.bloggi.co%2F61c55fc8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.bloggi.co%2F61c55fc8.png" alt="App Runner Building Blocks" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, cost estimation for App Runner is far simpler — AWS changes a fixed CPU and Memory fee per second. With $0.007 / GB-hour per provisioned container instance and $0.064 / vCPU-hour as well as $0.007 / GB-hour, you can get a high volume production app (80 requests/active container instance) with 1 vCPU and 2GB for a total of 102 dollar per month. For a development or test app (traffic of 2 requests per second for 2 hours each day), monthly costs can go down to 4.80 dollar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.bloggi.co%2F9181c725.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.bloggi.co%2F9181c725.png" alt="App Runner Key Features" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The key features of AWS App Runner are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simple autoscaling&lt;/strong&gt;: instances are started and stopped as demand changes, between configurable min and max limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Load balancing&lt;/strong&gt;: the service includes a transparent, non-configurable load balancer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSL enabled&lt;/strong&gt;: you get HTTPS endpoints for all your applications with AWS-managed certificates. You don’t need to issue or renew certificates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build service&lt;/strong&gt;: you can push your own images or let AWS build them for you from code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistent URLs&lt;/strong&gt;: the service assigns randomly-generated URLs for each environment. You can optionally map them to domains of your own.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sample Application
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;Let's get our hands dirty and see how App Runner works in reality. For the sake of this demo, we are going to use the following technologies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.aws.amazon.com/cdk/v2/guide/home.html" rel="noopener noreferrer"&gt;AWS CDK 2.x&lt;/a&gt; (For infrastructure and application deployment)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/apprunner/?nc1=h_ls" rel="noopener noreferrer"&gt;AWS App Runner&lt;/a&gt; (Executing our container stored in ECR with ECS on Fargate)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/rds/aurora/serverless/?nc1=h_ls" rel="noopener noreferrer"&gt;AWS Aurora Serverless&lt;/a&gt; (PostgreSQL Database)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/ecr/?nc1=h_ls" rel="noopener noreferrer"&gt;AWS ECR&lt;/a&gt; (Container storage)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://go.dev/" rel="noopener noreferrer"&gt;Golang&lt;/a&gt; (Perfect for backend services and cloud native apps)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/gin-gonic/gin" rel="noopener noreferrer"&gt;Gin Web Framework&lt;/a&gt; (Awesome web framework for Go with focus on performance and productivity)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://gorm.io/index.html" rel="noopener noreferrer"&gt;GORM ORM Library&lt;/a&gt; (ORM wrapper that works with many databases, we use it for PostgreSQL connection)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://projen.io/" rel="noopener noreferrer"&gt;Projen&lt;/a&gt; (Setup our CDK project)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can find &lt;strong&gt;&lt;a href="https://github.com/maxritter/aws-cdk-apprunner-vpc-golang" rel="noopener noreferrer"&gt;all the code in my repository&lt;/a&gt;&lt;/strong&gt;. Our architecture will look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.bloggi.co%2F882ff51b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.bloggi.co%2F882ff51b.png" alt="Architecture of our demo application" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Application
&lt;/h3&gt;

&lt;p&gt;To get things started, let's review the application. The application is quite simple and is designed to show off the App Runner VPC integration feature by implementing a To-Do List API with Gin and GORM for Postgres.&lt;/p&gt;

&lt;p&gt;You can hit the following endpoints:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Route&lt;/th&gt;
&lt;th&gt;Body&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;/tasks&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;/tasks&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{"title": "task title"}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DELETE&lt;/td&gt;
&lt;td&gt;/tasks/:id&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUT&lt;/td&gt;
&lt;td&gt;/tasks/:id&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{"title": "task title", "completed": true}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The main function fetches the credentials for the Serverless Aurora PostgreSQL DB from AWS Secrets manager, then initializes the DB connection using GORM and finally launches the Gin webserver for the REST API and HTTP Health Checks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func main() {
    log.Println("Getting secrets..")
    rdsSecret := utils.GetSecret()

    log.Println("Init DB connection..")
    db.Init(rdsSecret)

    log.Println("Starting server..")
    r := gin.Default()

    //HTTP Health Check
    r.GET("/", func(c *gin.Context) {
        c.String(http.StatusOK, "OK")
    })

    //REST API
    v1 := r.Group("/api/v1")
    {
        tasks := v1.Group("/tasks")
        {
            tasks.GET("/", controllers.GetTasks)
            tasks.POST("/", controllers.CreateTask)
            tasks.PUT("/:id", controllers.UpdateTask)
            tasks.DELETE("/:id", controllers.DeleteTask)
        }
    }

    r.Run(":8080") // listen and serve on 0.0.0.0:8080
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the V1 Group, you see the definition of the controllers for the CRUD functionality of the Todo List API. They are implemented in the &lt;code&gt;src/app/controllers/tasks.go&lt;/code&gt; file. The connection to the database is defined in &lt;code&gt;src/app/db/db.go&lt;/code&gt;, task object for the ToDo's is in &lt;code&gt;src/app/models/task.go&lt;/code&gt;. There are also some common utils and types for the DB secret in &lt;code&gt;src/app/types/secrets.go&lt;/code&gt; and &lt;code&gt;src/app/utils/secrets.go&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The Dockerfile to build the application using Go 1.18 and including SSL certificates is defined like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Build environment
FROM golang:1.18.0-alpine3.15 as builder
RUN apk update
RUN apk add -U --no-cache ca-certificates &amp;amp;&amp;amp; update-ca-certificates
WORKDIR /app
COPY . .
ENV GO111MODULE=on
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o server .
CMD ["/app"]

# Execution environment
FROM scratch
EXPOSE 8080
WORKDIR /app
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /app/server /usr/bin/
ENTRYPOINT ["server"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The image is build automatically by the AWS CDK and has a total size of only 5.42 MB! That's one of the big advantages of Go, as the application is compiled for the target architecture and can therefore run without any dependencies. A similar Python application with FastAPI would easily go to over 100 MB or more.&lt;/p&gt;

&lt;h3&gt;
  
  
  Infrastructure
&lt;/h3&gt;

&lt;p&gt;As AWS App Runner is only available in a &lt;a href="https://docs.aws.amazon.com/general/latest/gr/apprunner.html" rel="noopener noreferrer"&gt;limited number of regions so far&lt;/a&gt;, we will go for Ireland (eu-west-1) instead of the default for Germany, which would be Frankfurt (eu-central-1). &lt;/p&gt;

&lt;p&gt;Projen was used to create the base files for the AWS CDK 2.x IaC code. Apart from CDK, it can also generate projects for &lt;a href="https://cdk8s.io/" rel="noopener noreferrer"&gt;CDK8s&lt;/a&gt; and &lt;a href="https://www.terraform.io/cdktf" rel="noopener noreferrer"&gt;CDKTF&lt;/a&gt;, which are used to deploy Kubernetes Manifests and Terraform Code using modern programming languages supported by the &lt;a href="https://github.com/aws/jsii" rel="noopener noreferrer"&gt;jsii compiler&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We need a VPC to host the Serverless Aurora Database in a private subnet. To create our database cluster in RDS, we're going to use the ServerlessCluster construct. Once again this construct is going to create many resources on our behalf, with only a few lines of code on our end defining our requirements:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const vpc = new ec2.Vpc(this, "AppRunnerVPC");

const dbCluster = new rds.ServerlessCluster(this, "AppRunnerDatabase", {
  engine: rds.DatabaseClusterEngine.auroraPostgres({
    version: rds.AuroraPostgresEngineVersion.VER_10_14,
  }),
  vpc: vpc,
  enableDataApi: true,
  removalPolicy: RemovalPolicy.DESTROY,
  scaling: {
    autoPause: Duration.seconds(0),
  },
});

const databaseName = "tasks"
const createDatabase = new cr.AwsCustomResource(this, "RDSCreateDatabase", {
  policy: cr.AwsCustomResourcePolicy.fromSdkCalls({
    resources: cr.AwsCustomResourcePolicy.ANY_RESOURCE,
  }),
  logRetention: RetentionDays.ONE_WEEK,
  onCreate: {
    service: "RDSDataService",
    action: "executeStatement",
    physicalResourceId: cr.PhysicalResourceId.of(
      dbCluster.clusterIdentifier
    ),
    parameters: {
      resourceArn: dbCluster.clusterArn,
      secretArn: dbCluster.secret?.secretArn,
      sql: `CREATE DATABASE ${databaseName} OWNER postgres;`,
    },
  },
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At the time of the creation of this walkthrough, the App Runner constructs avaialable are L1, which means they map directly to Cloudformation. There are a few things to discuss here, so I want to start by talking about how the App Runner service connects to the VPC. When connecting your service to an existing VPC, you need to create a VPC Connector in App Runner. The connector is what allows your App Runner service to egress the service into your VPC. &lt;/p&gt;

&lt;p&gt;For the connection to be established, a couple of parameters are required. First, you need to define the subnet id's that you want to egress into. Next, you will attach security groups to control network access into the VPC. You can attach multiple security groups and multiple subnets to a VPC connector, depending on the use case:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Create an App Runner Service with a VPC Connector
const appRunnerVpcConnector = new aws_apprunner.CfnVpcConnector(
  this,
  "AppRunnerVPCCon",
  {
    subnets: vpc.selectSubnets({
      subnetType: SubnetType.PRIVATE_WITH_NAT,
    }).subnetIds,
    securityGroups: [
      dbCluster.connections.securityGroups[0].securityGroupId,
    ],
    vpcConnectorName: "AppRunnerVPCConnector",
  }
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, we need to talk about the permission model and what permissions the App Runner needs (Not our code, but the AWS App Runner control plane) vs what permissions the service (my code/container) needs while running. This is a bit confusing, so let's break it down: &lt;/p&gt;

&lt;p&gt;The App Runner service role: As it says in the name, this is the role for the App Runner service itself (not your application) to make AWS API calls on our behalf. In this case, we are building an image based service which requires App Runner to pull down container images from Amazon ECR.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const appRunnerServiceRole = new iam.Role(this, "AppRunnerServiceRole", {
  assumedBy: new iam.ServicePrincipal("build.apprunner.amazonaws.com"),
});

appRunnerServiceRole.addManagedPolicy(
  iam.ManagedPolicy.fromAwsManagedPolicyName(
    "service-role/AWSAppRunnerServicePolicyForECRAccess"
  )
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The App Runner instance role: This is the role for OUR code, meaning that the AWS API calls being made from my application require the IAM policies attached to make the calls to AWS resources. In our code example, we interact with AWS Secrets Manager, which we've added into the IAM policy attached to this role:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const appRunnerInstanceRole = new iam.Role(this, "AppRunnerInstanceRole", {
  assumedBy: new iam.ServicePrincipal("tasks.apprunner.amazonaws.com"),
  inlinePolicies: {
    secretsManager: new iam.PolicyDocument({
      statements: [
        new iam.PolicyStatement({
          actions: ["secretsmanager:GetSecretValue"],
          resources: [dbSecrets.secretArn],
        }),
      ],
    }),
  },
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally we have our App Runner service. This is where we define the configuration of our service which includes how to build our service (source code or from a container image), which VPC connector to use (if any), auto scaling, service and instance roles, and so on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const appRunnerService = new aws_apprunner.CfnService(
  this,
  "AppRunnerService",
  {
    sourceConfiguration: {
      autoDeploymentsEnabled: false,
      imageRepository: {
        imageRepositoryType: "ECR",
        imageIdentifier: appRunnerContainerImage.imageUri,
        imageConfiguration: {
          port: "8080",
          runtimeEnvironmentVariables: [
            {
              name: "AWS_SECRET_NAME",
              value: dbSecrets.secretName
            },
            {
              name: "AWS_REGION",
              value: props.env?.region,
            },
            {
              name: "DATABASE_NAME",
              value: databaseName,
            },
          ],
        },
      },
      authenticationConfiguration: {
        accessRoleArn: appRunnerServiceRole.roleArn,
      },
    },
    healthCheckConfiguration: {
      protocol: "HTTP",
      interval: 5,
      healthyThreshold: 1,
      path: "/",
      timeout: 5,
      unhealthyThreshold: 3,
    },
    networkConfiguration: {
      egressConfiguration: {
        egressType: "VPC",
        vpcConnectorArn: appRunnerVpcConnector.attrVpcConnectorArn,
      },
    },
    serviceName: Stack.of(this).stackName,
    instanceConfiguration: {
      instanceRoleArn: appRunnerInstanceRole.roleArn,
    },
  }
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have some environment variables set in the configuration, and you may notice that we pass the secret ARN from the secret we created for the database and stored in in Secrets Manager. As mentioned above, we need this ARN to know which secret we will reference when making the call in our code. Last but not least, the ECR image is built automatically by CDK using the Dockerfile in the src/app directory and pushed to the registry, so App Runner can fetch it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Build a container image and push to ECR
const appRunnerContainerImage = new ecrAssets.DockerImageAsset(
  this,
  "ECRImage",
  {
    directory: "src/app",
  }
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Deployment
&lt;/h3&gt;

&lt;p&gt;The whole application stack including infrastructure components can be deployed with a single command: &lt;code&gt;cdk deploy --require-approval never&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It will take a couple of minutes for CloudFormation to finish the stack creation. Afterwards, you can go into the App Runner UI and see the running service:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.bloggi.co%2Fbadb17f4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.bloggi.co%2Fbadb17f4.png" alt="Main page of App Runner" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are some more pages where you can see application logs and metrics. Also you can view and edit the configuration that has been done by AWS CDK:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.bloggi.co%2Fbf643de3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.bloggi.co%2Fbf643de3.png" alt="Source, Deployment and Service Settings" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.bloggi.co%2F86551b2b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.bloggi.co%2F86551b2b.png" alt="Auto Scaling, Health Checks, Security and Networking" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, the options provided are way less than what you can configure with comparable services like ECS or EKS. So there is a tradeoff between simplicity and available features, where you have to validate what matches your requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;That's it! In this walkthrough we built an App Runner service that connects into a VPC that has resources running within the private subnets. Remember that we are not limited to RDS here, I simply chose those to provide a functional working example. The use cases are endless and whether that's talking to ECS Containers that are registered in AWS CloudMap, an Elasticache cluster, a Kubernetes service, or any other resource that resides in the VPC. &lt;/p&gt;

&lt;p&gt;In general, I like the App Runner approach and think it can greatly simplify the creation of serverless, containerized services on AWS Fargate. Running a load test with 500 servers in parallel showed the performance is pretty neat and autoscaling works as expected:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.bloggi.co%2F841c8e10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.bloggi.co%2F841c8e10.png" alt="Benchmark on Loadster.app" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What do you think of AWS App Runner? Let me know in the comments and see you in part 2 of the series with Hexagonal Architecure on Lambda (coming soon)!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>devops</category>
      <category>cloud</category>
    </item>
    <item>
      <title>2022 Gadgets to improve Sleep, Meditation, Relaxation &amp; Wellbeing</title>
      <dc:creator>Max Ritter</dc:creator>
      <pubDate>Sat, 08 Jan 2022 09:20:32 +0000</pubDate>
      <link>https://dev.to/maxritter/2022-gadgets-to-improve-sleep-meditation-relaxation-wellbeing-135h</link>
      <guid>https://dev.to/maxritter/2022-gadgets-to-improve-sleep-meditation-relaxation-wellbeing-135h</guid>
      <description>&lt;p&gt;Over the last year, I have &lt;strong&gt;acquired some new gadgets&lt;/strong&gt; that help me &lt;strong&gt;improving my sleep, meditation, relaxation and wellbeing&lt;/strong&gt;. In this article, I want to &lt;strong&gt;share my experience with you what has worked well&lt;/strong&gt; and for &lt;strong&gt;which purpose I am using the specific product&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;There are some &lt;strong&gt;passive devices&lt;/strong&gt; in the list that only &lt;strong&gt;measure data so you can do better decisions&lt;/strong&gt; based on that. On the other side, there are &lt;strong&gt;tools that actively influence your body and mind&lt;/strong&gt;. For each gadget, I am &lt;strong&gt;explaining its functionality&lt;/strong&gt;, giving &lt;strong&gt;my personal opinion&lt;/strong&gt; and &lt;strong&gt;showcase possible alternatives&lt;/strong&gt;:&lt;/p&gt;




&lt;h2&gt;
  
  
  Muse
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://choosemuse.com/" rel="noopener noreferrer"&gt;https://choosemuse.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpylkxyjesstan344srrv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpylkxyjesstan344srrv.png" alt="Muse" width="600" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What can I do with it?&lt;/strong&gt; The Muse is a brain-sensing headband that uses real-time biofeedback based on EEG technology to improve meditation and sleep. I bought the Muse S around a year ago and use it daily for a 30-60 minutes meditation session. Of course you can meditate without such a device and there are a lot of great apps that enable guided meditations, but this headband is special in a specific sense: It allows you to receive instant feedback about the state of your meditation efforts via audio. By doing so, it gives you the possibility to get into deeper states of the mind that are hard to reach without proper training. At the end of each session, you receive a score about the time spent in active, neutral or calm state. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it worth it?&lt;/strong&gt; The newest Gen2 Muse S costs a lot of money (379.99€), I would only buy this one if you are also interested in the sleep tracking and digital sleeping pills feature. For me, the Muse does one thing very good and that is to improve your meditation skills. For this purpose, even the older generation Muse 1 or 2 headbands do the job very well. I bought the Muse S Gen1 because it is slightly easier to setup before each session and more comfortable to wear than Gen1/2, but this can be considered as nice-to-have. So if you want to save some bucks but still bring your meditation skills to the next level, consider buying an older model from Ebay or other resellers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are the alternatives?&lt;/strong&gt; &lt;a href="https://focuscalm.com/" rel="noopener noreferrer"&gt;FocusCalm&lt;/a&gt; and &lt;a href="https://www.mendi.io/" rel="noopener noreferrer"&gt;mendi&lt;/a&gt; both incorporate a similar concept, but have a slightly different focus. They are primary targeted towards games as feedback mechanism for Neurofeedback. Both products promise to improve focus and wellbeing, although their main focus is not meditation like for the Muse. If you want to have the best hardware currently available, &lt;a href="https://neurosity.co/" rel="noopener noreferrer"&gt;Neurosity Crown&lt;/a&gt; is an EEG headband with 8 sensors and is geared towards concentration skills and getting users into flow. It helps developers to increase productivity by measuring brain waves and playing music that increases focus. It also tracks performance via a dashboard and the app.&lt;/p&gt;




&lt;h2&gt;
  
  
  Neorhythm
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://omnipemf.com/" rel="noopener noreferrer"&gt;https://omnipemf.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frm5u9y5yi7jv0xgz05ch.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frm5u9y5yi7jv0xgz05ch.png" alt="Neorhythm" width="600" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What can I do with it?&lt;/strong&gt; The Neorhythm stimulates your brain using &lt;a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2670735/" rel="noopener noreferrer"&gt;Pulsed Electro Magnetic Stimulation&lt;/a&gt;, commonly known as PEMF technology. There’s a lot to unpack here so let’s start with the very basics. Your brain is made of billions of nerve cells, or neurons, that both gather and transmit electrochemical signals throughout the body. It’s a very cliche analogy, but if you think of the brain like a computer, all of the neurons function like the gates and wires in a computer. And adding in a touch of physics, we know that a magnetic field can cause an electric current. So tying all of this together, the theory is that electromagnetic stimulation at certain frequencies can actually impact your brainwaves, like theta, delta, and alpha. And this can be especially felt when it comes to certain activities like relaxation and sleep. There is an app that lets you choose different programs for Energy, Sleep, Meditation, Relaxation and Pain. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it worth it?&lt;/strong&gt; It is a very special and unique product and I use it daily together with the Muse for improving my meditation skills. The Neorhythm can be put on the back of the head into one of the many meditation modes and does not influence the signal quality of the Muse at the front of the head. You can definitely experience the difference over the audio biofeedback of the Muse. Other modes I use regularly are "Deep Relaxation" at the end of the day and "Improve Sleep" half an hour before going to sleep. The device is highly integrated into my daily routine now and therefore I can recommend it if you want to make own experiments with brain stimulation and assess whether this technology is something for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are the alternatives?&lt;/strong&gt; There are some other PEMF devices on the market like the &lt;a href="https://www.micro-pulse.com/" rel="noopener noreferrer"&gt;Micro-Pulse&lt;/a&gt;, but they mostly focus on pain therapy and are not meant to be used on the brain. I suspect there will be a lot of innovation going on the field of non-invasive brain stimulation soon, but we are really at the starting point here.&lt;/p&gt;




&lt;h2&gt;
  
  
  Oura Ring
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://ouraring.com/" rel="noopener noreferrer"&gt;https://ouraring.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dv718gkta7emr7fwgx3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dv718gkta7emr7fwgx3.png" alt="Oura Ring" width="600" height="233"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What can I do with it?&lt;/strong&gt; The Oura Ring Gen3 was released recently and is the newest addition to my fleet of devices. Even though many features that have been prepared for generation three have not been rolled out yet like SpO2 measurements and advances sleep tracking, I am still happy with the quality and features of the device. I wear the ring all day and night and let it recharge every week. The oura app gives me different scores and recommendations how to improve me lifestyle. It never leaves you alone with raw data, but makes the insights practical so you know what to take out of them at any time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it worth it?&lt;/strong&gt; With a price point starting from 314€, the ring is definitely not cheap. But it has a very good quality and I see this as a long time investment, also in regards to the yet unreleased software features. The insights from the data are well made and don't overload you with too much information, but come at the right time and intensity. I use the sleep tracking feature together with an app called &lt;a href="https://www.risescience.com/" rel="noopener noreferrer"&gt;RISE&lt;/a&gt;, that calculates my sleep dept and circadian rhythm out of it. I did never wear a ring before so I had to get used to the feeling, but the sizing kit that comes before the actual device makes it easy to find the right ring size.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are the alternatives?&lt;/strong&gt; There is nothing similar in the form factor of a ring. That being said, when it comes to wristbands, the &lt;a href="https://biostrap.com/app/" rel="noopener noreferrer"&gt;Biostrap&lt;/a&gt; is in a similar price range and also focuses heavily on sleep and wellness. There is also the &lt;a href="https://www.whoop.com/" rel="noopener noreferrer"&gt;WHOOP 4.0&lt;/a&gt;, but for me the monthly subscription is too expensive. However, if you are really into sports and want to analyze your trainings, this could be worth the investment. &lt;/p&gt;




&lt;h2&gt;
  
  
  Apollo Neuro
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://apolloneuro.com/" rel="noopener noreferrer"&gt;https://apolloneuro.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3d9i2on9zd97cl54xb9w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3d9i2on9zd97cl54xb9w.png" alt="Apollo Neuro" width="600" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What can I do with it?&lt;/strong&gt; Apollo Neuro is a band that you can wear basically 24/7 on your arm or leg. It uses the feeling of touch to influence the nervous system. As it strengthens and rebalances your autonomic nervous system, your heart rate variability (HRV) improves – which means you’re building your resilience to stress. So ideally, you spend less time in fight-or-flight mode and get more time to rest and digest. The app has seven different modes, from "Energy and Wake Up" to "Sleep and Renew". You can also create a schedule to automatically run the different programs during the day or night. I usually wear the band all the time except for charging and activate the specific mode when I need it most.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it worth it?&lt;/strong&gt; It's hard to quantify the effects of the Apollo Neuro, because you don't know how you would feel without it. I got used to the sensation pretty quickly and miss the band whenever it has to charge. By tracking my HRV long-term, I can definitely see a positive trend, although this can not be attributed to the Apollo Neuro alone. In general, if you have issues to relax or experience anxiety or heavy stress, this could be something for your as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are the alternatives?&lt;/strong&gt; There are other products that are similar, but I would prefer the Apollo Neuro because it is backed by more scientific findings. In case you want to check out alternatives, consider &lt;a href="https://feeldoppel.co.uk/" rel="noopener noreferrer"&gt;doppel&lt;/a&gt; or &lt;a href="https://thetouchpointsolution.com/" rel="noopener noreferrer"&gt;touchpoint&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sensate II
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.getsensate.com/" rel="noopener noreferrer"&gt;https://www.getsensate.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fox1vhi8ejiig17jjw8d7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fox1vhi8ejiig17jjw8d7.png" alt="Sensate" width="600" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What can I do with it?&lt;/strong&gt; The Sensate II is a palm-sized, pebble-like device that sits on the chest and syncs with a mobile app. Sensate is designed to use low-frequency infrasound to regulate the nervous system and tone the &lt;a href="https://www.britannica.com/science/vagus-nerve" rel="noopener noreferrer"&gt;vagus nerve&lt;/a&gt; which is responsible for calming the body after periods of stress and anxiety. It can relax our “fight, flight, freeze” emergency response, bringing our body back into balance. A combination of meticulously composed sounds synchronized with the &lt;a href="https://en.wikipedia.org/wiki/Infrasound" rel="noopener noreferrer"&gt;near-infrasonic rhythmic pulses&lt;/a&gt; of the Sensate wearable are tuned to promote immediate relaxation. You put your headphones on and the Sensate on your chest, then choose one of the soundscapes in the app that range from 10-30 minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it worth it?&lt;/strong&gt; I am really happy with the device and use it on daily basis to relax from work and counter stress. The programs are perfect for a short relaxation during lunch break or a slightly longer one in the evening. The feeling of the vibration on your chest is really positive and so are the effects on HRV and wellbeing. If you are looking for a device that helps you to switch of your mind and refuel your batteries, I can highly recommend the Sensate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are the alternatives?&lt;/strong&gt; &lt;a href="https://neuvanalife.com/" rel="noopener noreferrer"&gt;Neuvana Xen&lt;/a&gt; has a very similar principle. There are some products that stimulate the Vagus Nerve directly over the ear, like the &lt;a href="https://www.parasym.co/" rel="noopener noreferrer"&gt;Parasym&lt;/a&gt;. I would only invest in those class of devices if you have a serious medical application for it, like depression or long-covid. And even then it is seen as experimental, whereas the positive effects on wellbeing have been proven in many scientific studies.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lief
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://getlief.com/" rel="noopener noreferrer"&gt;https://getlief.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftvw5y4dz71zu7gulhc5o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftvw5y4dz71zu7gulhc5o.png" alt="Lief" width="600" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What can I do with it?&lt;/strong&gt; Lief improves your heart rate variability (HRV), a scientifically-proven biomarker of stress. It is a patch that you can put on your chest during work. It continuously measures your HRV and sends out a vibration alerts, whenever this value is too low. It then proposes breathing patterns over the vibration that you can easily follow and therefore boost your HRV back to normal levels. Like the Muse, this is a biofeedback device that helps you to better self-regulate your stress and anxiety over time, as your body learns the patterns and how to deal with it naturally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it worth it?&lt;/strong&gt; Unfortunately the subscription is not cheap and costs 49$ per month. For this price tag, the device does not offer a lot of functionality except for the mentioned HRV monitoring and the vibration alerts together with the breathing patterns. I used it for 8 weeks but returned it afterwards, as the monthly costs are too high in my oppinion. Also the device can not be shipped to Europe at the moment, so you have to use an US address and then forward it to your European address.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are the alternatives?&lt;/strong&gt; As far as I know, there is no similar product on the market. The HearthMath EmWave2 is probably the closest fit, but the software is really crappy and does not provide similar vibration feedback or breathing patterns like the Lief. In general, I see a lot of potential on the usage of Realtime HRV biofeedback for preventing stress, especially in combination with breathing exercises. Actually, I thought about the idea before I have ever heard of Lief Therapeutics and were happy to see it actually works in a real product.&lt;/p&gt;




&lt;h2&gt;
  
  
  Apple Watch
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.apple.com/de/watch/" rel="noopener noreferrer"&gt;https://www.apple.com/de/watch/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F904dp6yto3qo9fxrv6h4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F904dp6yto3qo9fxrv6h4.png" alt="Apple Watch" width="600" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What can I do with it?&lt;/strong&gt; I think everyone knows the Apple Watch, so I only talk about the way I use it for tracking and improving my general wellbeing. There is an app called &lt;a href="https://gyroscope.pe/" rel="noopener noreferrer"&gt;Gyroscope&lt;/a&gt; that receives data from the watch and can be paired to other data sources as well. It generates a unique health score that goes up and down over time and gives you recommendations and goals to keep your body and mind in optimal health. It's basically like a digital health coach. Apart from Gyroscope, I use &lt;a href="https://apps.apple.com/de/app/hrv-tracker-for-watch/id1463020956" rel="noopener noreferrer"&gt;HRV Tracker&lt;/a&gt; to see the latest readings on my Watch and &lt;a href="https://cardiogram.com/" rel="noopener noreferrer"&gt;Cardiogram&lt;/a&gt; to monitor different heart parameters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it worth it?&lt;/strong&gt; If you already have an iPhone, the big advantage of the Apple Watch is that it seamlessly integrates into many other apps and of course sends data directly to Apple Health, which is for example used by other apps like Gyroscope. I own the Apple Watch SE that is significantly cheaper than the flagship version 7, but provides all the features I need. In combination with the Oura Ring, it tracks a lot of meaningful data and is a good addition to the ring for  HRV measurements during day or recording sports activities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are the alternatives?&lt;/strong&gt; There are many other smartwatches available on the market, so I am not trying to give recommendations here. If you are on Android you might have a look at the Fitbit products, especially the &lt;a href="https://www.fitbit.com/global/de/products/smartwatches/sense" rel="noopener noreferrer"&gt;Fitbit Sense&lt;/a&gt; has a lot of nice sensors integrated.&lt;/p&gt;




&lt;p&gt;I hope you found something interesting in this article. In case you want to &lt;strong&gt;learn more about the newest devices for improving health and happiness&lt;/strong&gt;, check out the Youtube channel from &lt;a href="https://www.youtube.com/channel/UCyqHPsR1eKEPSunlp6E-LSQ" rel="noopener noreferrer"&gt;Katie Type A&lt;/a&gt;. If you are more into &lt;strong&gt;neuroscience and hacking / improving your brain&lt;/strong&gt;, the Youtube channel from &lt;a href="https://www.youtube.com/c/Techforpsychinnovations" rel="noopener noreferrer"&gt;Cody Rall&lt;/a&gt; has you covered.&lt;/p&gt;

&lt;p&gt;Don't forget to check out &lt;strong&gt;my other articles&lt;/strong&gt; &lt;a href="https://dev.to/maxritter"&gt;here&lt;/a&gt; and have a &lt;strong&gt;great and healthy start into 2022&lt;/strong&gt;!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Unleashing Self-Employment in Germany: My Journey &amp; Best Practices for Long-Lasting Success</title>
      <dc:creator>Max Ritter</dc:creator>
      <pubDate>Sat, 13 Nov 2021 10:55:08 +0000</pubDate>
      <link>https://dev.to/maxritter/becoming-self-employed-a-personal-journey-and-best-practices-for-making-the-leap-1phm</link>
      <guid>https://dev.to/maxritter/becoming-self-employed-a-personal-journey-and-best-practices-for-making-the-leap-1phm</guid>
      <description>&lt;p&gt;&lt;strong&gt;Update 03/24&lt;/strong&gt;: I have recently updated this guide to include my most up-to-date knowledge on tax related topics&lt;/p&gt;

&lt;p&gt;In August 2021, I decided to leap the hurdle and start into the &lt;strong&gt;yet-unknown world of becoming self-employed as an IT Freelancer&lt;/strong&gt;. I've already gained experienced what it means to be an entrepreneur and co-founder of a successful startup before (read my other post &lt;a href="https://dev.to/maxritter/why-i-quit-my-job-as-a-co-founder-of-a-successful-startup-and-what-to-learn-from-it-about-success-and-happiness-3d8j"&gt;here&lt;/a&gt;), but this was &lt;strong&gt;something completely new to me&lt;/strong&gt; so you can never be sure whether you do the right or wrong thing.&lt;/p&gt;

&lt;p&gt;Fast-forwarding a couple of years into the present, I can say that at least for me, &lt;strong&gt;the decision was absolutely right&lt;/strong&gt;. I am now able to control my time much better than at any moment before in my working life and at the same time have been able to increase my income significantly. There is also a big benefit in the possibility to &lt;strong&gt;be in full control over with whom you work and for how long you stay in one project&lt;/strong&gt;. In the end, you only have to defend those decision in front of your moneybag, creating enough value for the clients so that you can have a &lt;strong&gt;fullfilled living out of that&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As I know some people in my network are also thinking about &lt;strong&gt;moving from being employed by a corporate or startup to working independently as a freelancer,&lt;/strong&gt; I wanted to share some of the &lt;strong&gt;experiences and best-practices I learned along the path&lt;/strong&gt;. Those apply to the German market, but I assume things work similarly in other countries of the European Union. &lt;strong&gt;Let me answer the most common and pressuring questions you might have before launching into the unknown world of being self-employed&lt;/strong&gt;:&lt;/p&gt;




&lt;h3&gt;
  
  
  What skills do I need before starting a career as a freelancer?
&lt;/h3&gt;

&lt;p&gt;That's a tough one and highly depends on the sector where you want to become self-employed in. I started my career in the domain of &lt;strong&gt;Cloud, Data and DevOps&lt;/strong&gt;, where I was able to gain valuable knowledge before by co-fouding a startup and also by working for diverse clients as a consultant afterwards. In addition to that, I have &lt;strong&gt;invested a lot of time and money into &lt;a href="https://www.credly.com/users/maximilian-ritter/badges" rel="noopener noreferrer"&gt;certifications&lt;/a&gt;&lt;/strong&gt; for my special field of expertise, proving customers that I have the expertise that they are looking for.&lt;/p&gt;

&lt;p&gt;In the end, it's about &lt;strong&gt;feeling confident with what you offer towards your clients&lt;/strong&gt;, but that does not mean you have to be an absolute expert with ten years of experience in that. Having an open mind towards understanding that becoming professional in any job is a &lt;strong&gt;continous journey of self-learning and self-improvement&lt;/strong&gt;,  is much more important than knowing everything (which is not even possible in our fast-paced world where technology evolves daily). It's also tremendously easier to be excellent in &lt;strong&gt;something that you have a passion for&lt;/strong&gt;, than trying to sell a version of yourself that does not represent your character and skills.&lt;/p&gt;




&lt;h3&gt;
  
  
  Am I already good enough or should I continue working for an employee to gain more knowledge?
&lt;/h3&gt;

&lt;p&gt;I would not advice to jump into becoming a freelancer directly after university, except for bridging some time before another job starts while gaining work experience in the meantime and earning money. In my oppinion, it's &lt;strong&gt;much better to gain sufficient careeer capital first and cash that in&lt;/strong&gt;, as I was explaining in &lt;a href="https://dev.to/maxritter/follow-your-passion-is-this-really-a-good-career-advice-2f3o"&gt;this post&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Remember that any career decision is &lt;strong&gt;not a one-way street&lt;/strong&gt;, so even if you felt you made the "wrong decision" afterwards, you learned something out of it about yourself for the future. For me, a course of life is not a straight line, but trying what interests you and finding out if that matches your passion and imgation of how a good life looks like. That means that &lt;strong&gt;sometimes you need to decide against advices from your environment&lt;/strong&gt;, which might tell you to follow the "ordinary path" of leveling up in a corporate or not risking your well-paid job for the adventure of freelancing.&lt;/p&gt;




&lt;h3&gt;
  
  
  What do I need to get started as a freelancer?
&lt;/h3&gt;

&lt;p&gt;There are a &lt;strong&gt;couple of prerequisites&lt;/strong&gt; that help to get projects faster, because they make you look professional. On the other hand, there is the unpopular topic of &lt;strong&gt;law and taxes&lt;/strong&gt;, which you also have to take care of when being self-employed. Those are the things I setup when starting my career in this field:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For promoting yourself towards clients, the one thing you should invest your most time into is creating a &lt;strong&gt;structured, professional looking CV&lt;/strong&gt;. It should include your &lt;strong&gt;latest project experience&lt;/strong&gt; and highlight your &lt;strong&gt;areas of expertise that you offer towards the client&lt;/strong&gt;. I have created &lt;a href="https://flowcv.com/resume/hcaa0q4wdd" rel="noopener noreferrer"&gt;mine&lt;/a&gt; with a &lt;strong&gt;online application called &lt;a href="https://flowcv.com/" rel="noopener noreferrer"&gt;FlowCV&lt;/a&gt;&lt;/strong&gt; and can highly recommend this one, as it is &lt;strong&gt;customizable, free and easy to use&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sign-Up for the digital communication channel with the Finanzamt&lt;/strong&gt; called &lt;a href="https://www.elster.de/elsterweb/start" rel="noopener noreferrer"&gt;ELSTER&lt;/a&gt;. This will allow you to send &lt;strong&gt;forms to the authority in a digital way&lt;/strong&gt;. If you have an ID Card that supports digital authentication via your smartphone and NFC, use this way to register, so you are already authenticated.&lt;/li&gt;
&lt;li&gt;Open a &lt;strong&gt;separate banking account for your business expenses&lt;/strong&gt;. This is important because it will help you to build reserve assets for the personal income tax and also make your bookkeeping easier. My recommendation in this space is &lt;a href="https://kontist.com/" rel="noopener noreferrer"&gt;Kontist&lt;/a&gt;, as it was build towards freelancers and has &lt;strong&gt;smart features that help you to simplify your accounting a lot&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Register as a Freelancer&lt;/strong&gt; and get your tax ID. You can either do this over ELSTER  oruse &lt;a href="https://app.getsorted.de/app/tax-registration/personal-details" rel="noopener noreferrer"&gt;this form&lt;/a&gt; that simplifies the registration process. &lt;strong&gt;This process can take 3-6 weeks&lt;/strong&gt;, so do the step &lt;strong&gt;as early as possible&lt;/strong&gt;. You can also do this together with your tax accountant if you are unsure about what to fill in&lt;/li&gt;
&lt;li&gt;Decide how you want to do your &lt;strong&gt;tax filling&lt;/strong&gt;. If you &lt;strong&gt;do not have any complicated bookings&lt;/strong&gt;, you can use the automated &lt;a href="https://kontist.com/product/kontist-complete/" rel="noopener noreferrer"&gt;Kontist Complete&lt;/a&gt; solution to do all your business related bookkeeping as well as submitting the &lt;strong&gt;Umsatzsteuer-Voranmeldung&lt;/strong&gt;. In your income tax declaration that you do on a yearly basis, you then just have to enter the results from the &lt;strong&gt;Einnahmen-Überschuss-Rechnung (EÜR)&lt;/strong&gt; from Kontist and append the documents that Kontist has created for you. I am doing this and using &lt;a href="https://www.smartsteuer.de/online/" rel="noopener noreferrer"&gt;SmartSteuer&lt;/a&gt; for my income tax declaration, but you can also do it on ELSTER which is free (but more complicated). If you are unsure what to do, you can book tax accountancy, f. ex. with &lt;a href="https://kontist-steuerberatung.de/" rel="noopener noreferrer"&gt;Kontist Steuerberatung&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Get a &lt;strong&gt;professional liability&lt;/strong&gt;. Especially larger clients require you to have one, but it's a good practice in general to &lt;strong&gt;cover you from any mistakes that you might make and that can cost a lot of money&lt;/strong&gt;. I would recommend to set the insurance amount to at least one million euro, as this can go quickly if you are responsible for a nasty bug in a production system. You can use the &lt;a href="https://www.check24.de/versicherungen/lexikon/berufshaftpflichtversicherung/" rel="noopener noreferrer"&gt;Check24&lt;/a&gt; comparison service to find a suitable insurance company&lt;/li&gt;
&lt;li&gt;Creating a well-trimmed profile on &lt;a href="https://www.linkedin.com/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; is essential, as possible clients will search you on this platform first. If you want to stand out, &lt;strong&gt;create good content from time to time showcasing what your interests are&lt;/strong&gt;. Those can be short posts highlighting new updates / trends or you can write longer blog articles, f. ex. on dev.to, and publish them in your LinkedIn profile. Extend &lt;strong&gt;your network on this platform&lt;/strong&gt;, it definitely pays out on the long run&lt;/li&gt;
&lt;li&gt;Take &lt;strong&gt;professional photos&lt;/strong&gt; for your &lt;strong&gt;website, LinkedIn and CV&lt;/strong&gt;. Most IT Freelancers might not enjoy this, but it's super important to have a good first impression towards clients. A good photographer will cost you some money, as the shooting will catch you in different positions and take 1-2 hours. A cost-effective alternative would be to use a service like &lt;a href="https://portraittogo.com/" rel="noopener noreferrer"&gt;Portrait To Go&lt;/a&gt; &lt;strong&gt;to generate AI headshots&lt;/strong&gt; for you and see if their quality is sufficient enough&lt;/li&gt;
&lt;li&gt;Have a &lt;strong&gt;professional looking website&lt;/strong&gt; that embodies the services you want to sell to the clients later and your skills and experiences. &lt;a href="https://domains.google/" rel="noopener noreferrer"&gt;Reserve a domain&lt;/a&gt; and either build the website by yourself if you are a frontend / fullstack developer or use a website builder like &lt;a href="https://carrd.co/" rel="noopener noreferrer"&gt;Carrd&lt;/a&gt; or &lt;a href="https://www.stackbit.com" rel="noopener noreferrer"&gt;Stackbit&lt;/a&gt;. I used Carrd for &lt;a href="https://www.maxritter.net" rel="noopener noreferrer"&gt;my website&lt;/a&gt; and was able to build the result in half a day&lt;/li&gt;
&lt;li&gt;Decide whether you want to be in the &lt;strong&gt;public or private insurance&lt;/strong&gt;. I decided to go for private as it offers much better features and at the same time is cheaper for me for the amount of money I am making. But this highly depends also on the fact whether you want to get children and married later on and which provider you choose. &lt;strong&gt;There are cheap private insurances that might cost you a ton more later when you are retired, so pick one carefully&lt;/strong&gt;. I chose ottonova and are very happy with their services in the "First Class" tier. They also provide a &lt;a href="https://www.ottonova.de/spar-rechner" rel="noopener noreferrer"&gt;calculator&lt;/a&gt; where you can compare their monthly rates to being in the public insurance. If you go private, set your patients contribution rate to a low number (10%) and definitely choose to insure a sick pay from day 43 onwards&lt;/li&gt;
&lt;li&gt;Decide how you will &lt;strong&gt;save money for your retirement&lt;/strong&gt;. As a freelancer in Germany, you do not have to be part of the public pension system and while it's sad to say so due to community reasons, I would not advocate to be part of it. What I can recommend is &lt;a href="https://www.mypension.de/" rel="noopener noreferrer"&gt;myPension&lt;/a&gt;, a company that let's you build &lt;strong&gt;a global diversified ETF based portfolio in a tax-advantaged way&lt;/strong&gt;. You can change or pause your monthly rates whenever you want and also cancel it immediately in case you need the money instantly, which is a flexibility not pausible at traditional providers. MyPension has &lt;a href="https://www.mypension.de/tools/rentenlueckenrechner" rel="noopener noreferrer"&gt;good tools&lt;/a&gt; that help you &lt;strong&gt;determining how much you need to save per month to have a relaxed pension later on&lt;/strong&gt;. The profits are automatically re-invested so they are tax-free until you cash them out during retirement&lt;/li&gt;
&lt;li&gt;Have some &lt;strong&gt;savings as backup&lt;/strong&gt; in case you are not directly getting a project or a project ends earlier than expected, leaving a gap between this and the next one. One the one side, this &lt;strong&gt;makes freelancing in general less stressful&lt;/strong&gt;, because you know that even if things don't work well from the beginning on, you will still be able to cover all your expenses. On the other side, &lt;strong&gt;you are able to present your desired hourly wages more confidently in front of clients&lt;/strong&gt; during the interview, because you know you are not dependent on their goodwill. From my experience, having a &lt;strong&gt;runway of 6-12 months is a good value&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Independent from being a freelancer, having an &lt;strong&gt;own-occupation disability&lt;/strong&gt; insurance is something I consider to be of high value. You never know what will happen to your work performance in the next decades and that does not have to be on the physical side. &lt;strong&gt;Modern jobs can be stressful and demand a high mental load&lt;/strong&gt;, so mental illnesses are becoming more and more dominant. &lt;strong&gt;Protect yourself from this worry and setup an insurance that at least covers your most basic costs of living&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  How do I find projects and clients?
&lt;/h3&gt;

&lt;p&gt;It certainly helps if you already have a network of decision makers that know how you work and want to work together with you as a freelancer. But it's definitely not a must and you can basically &lt;strong&gt;start from zero and start building your network from there&lt;/strong&gt;. There are a couple of platforms that help to find projects in the German area. You can already register there even if you are not yet self-employed, in order to find out how many projects are matching your skills and interests. Here are the sites I am using: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.freelancermap.de/" rel="noopener noreferrer"&gt;freelancermap&lt;/a&gt;&lt;/strong&gt;: Probably the biggest one, if you only want to pick one platform go for this one. When I started in August, I arranged all of my get-to-know meetings there and one of those lead to the assignment that I am currently still into&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.freelance.de/" rel="noopener noreferrer"&gt;freelance.de&lt;/a&gt;&lt;/strong&gt;: Similar to freelancermap and might be the second biggest platform out there&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://freelance.ferchau.com/" rel="noopener noreferrer"&gt;Ferchau&lt;/a&gt;&lt;/strong&gt;: A platform that offers a wide range of freelance opportunities across the DACH region&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://app.9am.works/" rel="noopener noreferrer"&gt;9am.works&lt;/a&gt;&lt;/strong&gt;: Innovative freelance platform with many offers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://uplink.tech/" rel="noopener noreferrer"&gt;Uplink&lt;/a&gt;&lt;/strong&gt;: IT Freelance network that uses Slack bots to handle interview scheduling, contracts, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://kommlink.catsone.com/careers/" rel="noopener noreferrer"&gt;KOMMLINk&lt;/a&gt;&lt;/strong&gt;: Has some offerings that might not be available on the other platforms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://boschlegendslab.com/" rel="noopener noreferrer"&gt;BOSCH Legends Lab&lt;/a&gt;&lt;/strong&gt;: Matches companies to Freelancers and has many BOSCH internal job offers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.talent.io/" rel="noopener noreferrer"&gt;talent.io&lt;/a&gt;&lt;/strong&gt;: If you want to have someone who matches you to projects based on your interest and availability, this could be for you. There is a get to know call with your personal talent advocate, in which you can articulate what you are looking for&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.gulp.de/" rel="noopener noreferrer"&gt;Gulp&lt;/a&gt;&lt;/strong&gt;: Similar to freelancermap in the way it works. If you signup you will also get emails regulary with job offers that match the criteries of your desired project&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.linkedin.com/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/strong&gt;: Although the job search engine is not really focused on Freelancers yet, from time to time there are also offers that you can take when self-employed. Another strategy is to just apply on fulltime position that match your skills and desires and add that you are working as Freelancer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most likely when using those platforms (except for LinkedIn), there is a &lt;strong&gt;recruiting company between you and the real client&lt;/strong&gt;. They often charge an hourly rate that is put on top of your own hourly salary, so their services are basically free for you and have to be paid by the client. However, the client in the end sees the final rate and that means that your hourly rate can be lower, if there is a maximum limit for the position. From my experience, the hourly range of their services is between 10-20€ per hour.&lt;/p&gt;

&lt;p&gt;Concerning &lt;strong&gt;project length&lt;/strong&gt;, my personal preference is to have &lt;strong&gt;one client for a couple of weeks or months&lt;/strong&gt; instead of having multiple small ones that only last a couple of days or working for several clients in parallel. &lt;strong&gt;Every project involves some paperwork and additional time spend on it that you can't directly charge to the client&lt;/strong&gt;, for example interviews, account setup, etc. If you work for one client only you &lt;strong&gt;have a better focus&lt;/strong&gt; and there is a smaller risk of overworking during stressful periods of the year, when multiple clients would expect you to finish a tight deadline.&lt;/p&gt;

&lt;p&gt;Remember changing the project after a couple of months in order not to risk being treated as &lt;strong&gt;&lt;a href="https://www.gulp.de/direkt/top-themen/scheinselbststaendigkeit" rel="noopener noreferrer"&gt;Scheinselbstständig&lt;/a&gt;&lt;/strong&gt; by the government authorities. There are a some influential factors on this topic like &lt;strong&gt;the way you work for the client&lt;/strong&gt; (are you subject to directives? can you plan your vacations freely?) and &lt;strong&gt;how you represent your services to the outer world&lt;/strong&gt; (via a website or social media profiles). It's good to talk about this topic with your professional accountant, as he/she can give you valuable tips what to do and what to avoid. In case you have a recruiting company between yourself and the client, they also take care to avoid the topic of Scheinselbstständigkeit by &lt;strong&gt;setting up contracts and legal frameworks&lt;/strong&gt; in a way that it is unlikely to happen.&lt;/p&gt;




&lt;h3&gt;
  
  
  What is the hourly or daily rate that I should demand in the beginning and later on?
&lt;/h3&gt;

&lt;p&gt;That varies on the domain you are working in and the work related expertise that you bring to the project and client. I would advice to &lt;strong&gt;search for salary surveys or studies&lt;/strong&gt; to get a profound idea what you can ask for, then look confident while representing that number in interviews. In my area of AWS cloud development, there is &lt;a href="https://www.jeffersonfrank.com/de/insights/aws-market-trends-salary-survey" rel="noopener noreferrer"&gt;this study&lt;/a&gt; that shows &lt;strong&gt;a range of 80-125€/hour is common for such freelancer positions in Germany&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;In case you are asked for a project that does not look like the perfect fit and therefore you don't bother losing it, you can try to &lt;strong&gt;negotiate to be on the upper range of the hourly salary rate&lt;/strong&gt;. Even if it does not work out at the end, you will strenghten your negotation skills which is a needed expertise, as freelancing is basically selling yourself in the best way possible. If you really want to get the project, put yourself in the middle of the range, especially if this is your first job. &lt;strong&gt;You can always raise your hourly rates in the projects to come&lt;/strong&gt; and I would recommend doing so to &lt;strong&gt;counterweight at least the current inflation rate&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  How much can I earn per month?
&lt;/h3&gt;

&lt;p&gt;This &lt;strong&gt;depends on many factors&lt;/strong&gt;, but let's say you are working on an &lt;strong&gt;hourly rate of 110€, giving you a daily rate of 880€&lt;/strong&gt;. As you also want to have some spare time for professional training, certifications, networking and side-projects, you are working &lt;strong&gt;only four days / 32 hours per week&lt;/strong&gt; for clients. The downside of being self-employed is &lt;strong&gt;that public holidays (~12 / year), vacations (~ 30 / year) and sick days (~ 5 / year) are unpaid&lt;/strong&gt;, so you have to calculate for those as well, substracting around 4 days per month from your working days. On the gross income side, that leaves you with 96 payable hours times 110€ per hour, giving you a &lt;strong&gt;monthly paycheck of around 10560€&lt;/strong&gt; from the client. &lt;/p&gt;

&lt;p&gt;The biggest position that goes away from that number are &lt;strong&gt;personal income taxes&lt;/strong&gt;. You can use &lt;a href="https://kontist.com/taxator/" rel="noopener noreferrer"&gt;Taxator&lt;/a&gt; or the &lt;a href="https://www.bmf-steuerrechner.de/ekst/eingabeformekst.xhtml" rel="noopener noreferrer"&gt;Official Tool&lt;/a&gt; to calculate how much that is for your circumstances. The "normal" range for an IT Freelancer would be 30-35% when not being married and having no children. When you use a &lt;strong&gt;service like Kontist, it automatically calculates the amount you need to save for the taxation office&lt;/strong&gt; for every payment you receive from the client (both personal income taxes and VAT, the latter is a transit item), so you only transfer the remaining amount to your private bank account. &lt;/p&gt;

&lt;p&gt;Keep in mind that you do &lt;strong&gt;not have to pay taxes on your whole income, but only the actual profit&lt;/strong&gt;. That means that you can &lt;strong&gt;deduct a &lt;a href="https://steuererklaerung.de/ratgeber-steuern/selbststaendig-freiberufler-was-kann-von-steuer-abgesetzt-werden/" rel="noopener noreferrer"&gt;lot of expenses&lt;/a&gt; that are related to your work as freelancer from the gross income&lt;/strong&gt;, before actually applying the income tax to it. Some costs that I offset on a monthly basis against the taxes are: &lt;strong&gt;leasing rate for my car, insurances,  fuel costs, any electrical devices (laptop, monitor, smartphone), internet and cell phone contract, software, licenses, website, literature, certification, conferences&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;I hope this article has provided you with &lt;strong&gt;valuable insights to help you make an informed decision about pursuing self-employment&lt;/strong&gt; in the future and the &lt;strong&gt;necessary steps to take&lt;/strong&gt;. It's important to note that &lt;strong&gt;self-employment may not be suitable for everyone&lt;/strong&gt;, as it requires a certain level of self-motivation, professionalism, and time management skills. However, the &lt;strong&gt;potential rewards can be significant&lt;/strong&gt;. Personally, *&lt;em&gt;I am delighted to have embarked on my journey as an IT Freelancer. *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you would like to&lt;/strong&gt; learn more about &lt;strong&gt;my services and other related topics&lt;/strong&gt;, you &lt;strong&gt;can connect with me on &lt;a href="https://www.linkedin.com/in/rittermax/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/strong&gt;   or &lt;strong&gt;visit &lt;a href="https://maxritter.net/" rel="noopener noreferrer"&gt;my personal website&lt;/a&gt;&lt;/strong&gt;. &lt;strong&gt;Feel free to also share your thoughts&lt;/strong&gt; on the topic in the comments section below.&lt;/p&gt;

</description>
      <category>career</category>
      <category>motivation</category>
      <category>beginners</category>
      <category>freelance</category>
    </item>
    <item>
      <title>„Follow your passion“ - Is this really a good career advice?</title>
      <dc:creator>Max Ritter</dc:creator>
      <pubDate>Sat, 07 Aug 2021 13:02:55 +0000</pubDate>
      <link>https://dev.to/maxritter/follow-your-passion-is-this-really-a-good-career-advice-2f3o</link>
      <guid>https://dev.to/maxritter/follow-your-passion-is-this-really-a-good-career-advice-2f3o</guid>
      <description>&lt;p&gt;My career assumption since finishing university has always been: &lt;strong&gt;Find out what you're passionate about, then find a job that matches this passion&lt;/strong&gt;. This involves regular deep thinking like asking "Who am I?", "What do I truly love?", "What are my hidden talents?" and always challenging whether your current job and position matches the high expectations that you have put yourself on them. &lt;strong&gt;I am not the only one approaching career planning like this&lt;/strong&gt;, it's a &lt;strong&gt;common mindset supported by persons like Steve Jobs&lt;/strong&gt;, who talked about it in his &lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=UF8uR6Z6KLc&amp;amp;ab_channel=Stanford" rel="noopener noreferrer"&gt;famous Stanford speech from 2005&lt;/a&gt;&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;But &lt;strong&gt;there is another approach&lt;/strong&gt;, and it's quite the opposite of what Jobs is selling as the path to success, fulfillment and happiness: &lt;strong&gt;Don't follow your passion&lt;/strong&gt;. This sounds counter-intuitive and weird at first glance and it took me some time to better understand the concept behind it. Hold on with me as I will explain it to you, as it's much more than the negotiation of the passion hypothesis. I challenged my view on this question when I first read the chapter called "&lt;strong&gt;Burned out with passion - about our dangerous search for passion&lt;/strong&gt;" in a book from the German psychologist Dr. Leon Windscheid named &lt;strong&gt;"&lt;a href="https://www.amazon.com/-/de/dp/3499003775/ref=sr_1_1?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;amp;keywords=Leon+Windscheid&amp;amp;qid=1628336353&amp;amp;sr=8-1" rel="noopener noreferrer"&gt;Feeling Better: A Journey to Serenity&lt;/a&gt;"&lt;/strong&gt;. I was curious to see if there are other famous people supporting this &lt;strong&gt;anti-passion mindset&lt;/strong&gt;. And indeed, there is a &lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=uaSqh4DiQSw&amp;amp;ab_channel=a16z" rel="noopener noreferrer"&gt;speech from the well-known investor Ben Horrowitz&lt;/a&gt;&lt;/strong&gt; from 2015 at Columbia University, that has a very interesting take on this principle. A real eye opener for me was to finally read &lt;strong&gt;"&lt;a href="https://www.amazon.com/-/de/dp/1455509124/ref=tmm_hrd_swatch_0?_encoding=UTF8&amp;amp;qid=1628336167&amp;amp;sr=8-1" rel="noopener noreferrer"&gt;So Good They Can't Ignore You: Why Skills Trump Passion in the Quest for Work You Love&lt;/a&gt;"&lt;/strong&gt; from Cal Newport, who presented an alternative approach to following your passion.&lt;/p&gt;

&lt;p&gt;So what is it, and why is not everyone doing it if it works so well? Let me introduce the &lt;strong&gt;craftsman mindset&lt;/strong&gt; to you: It's an approach to your working life in which you &lt;strong&gt;focus on the value of what you are offering to the world, instead of following the passion mindset, in which you focus on the value your job is offering to you&lt;/strong&gt;. The word focus is important here, because depending on what goals you pursue, the &lt;strong&gt;same kind of work can be perceived totally different&lt;/strong&gt;. When you constantly try to optimize your job satisfaction by the pursuit of self-fulfillment, this can instead lead to chronic dissatisfaction and &lt;strong&gt;daydreaming about the better jobs that just need to be discovered&lt;/strong&gt;. According to Newport, what you should do instead is is to &lt;strong&gt;get good at something rare and valuable&lt;/strong&gt;, and then cash in the &lt;strong&gt;career capital&lt;/strong&gt; into something that defines a great job for you. &lt;/p&gt;

&lt;p&gt;There is the famous &lt;strong&gt;10.000 hour rule&lt;/strong&gt;, popularized by Malcolm Gladwell in his book from 2008 called "Outliers", &lt;strong&gt;describing the amount of practice time required to master a skill in perfection&lt;/strong&gt;. It requires deliberate practice to stretch your skill past the comfort zone and to receive ruthless feedback in order to improve it continuously. That's why &lt;strong&gt;most knowledge workers avoid this style of skill development&lt;/strong&gt;, because frankly, it's really uncomfortable. But in order to &lt;strong&gt;build up a long-lasting career based on the accumulation of career capital&lt;/strong&gt;, becoming so good at something that you can't be ignored anymore (hence the title of Newport's book) is a valuable asset in your portfolio. Building upon that, &lt;strong&gt;you can create work you love&lt;/strong&gt;, but you first have to understand the various traps that can distract your focus on its way.&lt;/p&gt;

&lt;p&gt;Having &lt;strong&gt;control&lt;/strong&gt; over the way you work, the people you work with and your working duration and schedule is one of the greatest traits to acquire when you have &lt;strong&gt;built up enough career capital that people want to work with you&lt;/strong&gt;. But only then it works out, and &lt;strong&gt;switching a job too early in search of control&lt;/strong&gt; when the basic foundation or skills are not yet there can be dangerous. Let's take the example of an experienced software developer, who has been working for years at a software company, but now wants to gain more control about his time and therefore quits his job. &lt;strong&gt;This can be a good or bad decision&lt;/strong&gt;, depending on whether &lt;strong&gt;sufficient career capital has been build&lt;/strong&gt; up for that new position or not. &lt;/p&gt;

&lt;p&gt;In case this person wants to become an IT Freelancer and &lt;strong&gt;provide his clients with the same skills that he has already mastered in the previous years&lt;/strong&gt; and brought to a high level of professionalism, &lt;strong&gt;there will be for most likely a market that will pay for it&lt;/strong&gt;. The added control about with whom to work and when to work can be a big benefit, for example when this person &lt;strong&gt;negotiates to only work 4 days a week and gets paid a high hourly or daily rate&lt;/strong&gt; by providing expert services to its customers. In contrast, if this developer now tries to make a living by opening a Yoga studio, but has only learned to practice Yoga with some online courses up to this point, &lt;strong&gt;that's might be not so clever&lt;/strong&gt;. I am not saying that changing careers is bad per-se, but as we learned previously it &lt;strong&gt;takes a lot of time to master a skill so people are willing to pay for it&lt;/strong&gt;, and this can be stressful if your main income goes away in the meantime. &lt;/p&gt;

&lt;p&gt;For me, the &lt;strong&gt;clarity that the craftsmen mindset brings is refreshing&lt;/strong&gt;, as it allows me to &lt;strong&gt;sidestep the anxious questions generated by the passion hypothesis&lt;/strong&gt; and to safely abandon the myth that there’s a single right job waiting out there for me to be found. Instead, I can &lt;strong&gt;focus on building up career capital&lt;/strong&gt; by offering services that I am good at and that are at the same time in demand by the market. I think it's still great if &lt;strong&gt;what you do aligns well with your passion&lt;/strong&gt; (I am lucky enough that this is the case for me), but &lt;strong&gt;it should not be a prerequisite to building up a compelling career&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In this article, I was only able to touch the tip of the iceberg on what Newport is describing in &lt;a href="https://www.amazon.com/Good-They-Cant-Ignore-You/dp/1455509124" rel="noopener noreferrer"&gt;his book&lt;/a&gt;. I hope you got the basic idea of a different strategy on how to design your career path, that with patience and effort will allow you to create a profession full of control, flexibility, influence, and creativity.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;For more content, check out my personal blog: &lt;a href="https://www.maxritter.net" rel="noopener noreferrer"&gt;https://www.maxritter.net&lt;/a&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>startup</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>How I developed a low-cost thermal imager over the course of 12 years</title>
      <dc:creator>Max Ritter</dc:creator>
      <pubDate>Sat, 29 May 2021 18:22:14 +0000</pubDate>
      <link>https://dev.to/maxritter/how-i-developed-a-low-cost-thermal-imager-over-the-course-of-12-years-2002</link>
      <guid>https://dev.to/maxritter/how-i-developed-a-low-cost-thermal-imager-over-the-course-of-12-years-2002</guid>
      <description>&lt;h2&gt;
  
  
  And what it told me about the power of side-projects for professional development
&lt;/h2&gt;

&lt;p&gt;In this post, I want to talk about a &lt;strong&gt;side project&lt;/strong&gt; of me that I have been working on for over 12 years now in my spare time: The &lt;strong&gt;&lt;a href="https://www.diy-thermocam.net/" rel="noopener noreferrer"&gt;DIY-Thermocam&lt;/a&gt;&lt;/strong&gt;. It is a low-cost, do-it-yourself thermal imager, which aim is to give &lt;strong&gt;private persons&lt;/strong&gt;, &lt;strong&gt;educational institutes&lt;/strong&gt; and &lt;strong&gt;companies&lt;/strong&gt; access to a &lt;strong&gt;portable&lt;/strong&gt;, &lt;strong&gt;affordable&lt;/strong&gt; and &lt;strong&gt;customizable&lt;/strong&gt; thermal imaging platform that is based on &lt;strong&gt;open-source software and hardware&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Everything started back in &lt;strong&gt;2009&lt;/strong&gt;, when I was still in secondary school. A good friend of mine and me were looking for a topic to participate in "Jugend forscht", a science competition in Germany. Our physics teacher bought an infrared thermometer and asked whether someone wants to work with it. We did a small investigation and had the idea that it could be possible to create thermal images out of a single sensor, by moving it over a surface with motors. Said and done, the idea for the &lt;strong&gt;first prototype&lt;/strong&gt; of the &lt;strong&gt;Cheap-Thermocam&lt;/strong&gt; was born:  A heavy steel machine that &lt;a href="https://www.augsburger-allgemeine.de/mindelheim/Energie-sparen-mit-Waermebildkameras-id5248341.html" rel="noopener noreferrer"&gt;we build in our hometown&lt;/a&gt; together with an industrial company:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmduzhmccx16ke43bntp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmduzhmccx16ke43bntp.jpg" width="400" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With a slightly improved and already smaller version of this device, we &lt;strong&gt;won the &lt;a href="https://www.augsburger-allgemeine.de/mindelheim/Zwei-Botschafter-fuer-Jugend-forscht-id8204211.html" rel="noopener noreferrer"&gt;Jugend forscht ambassador Bavaria award&lt;/a&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa2gjuzg4w6btj0h1qphs.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa2gjuzg4w6btj0h1qphs.jpg" width="400" height="174"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Shortly after the contest, I put the assembly instructions for the prototype called &lt;strong&gt;Cheap-Thermocam V1&lt;/strong&gt; online because I thought it would be a shame if it is not used anymore. The device looked pretty wild back then:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feu66gry353jxhyho2b18.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feu66gry353jxhyho2b18.jpg" width="400" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But a &lt;strong&gt;couple of makers around the world&lt;/strong&gt; picked up the idea and build their own versions of it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuo49i3gniceqxc3mwnpe.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuo49i3gniceqxc3mwnpe.jpg" width="400" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inspired by the positive feedback&lt;/strong&gt;, I took the next step in &lt;strong&gt;2013&lt;/strong&gt; and created an upgrade called &lt;strong&gt;Cheap-Thermocam V2&lt;/strong&gt;, that already looked more professional and had a small touch screen for user input:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8wnzdu0i3xmgknnz8c33.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8wnzdu0i3xmgknnz8c33.jpg" width="400" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In mid &lt;strong&gt;2014&lt;/strong&gt;, I released another upgrade called &lt;strong&gt;Cheap-Thermocam V3&lt;/strong&gt;, that featured a bigger screen and an improved design, looking more like a regular photographic camera: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6yqodltmi079vvc0f26g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6yqodltmi079vvc0f26g.jpg" width="400" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It catched &lt;a href="https://hackaday.com/2014/06/04/cheap-thermocam-gets-an-impressive-rehaul/" rel="noopener noreferrer"&gt;some press coverage&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2iixpei7qnmjdrnhfhxe.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2iixpei7qnmjdrnhfhxe.jpg" width="400" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And I created a couple of those devices for people who wanted to have it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbbzb79uipqsro9n14fr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbbzb79uipqsro9n14fr.jpg" width="400" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One big limitation of the device was always the single IR sensor, that only allowed a limited thermal resolution. This changed with the introduction of the &lt;strong&gt;FLIR Lepton thermal array sensor&lt;/strong&gt; in &lt;strong&gt;2014&lt;/strong&gt;, that I quickly integrated into the device:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ng822f6k5axnbzxf6dz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ng822f6k5axnbzxf6dz.jpg" width="400" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;DIY-Thermocam V1&lt;/strong&gt; was born in &lt;strong&gt;early 2017&lt;/strong&gt;, and magazines like &lt;a href="https://makezine.com/projects/diy-thermocam/" rel="noopener noreferrer"&gt;Makezine&lt;/a&gt; and &lt;a href="https://www.golem.de/news/diy-thermocam-v2-student-entwickelt-preiswerte-open-source-waermebildkamera-1702-126031.html" rel="noopener noreferrer"&gt;Golem&lt;/a&gt; reported about it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnghad3s79e1fylwbir92.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnghad3s79e1fylwbir92.jpg" width="400" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It turned into the &lt;strong&gt;DIY-Thermocam V2&lt;/strong&gt; in &lt;strong&gt;late 2017&lt;/strong&gt;, and for the first time was really a device that was sold worldwide over a partner company in the United States called &lt;a href="https://groupgets.com/manufacturers/diycam-thermocam/products/diy-thermocam" rel="noopener noreferrer"&gt;GroupGets&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftx41pptek0x87f37vygd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftx41pptek0x87f37vygd.jpg" width="400" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Between 2017 and early 2021&lt;/strong&gt;, I stopped working on the project because I spent all of my time in the &lt;strong&gt;startup world&lt;/strong&gt;, where I worked in different positions and roles: First employee, lead developer, team lead and co-founder. But during the third wave of the pandemic in &lt;strong&gt;early 2021&lt;/strong&gt;, I finally found some time to work on the project again and released the latest version of it, the &lt;strong&gt;DIY-Thermocam V3&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqotjszwdy3kyed3zdocg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqotjszwdy3kyed3zdocg.jpg" width="400" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Version 3&lt;/strong&gt; has been redesigned to offer &lt;strong&gt;3x the performance&lt;/strong&gt; of the predecessor, making &lt;strong&gt;thermal imaging much more accessible and fun&lt;/strong&gt;. The device is like its previous versions offered as a &lt;strong&gt;do-it-yourself kit&lt;/strong&gt;, that consists of around &lt;strong&gt;100 parts&lt;/strong&gt; and can be assembled at home by using simple tools in &lt;strong&gt;2-3 hours&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4bmaobl4gisn10abyjjf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4bmaobl4gisn10abyjjf.jpg" width="400" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For 12 years&lt;/strong&gt;, this project has companioned me during my career and I &lt;strong&gt;learned a lot from it&lt;/strong&gt;, especially from all those (costly) mistakes I did. &lt;strong&gt;Start small and iterate quickly&lt;/strong&gt;, go out and show it to &lt;strong&gt;real people&lt;/strong&gt; as early as possible. Even if it is not successful, you will &lt;strong&gt;make your learnings&lt;/strong&gt; and one of the next projects will be a success for sure, because you can only get better by &lt;strong&gt;failing and standing up again&lt;/strong&gt;. Or as a famous quote from &lt;strong&gt;Reid Hoffman&lt;/strong&gt; says: "If you're not embarrassed by the first version of your product, you've launched too late."&lt;/p&gt;




&lt;p&gt;For more content, check out my personal blog: &lt;a href="https://www.maxritter.net" rel="noopener noreferrer"&gt;https://www.maxritter.net&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sideprojects</category>
      <category>opensource</category>
      <category>career</category>
      <category>cpp</category>
    </item>
    <item>
      <title>The Maker‘s schedule vs. the Manager‘s schedule</title>
      <dc:creator>Max Ritter</dc:creator>
      <pubDate>Fri, 26 Mar 2021 07:18:48 +0000</pubDate>
      <link>https://dev.to/maxritter/the-maker-s-schedule-vs-the-manager-s-schedule-18an</link>
      <guid>https://dev.to/maxritter/the-maker-s-schedule-vs-the-manager-s-schedule-18an</guid>
      <description>&lt;p&gt;&lt;strong&gt;This morning I found an &lt;a href="http://www.paulgraham.com/makersschedule.html" rel="noopener noreferrer"&gt;interesting article&lt;/a&gt; from Paul Graham (Co-founder of Y Combinator, a startup accelerator in Mountain View, California) about the Maker‘s schedule vs. the Manager‘s schedule, that was kind of an eye opener for me. Although the article is over 10 years old, it's still as relevant as ever and described to me what I was not able to put into words on my own for quite a long time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I've always wondered whether it is only me who has a hard time balancing deep flow states during coding/thinking with meetings or virtual coffees. If you are on a manager's schedule, it totally makes sense to fill the day with as many blocks of 30 minutes meetings as you could, because each single one is an opportunity to meet new people, learn something new or understand an existing concept better with additional input. I have those days on a manager's schedule from time to time, and I especially enjoy the random surprises you can get when taking time to connect to your network and discuss topics from work related staff to the purpose of the universe. &lt;/p&gt;

&lt;p&gt;However, when I am on a maker's schedule (which is my usual way of working), I try to divide my day into two big parts: the morning and the evening. Then I schedule my meetings around, f. ex. a daily standup in front of the morning block, or having some virtual coffees at the end of my afternoon block. Of course this is not always possible and especially spontaneous meetings that sound important can crush your schedule, but I try to stick to this principle as often as possible. The reason for doing so are for me clearly the hidden context switching costs, that sum up every time you switch from deep work to another task. &lt;a href="https://www.ics.uci.edu/~gmark/chi08-mark.pdf" rel="noopener noreferrer"&gt;Research shows&lt;/a&gt; it takes an average of 23 minutes to regain focus after a distraction because different parts of your brain are activated every time you switch between tasks, even ones as simple as answering a teammate’s question while updating a report or attending a meeting right after another ends. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I hope you found those thoughts and the mentioned article helpful  and it supports you to achieve a better balance between being productive and spending time on communication. There is no free lunch, so blocking half-a-day means saying no to other obligations from time-to-time, which in turn may offend the people that wanted  to talk to you. But if you can explain to them why you are so careful about your distraction-free time, they hopefully understand that it's not a disinterist that is behind the decision, but rather a different way of working and a priorization of deep work.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;For more content, check out my personal blog: &lt;strong&gt;&lt;a href="https://www.maxritter.net" rel="noopener noreferrer"&gt;https://www.maxritter.net&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>startup</category>
      <category>beginners</category>
      <category>career</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Why I quit my job as a co-founder of a successful startup</title>
      <dc:creator>Max Ritter</dc:creator>
      <pubDate>Sat, 06 Mar 2021 20:49:42 +0000</pubDate>
      <link>https://dev.to/maxritter/why-i-quit-my-job-as-a-co-founder-of-a-successful-startup-and-what-to-learn-from-it-about-success-and-happiness-3d8j</link>
      <guid>https://dev.to/maxritter/why-i-quit-my-job-as-a-co-founder-of-a-successful-startup-and-what-to-learn-from-it-about-success-and-happiness-3d8j</guid>
      <description>&lt;h4&gt;
  
  
  Founding a startup is sexy - at least that is the impression you get when you listen to tech media or watch "Die Höhle der Löwen" on German TV. There have been many success stories of startups doing an exit in the multi-million euro range, making their founders wealthy and prominent. But what you don't read on the media is what is behind every great achievement: Failures and hard work. In this article, I want to talk about my own experience of being an entrepreneur and co-founder of a mobility startup, and why I have decided to quit my job and take another direction in life.
&lt;/h4&gt;

&lt;p&gt;After finishing my masters degree, I have been working in the startup industry in Munich for a couple of years. I got to know a very intelligent and inspiring entrepreneur by accident and got hooked on his vision to start a company and work on human centered AI solutions with top talents. As I just came out of university, I had no idea what would await me in this mysterious startup world, but I was willing to give it a chance and go all-in. &lt;/p&gt;

&lt;p&gt;It turned out that I really liked the way startups work: Having little resources and no product, but great people and a common goal to build innovative products. Unlike the bigger companies I was working for during my studies, everyone seemed super motivated, and that was definitely not because of high salaries. What attracts talents instead is compensation over a steep learning curve and, at least for the first employees, (virtual) shares of the company that allow financial participation in the case of an exit.&lt;/p&gt;

&lt;p&gt;However, there is no free lunch. The "work hard play hard" methodology known from top consulting companies like Boston Consulting Group or McKinsey is also the common mantra in the startup world. Not by coincidence most people working in those companies are fresh graduates or at least under 30, so they have the energy required to work a 50-60 hour week and on top build up the missing knowledge in their free time to be prepared for the challenges ahead.&lt;/p&gt;

&lt;p&gt;I followed this lifestyle for quite a long time and learned a lot while doing so. In 2019, I took the next logical step for me at this time and co-founded my own startup - which was something I always wanted to try out. I gained plenty of business ideas while working for another startup in a niche market and saw a lot of unused potential. So did the four other co-founders and we quickly started a GmbH to turn our ideas into reality. &lt;/p&gt;

&lt;p&gt;We were lucky and had paying customers from the beginning, as well as great support from the startup ecosystem in Munich. After some months, we moved from the incubator space into our own office. By that time, we already closed our first investment round and hired a couple of people to scale the business. We planned to expand quickly and prepared our office space accordingly - then Corona hit us hard in March 2020. As a consequence, we cut costs wherever possible, starting with our own, already low founder salaries. &lt;/p&gt;

&lt;p&gt;At the same time, some events in my private life put additional stress on me. The countless over-hours and the "sky is the limit" credo started to fire back and put me into a downward spiral. I was not on the driver seat anymore and unable to make the required change to recover - which would have been already overdue at that time.&lt;/p&gt;

&lt;p&gt;In May 2020, things became worse. The company slowly recovered from the first lockdown of the pandemic, but my energy and wellbeing was on an all-time low. I though I was just overstressed and it would go away, once I slow down my work a bit and take some days off. But quite the opposite was true: The symptoms worsened over the next couple of days, making it impossible for me to continue my work. I was seriously concerned about my health now and talked to some doctors, who fortunately diagnosed me properly.&lt;/p&gt;

&lt;p&gt;Only then I realized that my symptoms did not came out of the blue, but were the result of constant pressure and stress that I had put on myself for all the years working in the startup industry. As a young person, one may think you can cope with it for such a long time, but for me it was just too much and my body responded in a way to prevent me from working and further damaging myself. I started asking myself questions: Am I happy? Is the path I had followed so far leading me to my real goals in life? Or am I only making the people around me happy? The reality at that time was that in other peoples view, I may have been successful; but in my own world I was miserably failing. &lt;/p&gt;

&lt;p&gt;I made a hard cut and decided to only focus on things that make me happy from now on. This included a total reorientation of my work-life balance towards taking more free time, cutting over-hours and spending my time on joyful tasks like self-learning, helping others and finding a workplace where people can grow together. I opened myself to mindfulness techniques like meditation and yoga, about which I will talk in another  article. After months of spending my time on the right things, my health is steadily recovering and I am valuing it over anything else now. &lt;/p&gt;

&lt;h4&gt;
  
  
  It took me years to figure out what is really important in life and what is not, to find a sustainable work life balance and to create my own definition of what is success. I hope my story can help you on your personal journey. To health and happiness!
&lt;/h4&gt;




&lt;p&gt;For more content, check out my personal blog: &lt;strong&gt;&lt;a href="https://www.maxritter.net" rel="noopener noreferrer"&gt;https://www.maxritter.net&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>startup</category>
      <category>beginners</category>
      <category>career</category>
      <category>devjournal</category>
    </item>
  </channel>
</rss>
