Blog NivelEpsilon

How to Survive Being a DevOps

In the ever-evolving landscape of technology, the role of DevOps has rapidly carved its indispensable niche. As experts bridging the chasm between development (Dev) and operations (Ops), DevOps professionals ensure that software is not just developed right, but also deployed right. Yet, I’m acutely aware of the current friction and debates regarding the longevity of the DevOps role, especially with emerging discussions about whether it will be overshadowed or even replaced by Platform Engineers. Regardless of these debates, the DevOps profession comes with its unique set of challenges. Here are some survival tips for thriving as a DevOps engineer:

  • Embrace Continuous Learning:
    The tech world never stands still, and neither should you. Tools, platforms, and methodologies keep evolving. Stay updated with the latest in the field, attend webinars, workshops, and conferences.
  • Automate Everything:
    The mantra of DevOps is automation. From continuous integration, continuous delivery (CI/CD) pipelines to infrastructure as code (IAC), the more you automate, the smoother your workflows will be.
  • Cultivate Soft Skills:
    DevOps isn’t just about technical knowledge. Communication, empathy, and collaboration skills are equally crucial. Often, you’ll be the bridge between teams with differing objectives; soft skills will be invaluable.
  • Prioritize Work-Life Balance:
    Burnout is a genuine concern in a role that can be 24/7 due to deployment schedules and uptime requirements. It’s essential to set boundaries, take breaks, and remember self-care.
  • Understand the Business:
    To offer the best solutions, you need to understand the business requirements and goals. This will not only make you more effective but also showcase your value to the organization.
  • Establish Clear Communication Channels:
    Since DevOps professionals often work at the intersection of various teams, establishing clear communication channels helps in reducing friction and miscommunication.
  • Celebrate Small Wins:
    In a fast-paced environment, it’s easy to move from one task to another without recognizing achievements. Celebrating small wins helps keep motivation high and fosters a positive team environment.
  • Seek Feedback and Continuously Improve:
    Constructive criticism is a tool for growth. Regularly seek feedback on your work, and be willing to iterate and improve upon your processes.
  • Stay Security Conscious:
    With the rise of cyber threats, a DevOps professional must always be security-minded. Ensure that security best practices are ingrained in every step of the development and deployment process.
  • Build a Supportive Network:
    Connect with fellow DevOps professionals. Having a support system can be an invaluable resource for sharing knowledge, best practices, and even venting about common challenges.

    Mastering the role of a DevOps hinges on a balance of technical acumen, soft skills, and a proactive approach to one’s well-being. With the right strategies and mindset, I’m sure that WE can handle the challenges of this role with resilience and success.

SRE Perspectives: Dependency Management in Modern Infrastructures

Dependency management is a cornerstone of successful software projects, transcending programming languages and architectural frameworks. As we embrace the shift towards service-based and microservices architectures, managing dependencies efficiently becomes even more crucial.

While at first glance, dependency management might seem straightforward, the intricacies can catch engineering teams off-guard. What begins as simply adding a few lines of code can turn into a complex ordeal as systems scale and evolve.

Within this context, collaboration between different roles, from software architects to Site Reliability Engineers (SREs), becomes pivotal. While architects play a leading role in determining and managing dependencies, SREs contribute their expertise to ensure that dependencies do not jeopardize the system’s stability, security, or performance.

Best Practices in Dependency Management

  • Leverage Dependency Management Tools: Tools like Ant, Maven, and Gradle make the process transparent, centralizing dependencies for easy maintenance and enhancement.
  • Harness Artifact Management Solutions: Solutions such as Nexus, Archiva, and Artifactory provide centralized repository management and effective caching, optimizing dependency management and accelerating build times.
  • Expunge Unused Dependencies: Removing unused dependencies is akin to cleaning up dead code—it reduces challenges during updates and streamlines the codebase.
  • Uphold Consistent Versioning: Adhering to standard versioning conventions prevents compatibility issues and reduces complexity. Maintain Separate Configurations: Sharing configurations across projects can create unnecessary coupling. It’s best to maintain separate configurations, except in the cases of monoliths or monorepos.
  • Regularly Update Dependencies: Staying updated is essential to address bugs, security issues, and reduce technical debt, ensuring smooth deployments and service continuity.
  • Prudent Management of Shared Dependencies: Careful handling of shared libraries is essential to prevent over-coupling and challenges during updates.

The Holistic View of Dependency Management

Dependency management is more than just tool utilization, it’s an integral part of organizational culture and thoughtful automation. Recognizing its role in the software development lifecycle is critical, as neglect can lead to significant operational and maintenance challenges.

In environments fervently adopting CI/CD, observability, DevOps, and SRE practices, it’s easy for dependency management to be overlooked. However, its significance remains paramount. Effective dependency management not only enhances development efficiency but also fortifies the long-term success of tech initiatives. Thus, it deserves the attention and meticulous care of all stakeholders involved, from developers to SREs.

Navigating Kubernetes: Understanding and Addressing the OutOfPods Error

When maneuvering through Kubernetes, one might often encounter the notorious “OutOfPods” error. This error message is predominantly seen when delving into the details of a pod that has failed to be scheduled, illustrated in the example below:

Name:        user-api-server-7869b4c8d9-qw4zp
Namespace:   default
Priority:    0
Node:        <none>
Labels:      app=user-api-server
Annotations: <none>
Status:      Pending
Reason:      Unschedulable
IP:          <none>
IPs:         <none>

Events:
  Type     Reason           Age                 From               Message
  ----     ------           ----                ----               -------
  Warning  FailedScheduling 4m32s (x7 over 5m)  default-scheduler  0/6 nodes are available: 3 OutOfPods, 6 node(s) had taints that the pod didn't tolerate.

In this context, the “Reason” field is categorized as “Unschedulable,” and the “Message” field clarifies why the pod couldn’t be scheduled. In this scenario, three nodes have reached their scheduling capacity, denoted by “3 OutOfPods.”

Understanding the OutOfPods Error
The “OutOfPods” error signifies that a node has surpassed its pod allocation capacity. Each node within a Kubernetes cluster harbors a specific threshold on the number of pods it can operate, influenced by several factors including the node’s specific configuration and the overall cluster setting.

To investigate this limit, the command kubectl describe node can be employed:

Capacity:
  cpu:                1
  ephemeral-storage:  47145992Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  hugepages-32Mi:     0
  hugepages-64Ki:     0
  memory:             6058428Ki
  pods:               110

Both the “Capacity” and “Allocatable” fields illustrate the maximum number of pods that can be scheduled on the node.

Strategies to Mitigate OutOfPods Error
When confronted with an “OutOfPods” error, it reveals that the node has attained its capacity, and can’t accommodate any more pods until the current ones are terminated or additional resources are integrated.

  1. Node Capacity:

Every node possesses a definitive limit on the pods it can run, influenced by the node’s resources and its configuration.
Solutions: Scale up the nodes if they are perpetually operating at or near capacity, or optimize resource requests and limits.

  1. Cluster Scaling:

Implement auto-scaling solutions to dynamically adapt the number of nodes as needed, especially if your entire cluster is consistently approaching its capacity.

  1. Pod Configuration:

Assess and review resource requests and limits to ensure that pods are not demanding more resources than necessary. Leverage Quality of Service (QoS) classes to aid the scheduler in making more informed decisions.
Implementing QoS Classes: In Kubernetes, pods are categorized into one of three QoS classes: Guaranteed, Burstable, and BestEffort, based on the resource requests and limits set on them.
.- Guaranteed: All containers in the pod have memory and CPU limits, and they are equal to the requests. Use this for critical pods that need specific resources.

.- Burstable: At least one container in the pod has a memory or CPU request. Use this for pods that require a minimum amount of resources to run but can use more resources when available.

.- BestEffort: The pod doesn’t have memory or CPU limits or requests. Use this for non-critical tasks that can run with the remaining resources.

  1. Resource Fragmentation:

Employ affinity and anti-affinity rules to minimize fragmentation by intelligently placing the pods, ensuring optimal utilization of available resources.

  1. Kubelet Configuration:

Adjusting the maxPods configuration option in the Kubelet configuration can alleviate “OutOfPods” errors by allowing more pods to run on a node, considering the node’s available resources.
Implementing Adjustment:
To adjust the maxPods value, you would typically need to modify the Kubelet configuration file, usually located at /var/lib/kubelet/config.yaml on the node. You need to do this on every node you want to adjust.
For example, open the Kubelet configuration file in a text editor:

sudo vim /var/lib/kubelet/config.yaml

Find the line with maxPods and adjust the value to the desired number, or add a new line with maxPods: if it’s not there.
Save and exit the text editor.
Restart the Kubelet service for the changes to take effect:

sudo systemctl restart kubelet

Conclusion

The OutOfPods error in Kubernetes underscores the criticality of proper resource management within a cluster. Addressing this can be achieved by optimizing node and pod configurations, conscientiously adjusting the maxPods value, and employing Quality of Service (QoS) classes to ensure effective resource allocation. By proactively implementing these strategies, operational hurdles can be avoided, maintaining a robust and efficient Kubernetes environment.

Is it easier to be an IT Professional today than 30 years ago?

IT Professional

We currently navigate through an era of relentless technological revolution and unparalleled diversification in tools and opportunities. However, despite the advances and ease of access to information, the career in any IT specialty has not been simplified, but rather, it has become saturated with new challenges.

Present Advantages:

Information Availability:
Nowadays, there is a plethora of online resources such as forums, tutorials, documentation, and educational platforms, something unimaginable 30 years ago when the internet was in its infancy.

Development Tools:
The evolution of development tools is palpable. Modern integrated development environments offer functionalities like syntax highlighting and code autocompletion, significantly facilitating the programmer’s task, unlike three decades ago.

Programming Languages and Platforms:
There are numerous contemporary and high-level programming languages, as well as libraries and frameworks that expedite and simplify recurring tasks, unlike the limited options 30 years ago.

Collaboration and Version Control:
Modern solutions like Git and platforms like GitHub or GitLab optimize collaborative work and version control, something unthinkable in previous decades.

Current Challenges:

Accentuated Complexity:
The design and maintenance of software have multiplied in complexity compared to the past.

Rigorous Specialization:
The variety of languages, frameworks, and tools requires deep knowledge and continuous learning, representing a constant challenge.

Security and Privacy:
Professionals must master the fundamentals of security and privacy to properly apply them in their work.

Code Readability and Maintenance:
The growing complexity of software makes the creation of understandable and maintainable code indispensable.

Final Reflections:

Although access to knowledge is broader and more democratic, IT professionals face unique obstacles:

Rapid Obsolescence:
What is learned today can become obsolete in a short period.

Perpetual Learning:
It is vital to continuously dedicate time to adapt to emerging paradigms and tools.

Variety of Options:
Choosing the ‘right path’ regarding technology, software, tools, and languages is crucial and challenging.

Ephemeral Mastery:
Mastering a tool before its next update or its disuse is almost an unattainable ideal, complicating staying up to date.

Continuous Distractions:
The constant bombardment of new tools and technologies forces a constant review of our skills and knowledge.

External Factors:
Changes in market demand, geopolitical situations, and other elements can affect the professional career in programming.

Conclusion:

While some aspects of the profession are now more manageable, others have become considerably more complex. To assert that ‘everything’ is easier would be a misleading simplification for those observing the profession from the outside without fully experiencing it.

Basic Linux Proficiency for Aspiring DevOps Engineers

In the ever-evolving landscape of DevOps, Linux proficiency is like a trusty Swiss Army knife. It’s a versatile tool that empowers DevOps engineers to navigate the complex terrain of automation, continuous integration, and deployment with finesse. In this article, we’ll delve into the essential Linux knowledge areas that will help you unlock your DevOps potential.

1. Mastering the Linux File System

Before you can dance to the DevOps tune, you need to understand the stage – the Linux file system. At its core lies the root directory (“/”) and subdirectories like “/etc/”, “/var/”, “/home/”, and “/bin/”. These directories house critical system and user data.

Understanding file types is crucial. Regular files, directories, symbolic links, and device files are your basic cast members. Navigating this ecosystem requires knowledge of absolute and relative paths. The PATH variable determines where the system hunts for executable files, so it’s a vital setting to comprehend.

When it comes to file permissions, the DevOps engineer must be a maestro. User, group, and other permissions govern who can do what with a file. Commands like chmod, chown, and chgrp allow you to conduct the permissions orchestra.

# Create a directory called "project" in the current directory
mkdir project

# Change the permissions of the "my_file.txt" so that all users can read and write it
chmod a+rw my_file.txt

# View the directory structure in the current directory
ls

2. Command-Line Essentials

The command line is your DevOps console, and you need to be fluent in its dialect. Commands like ls, cd, cat, echo, mkdir, and rm are your basic vocabulary. They help you explore, manipulate, and create files and directories.

For more advanced operations, you’ll want to wield cp, mv, find, tar, and zip to handle files efficiently. When it comes to text manipulation, don’t leave home without grep, awk, sed, and cut – they’re your linguistic tools for parsing and processing.

Networking utilities like netstat, ifconfig (or ip), curl, and ping are essential for troubleshooting connectivity and network-related issues.

# Create a text file named "greeting.txt" with the content "Hello, World!"
echo "Hello, World!" > greeting.txt

# Display the contents of the "greeting.txt" file on the screen
cat greeting.txt

# Copy the "source_file.txt" to a directory named "copy"
cp source_file.txt copy/

3. Package Management

Different Linux distributions come with their own package managers. Whether you’re on Debian/Ubuntu (apt-get or apt), RedHat/CentOS (yum or dnf), or SUSE (zypper), you need to know how to install, remove, and update packages. This is the key to maintaining a well-oiled system.

# Install the "apache2" package on a Debian/Ubuntu-based system
sudo apt-get install apache2

# Remove the "nginx" package on a RedHat/CentOS-based system
sudo yum remove nginx

# Update all packages on a SUSE-based system
sudo zypper update

4. Process Management

In the DevOps theater, processes take center stage. You need to know how to list, kill, and prioritize them. Commands like ps, top, htop, and kill are your props for managing processes effectively.

# Display a real-time sorted view of system processes
top

# View a list of processes with details, including Process IDs (PIDs)
ps aux | grep process_name

# Terminate a specific process by its Process ID (PID)
kill PID

5. The Art of VI

VI is your text editor of choice, and it’s available on virtually every UNIX system. It may seem cryptic at first, with its modes (Normal, Insert, Command), but once you’re proficient, you’ll appreciate its power for editing configuration files and scripts.

# Open the "configuration_file.conf" file in edit mode with VI
vi configuration_file.conf

# Enter Insert mode to add text
i

# Save changes and exit the editor
:wq

# Exit the editor without saving changes
:q!

6. User and Group Mastery

As a DevOps engineer, you’re often tasked with user and group management. Useradd, usermod, groupadd, and friends are your tools. Understanding the /etc/passwd and /etc/group files is crucial for managing user accounts and groups effectively.

# Add a new user named "new_user" with a home directory
sudo useradd -m new_user

# Modify the login shell of "new_user" to /bin/bash
sudo usermod -s /bin/bash new_user

# Create a new group named "new_group"
sudo groupadd new_group

# Add the user "new_user" to the "new_group"
sudo usermod -aG new_group new_user

7. Shell Scripting

DevOps automation often involves scripting, and bash is your scripting language of choice. You need to be comfortable with variables, loops, and conditional statements to automate tasks effectively.

# Basic script that displays a message if the user is "admin"
#!/bin/bash
user="admin"
if [ "$USER" == "$user" ]; then
  echo "Welcome, $user!"
fi

8. Root and Sudo

With great power comes great responsibility. The root user has unrestricted access, but it’s also risky. Use sudo (superuser do) to execute commands with elevated privileges safely. Editing the sudoers file is a delicate operation; use visudo to avoid issues.

# Execute a command with superuser privileges
sudo command

# Safely edit the sudoers file
sudo visudo

9. Log Exploration

Log files are your breadcrumbs when troubleshooting. You need to know where they’re stored (/var/log/) and how to read them using tools like less, tail, and head.

# View the last 20 entries in a log file
tail -n 20 /var/log/log_file.log

# View the first 10 entries in a log file
head -n 10 /var/log/log_file.log

10. Networking Basics

Understanding IP addressing, subnets, ports, and protocols is essential. Configure and manage network interfaces, routes, and firewall rules using tools like iptables and files like /etc/network/interfaces.

# View the current network configuration, including active interfaces
ifconfig

# Show all configured network routes on the system
ip route show

# Create a firewall rule to allow traffic on port 80 (HTTP)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

11. Secure Shell (SSH)

Remote management is a fundamental skill in DevOps. Use SSH for secure remote login and SCP for file transfer. Master SSH key generation and configuration for secure access.

# Generate a pair of SSH keys (public and private)
ssh-keygen -t rsa -b 2048

# Copy the public key to the remote server for authentication
ssh-copy-id user@remote_server

# Log in to the remote server using SSH
ssh user@remote_server

12. Disk and Storage

It’s important to know how to view disk usage (df, du), manage partitions and file systems (fdisk, mkfs), and mount/unmount storage devices.

# View the amount of used and available disk space on mounted file systems
df -h

# Estimate disk space usage for a specific directory
du -sh directory/

# Create a new partition on a disk using fdisk
sudo fdisk /dev/sdX

# Format a partition to a specific file system
sudo mkfs -t ext4 /dev/sdX1

# Mount a storage device to a specific directory
sudo mount /dev/sdX1 /mnt/mount_point

# Unmount a previously mounted storage device
sudo umount /mnt/mount_point

In summary, Linux is your foundation as a DevOps engineer. These skills are your stepping stones to becoming a virtuoso in DevOps. As you navigate the ever-changing DevOps landscape, remember that Linux is your trusted guide, leading you towards mastery in automation and success in continuous deployment. Happy DevOps engineering!

DevOps or a Different Path?


The world of technology is ever-evolving, with endless opportunities and career paths. If you’re considering a career in technology, you face a fundamental choice: Should you opt for DevOps, or explore alternatives? Let’s navigate these options and consider which path might be right for you.

The Allure of DevOps

Let’s begin with DevOps, a discipline that combines development and operations to deliver software efficiently. DevOps is exciting, offers significant growth potential, and is in high demand in the industry. If you love automation, problem-solving, and working in teams, DevOps might be a tempting path.

The Challenge of Continuous Learning

However, an essential aspect of DevOps is continuous learning. As technologies evolve, DevOps engineers must stay up-to-date. This may require time outside of working hours and a constant commitment to skill improvement. Don’t forget this !!

Exploring Alternatives

On the other hand, the world of technology offers a variety of options. You can consider roles in software development, cybersecurity, data analysis, artificial intelligence, and more. Each of these fields has its own set of challenges and rewards.

The Importance of Your Passions and Skills

The choice between DevOps and alternatives should be based on your interests and skills. Are you passionate about cybersecurity? Perhaps cybersecurity is your path. Are you drawn to programming? Software development might be your best choice. Evaluate your strengths and weaknesses and consider what aspects you enjoy most in technology.

The Flexibility of Your Career

It’s important to remember that your initial choice doesn’t have to be permanent. Technology is a flexible field, and you can change your course as you discover more about your preferences and goals. Many technology professionals have shifted specialties throughout their careers.

My humble opinion

Ultimately, the choice between DevOps and technology alternatives is a personal decision. Assess your interests, skills, and willingness for continuous learning. No matter which path you choose, technology will remain an exciting and ever-changing field.

So, go ahead, and navigate with confidence in this sea of technological opportunities. Whether you opt for DevOps or explore other paths, your technological journey will be an adventure filled with discoveries and professional growth, and good luck with your choice!

Advancements in Infrastructure Automation for Future DevOps Success.


I’ve been a bit reflective due to an IaC task that has become a bit more complex, thus taking me longer to complete than initially anticipated, and I’ve realized there are some aspects I believe have room for improvement. I believe that infrastructure automation and infrastructure state management still have room to mature in order to become more effective. While tools like Terraform and Ansible have come a long way, there are several areas where improvement is needed:

1. Greater Resilience and Enhanced Rollback: Infrastructure as Code (IaC) tools could advance by automatically detecting deployment failures and safely rolling back to a previous state without human intervention.

2. Tighter Integration with Cloud Services: IaC tools could integrate even more seamlessly with cloud services, simplifying the management of resources such as databases, load balancers, and container services, thereby streamlining the orchestration of complex infrastructures.

3. Advanced Secrets Management: Effective secrets management is critical in DevOps. IaC tools could enhance the way secrets are handled and stored, providing a more robust security layer and enabling automated secret rotation. I am aware that steps are currently being taken in this direction.

4. Predictive Analysis and Optimization: Tools utilizing predictive analytics to identify infrastructure bottlenecks or performance issues before they become actual problems, allowing for proactive optimization.

5. Improvements in Visualization and Monitoring: More advanced graphical interfaces and real-time monitoring tools that enable DevOps teams to understand and address issues more efficiently.

These are just a few examples IMHO of how maturing automation in infrastructure and state management could benefit DevOps teams in the future.

DevOps and Plaform engineers differences, is DevOps death? 

From my perspective DevOps is about combining development and operations into one coherent group or team capable of delivering applications from the initial concept all the way until production, and then, also making sure that it continues running in production right. I think it’s about creating those self-sufficient teams.

Platform engineering is about creating internal tooling, an internal platform that is tailor-made for the needs of a company that combines all the tools the company uses, and creates that abstraction layer on top that simplifies usage for everybody else.
A person might have seven years of experience in Terraform but it’s unrealistic to expect that everybody will know everything about it, and even more unrealistic that everybody will know everything about AWS, Azure, and so on, so Platform engineers are in charge of developing such internal tooling that simplifies specific processes in a company, and enables everybody else to do things instead of opening Jira tickets.

The question that keeps coming up is if DevOps is a sustainable career or if is DevOps dead?.
From my perspective, in the last 20 years, I’ve been a Computer Technician, Java developer, Java Senior developer, Network Administrator, Sysadmin, Software engineer, DevOps engineer, SRE, and probably some other things. But in all of those, I’ve done the same thing, I’ve implemented things to help businesses to be more profitable and to grow.
So the title really doesn’t matter, as long as you focus on adding value, you’re always going to have a job. So is DevOps dead? I don’t know. And I don’t really care. And sincerely, I don’t think you should either.

Getting into DevOps and its future, personal opinion.

DevOps is basically making the work of developers and operations automated more efficient and seamless, right? And since we have like a separate role as a DevOps engineer, basically what you do, the main responsibility is to take what developers have created and seamlessly in the most automated efficient, fast, secure, whatever way basically release it to the end users, right? So the whole process of taking that coded application, putting it on the end environment, and making it accessible to the end users in a secure way, in a highly performant available way, that’s the main responsibility of DevOps.

If you want to get into DevOps, you can use the software development entry as a first point, and then, even as a junior software developer, you can start transitioning into DevOps, because you would have enough foundational knowledge as a “prerequisite” to start learning the things that you need in DevOps.

DevOps is still relatively like, compared to other IT fields I would say relatively young, and there are a lot of things going on, there like a lot of dynamics, and you could see like a lot of different technologies that are being developed and invented for different use cases, or like problems that you have in the DevOps projects. And you also have like a lot of similar technologies developed in the same area, which is actually a sign of the fact that there is no one standardized solution for that. So I believe that the market trend, and the way that in the direction where DevOps is going to be developing, will be to standardize the processes more. To have like a few sets of tools that most of the projects, like 90% or maybe even more projects, will use. And all the rest of the technologies will just disappear because there has to be one winner in each category, so I think that’s going to be the trend versus now, where you have like ten or more different tools to choose from which are super similar for the same task, and then you have this thing, because none of them is super standardized, and the one that is mostly used, so you have to choose between them and evaluate them all the time.

But I think it’s going to standardize a lot more, and generally DevOps, because it’s becoming mainstream already, and we see that, that DevOps itself is going to become more clearly defined, and there will be like more clarity from the companies, what they expect from a DevOps engineer, where is the line between developer and DevOps engineer, where is the line between operations and DevOps.

I think that’s going to be in like, maybe four or five years, we’ll see that kind of standardization.

AWS IDP Short reference Architecture

Organizations must be agile and innovative to stay competitive in today’s software development era, which has led to changes in how applications are built, deployed, and managed.

This necessitates the transformation of static CI/CD setups into modern Internal Developer Platforms (IDPs) that provide developers with the tools needed to innovate and move quickly.

While every platform looks different, specific common patterns emerge. To help simplify things, I’ve consolidated the platform designs of dozens of setups into standard patterns based on real-world experiences, which have been proven to work effectively. By adopting these patterns, organizations can create IDPs that keep them ahead of the competition and deliver innovative applications faster.

This diagram provides an overview of one reference architecture for a dynamic IDP using AWS EKS, RDS, Backstage, Humanitec, GitHub Actions, Terraform, and several other technologies.

AWS IDP Architecture

Design principles.

01 Focus on the user. The most important customers of a developer platform
are developers. Developers need to be heavily involved in the design,
prioritization of features, and testing to ensure the platform is fit for purpose
and fully self-service. 

02 Run your platform team like a start-up. Establish a small central team that
owns the platform and is responsible for marketing it, ensuring it is easily consumable and fulfills developers’ needs.

03 Build golden paths vs cages. Developers should be free to choose their
abstraction level. While your IDP should provide a set of golden paths for developers to follow, it should never force their use.

04 Drive standardization by design. Enabling self-service means platform
engineers must define how to vend resources and configuration. This ensures
every resource is built securely, compliant, and well-architected.

05 Implement Dynamic Configuration Management. Dynamic Configuration Management significantly reduces config complexity and enforces standardization by continuously generating app and infrastructure configs with every single deployment. This allows you to enforce policies and standards with every git-push.

06 Let developers decide on their platform interface. The developer
platform should never break your developer’s workflow or force them to use a
specific interface. To support this, a code-based workflow by default works
best, with the option to use a UI, CLI, or API.

07 Keep code as the single source of truth. This ensures everyone is working
from the same version, reducing the risk of errors.

08 Assume a brownfield scenario. Use tools that have already been
productized and adopted by the organization (such as backlog management,
CI/CD toolchain, and container platform) and let the existing teams pursue
integration through plug-ins into the platform. Where applicable, organizations
should use open-source tooling and a cloud-native approach.