The Inflexibility Crisis: How the Decline in the Software Industry Mirrors a Broader Collapse of Morale Across All Sectors

Forewarning, this is a situational report, an observation, I provide no solutions to this massive and growing problem in the software industry.

It’s not just the software industry that’s facing this crisis of inflexibility and dwindling morale – this effect is spreading like wildfire across almost every industry in the United States. As someone deeply embedded in tech, I’ve seen firsthand how specialization has replaced the full-stack developer, leaving fewer people able to deliver end-to-end solutions. But it doesn’t stop there. From finance to healthcare to manufacturing, we’re watching industries retreat into rigid hierarchies and narrow roles, all at the expense of creativity and satisfaction. The tech industry is just the canary in the coal mine – at least from observation it seems to be that – since it was one of the few industries keeping up with inflation and managing to maintain some quality of life for employees.

The problem is systemic, and it’s rooted in a culture that prioritizes short-term profits over long-term sustainability. We see it in how companies are run, how employees are managed, and how work is distributed. Specialization is no longer a choice made for efficiency but a necessity born out of broken systems. In almost every sector, we’ve traded flexibility for compartmentalization, and in doing so, we’ve lost something critical: a sense of ownership, interest, satisfaction, and pride in the work.

This post-COVID decline in morale is palpable. It’s in the air at conferences, in Slack channels, during virtual standups, or wherever you stand you can observe this growing morass. What used to be a place of collaboration, creativity, and innovation has turned into a factory of output, where developers are pushed to hit sprint deadlines with no time to step back and think big. And it’s not just tech bros flight from finance bro – though their meteoric rise in the software industry certainly hasn’t helped. The entire corporate culture, today which seems as though Amazon is leading the charge, has embraced a mentality that measures success by metrics that have little to do with the well-being of employees or the quality of what they produce. The measures rarely show causation among the correlations that lead to the supposed desired profits either. It’s all kind of a shit show of bad thinking doubled down on top of already bad thinking.

But this is not a uniquely tech problem. Across the board, people are burning out. The inflexibility we’ve come to accept in software development is echoed in industries like finance, where workers are boxed into rigid roles. Healthcare is drowning in bureaucratic structures that leave little room for doctors and nurses to innovate in patient care. Manufacturing has seen similar declines, as workers who used to be cross-trained and involved in the whole production process are now relegated to isolated tasks. It’s the same story, just different industries, and the result is the same: low morale, high burnout, and a workforce that feels increasingly disconnected from the purpose of their labor.

What makes this even more alarming is the context in which U.S. workers are experiencing this decline. There’s no ignoring the growing knowledge that we, as American workers, are living a lower quality of life compared to our European counterparts. You only need to look at Germany, France, or the Nordic countries to see a stark difference. European workers have far greater protections when it comes to health, security, and work-life balance. They aren’t driven by the same relentless grind that defines so much of corporate America. Instead, there’s a focus on well-being, on ensuring that people have the time and space to live fulfilling lives outside of work.

This disparity is a key factor in the general malaise you’ll find in the U.S. workforce today. It’s hard to ignore that, while we’re clocking in longer hours and being squeezed by ever-tightening corporate structures, workers abroad are enjoying longer vacations, better healthcare, and a more humane work-life balance. And this is not just anecdotal; it’s backed by studies showing that U.S. workers are more stressed, less healthy, and less satisfied with their jobs than workers in many European countries. When you layer that knowledge onto an already demoralized workforce, the results are predictable: more people disengaging, checking out, and ultimately, burning out.

A growing reaction to these conditions is the rise of the “antiwork” movement, epitomized by communities like the one on Reddit. It’s a cultural shift born out of the recognition that the promises of the American Dream – work hard, get ahead, and live well – are falling flat for a vast majority. The clear disparity between quality of life, work demands, and wealth accumulation has reached a boiling point. The “antiwork” movement is less about being lazy and more about rejecting the idea that one’s entire existence must revolve around work, especially when that work provides little security or satisfaction. People are seeing the broken system for what it is, and they’re opting out of it, either mentally or physically. And that growing sentiment of apathy is yet another driver of the low morale we’re seeing in the workplace today.

What’s truly disheartening is how little attention this growing disparity receives in the mainstream discourse. We’re sold a narrative that success in the U.S. means grinding harder, climbing higher, and pushing ourselves to the limit, while completely ignoring the reality that our counterparts overseas are doing better without needing to sacrifice their health and happiness. The tech bros have certainly contributed to this culture by glorifying the hustle, but the issue runs deeper than just one group of individuals. It’s a systemic problem in how we view work in the U.S. – a problem that, if left unchecked, will continue to erode not only morale but also innovation and creativity across every industry.

The decline in flexibility, the rise of hyper-specialization, the post-COVID morale crash, the stark contrast between U.S. and European work cultures, and the emergence of movements like “antiwork” are all part of the same troubling narrative. It’s a narrative that tells us something is deeply wrong with how we approach work, not just in software but across life in general. If we want to change course, we need to start rethinking our relationship with work itself. Flexibility isn’t just a buzzword; it’s a fundamental part of what makes innovation possible. And until we bring it back into the fold, we’re going to keep losing some of the best minds to burnout and disengagement, all while watching the rest of the world do better with less effort.


An up to the minute addition: Amazon’s 5 day RTO demands!

Amazon’s latest announcement, requiring employees to return to the office five days a week, has sent shockwaves across the tech industry. For many, this feels like a massive step backward, and it’s easy to see why. After the pandemic proved that remote work could not only sustain but even improve productivity, this move feels like a disregard for employee well-being. Andy Jassy, Amazon’s CEO, justified the decision by pointing to the “team-building” benefits of in-person work, but the reality on the ground is quite different. Forcing employees back into offices against their will, especially after years of adapting to a remote or hybrid model, is more than just a policy change – it’s a morale killer.

What this decision ignores is the growing awareness among employees that their quality of life, both in and outside of work, is deteriorating. It disregards the proven benefits of flexibility, where workers have been able to balance their personal lives with their professional ones more effectively. The forced return to the office doesn’t just disrupt routines; it disrupts the trust between employer and employee. Amazon’s decision highlights the ongoing disconnect between leadership’s focus on control and the reality of what makes workers happy, engaged, and ultimately more productive.

This destructive nature of rigid return-to-office mandates is a microcosm of a much broader issue – the inflexibility crisis that’s sweeping across industries, not just in tech but in nearly every sector.


This isn’t just a software problem and until we address the underlying issues of worker well-being, quality of life, and the toxic cultures, we’ll continue to see the same cycle of burnout, disillusionment, and decline. The inflexibility of today’s industries isn’t just about roles or job functions – it’s about how we value people and their contributions. The moment we forget that is the moment we start losing what made these industries great to begin with.

References

Setting Up SQLite on Windows 11: A Guide for Developers

SQLite is a remarkable database engine—lightweight, serverless, and self-contained. Whether you’re building a small-scale project or need a quick, zero-configuration database for testing, SQLite is your go-to solution. But before diving into SQLite with Go or .NET on Windows 11, it’s crucial to understand how Windows 11 is set up by default and what tools you need to make your development environment rock-solid.

Windows 11 Default Setup: What You Need to Know

Windows 11 comes with some pre-installed tools and utilities, but when it comes to database work, you’re mostly on your own. The default setup lacks native support for databases like SQLite. Fortunately, Windows 11’s modern architecture and compatibility with a wide range of tools make it straightforward to configure.

Key Points of Windows 11 Default Setup:

  • PowerShell: Windows 11 ships with PowerShell, a powerful command-line shell that you’ll use frequently for installation and setup tasks.
  • Windows Subsystem for Linux (WSL): While not necessary for SQLite, WSL provides a Linux environment if you prefer to run SQLite commands in a Linux-like environment on Windows.
  • No Native Database Tools: Windows 11 doesn’t include any database management tools by default, so you’ll need to install SQLite manually.

Step 1: Installing SQLite on Windows 11

The first step in getting started with SQLite is to install it. Here’s how you can do that:

  1. Download SQLite Tools:
  • Visit the official SQLite Downloads page.
  • Under “Precompiled Binaries for Windows,” download the ZIP file containing the sqlite3.exe command-line shell.
  1. Extract and Place the Executable:
  • Extract the ZIP file to a directory of your choice, such as C:\sqlite.
  • Add this directory to your system’s PATH environment variable:
    • Right-click on This PC → Properties → Advanced system settings.
    • Click Environment Variables.
    • In the System variables section, find Path and click Edit.
    • Add the path to your C:\sqlite directory.
  1. Verify Installation:
  • Open PowerShell or Command Prompt.
  • Type sqlite3 and press Enter. You should see the SQLite command prompt, confirming the installation was successful.

Step 2: Setting Up Tooling for SQLite

To work effectively with SQLite, especially when managing complex databases or working on larger projects, you’ll need more than just the command-line tool.

  • DB Browser for SQLite:
    • A graphical interface for SQLite that simplifies database management.
    • Download from DB Browser for SQLite.
    • It provides an easy way to create, design, and edit SQLite databases.
  • SQLite Studio:
    • Another GUI tool that offers advanced features like SQL query generation and database schema visualization.
    • Download from SQLite Studio.

These tools are optional but highly recommended, especially if you’re new to SQLite or prefer a visual interface over command-line operations.

Step 3: Using SQLite with Go

If you’re working with Go, integrating SQLite into your project is straightforward. Here’s how to set it up:

  1. Install Go:
  • Ensure Go is installed. If not, download it from golang.org and install it.
  1. Install the SQLite Driver for Go:
  • Use the following command to install the SQLite driver: bash go get github.com/mattn/go-sqlite3
  • This driver allows you to interact with SQLite databases directly from Go.
  1. Write Your Go Code:
  • Here’s a quick example of using SQLite in Go:
package main

import (
    "database/sql"
    _ "github.com/mattn/go-sqlite3"
    "log"
)

func main() {
    db, err := sql.Open("sqlite3", "./test.db")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    _, err = db.Exec("CREATE TABLE IF NOT EXISTS example (id INTEGER PRIMARY KEY, name TEXT)")
    if err != nil {
        log.Fatal(err)
    }
}
  • This code snippet sets up a simple SQLite database and creates a table.
  1. Run Your Go Application:
  • Compile and run your application with go run yourfile.go. This will create an SQLite database named test.db in the current directory.

Step 4: Using SQLite with .NET

.NET provides excellent support for SQLite, allowing you to integrate it into your projects seamlessly. Here’s the setup:

  1. Install .NET SDK:
  1. Create a New .NET Project:
  • Create a new console or web application using the .NET CLI: bash dotnet new console -n SQLiteDemo cd SQLiteDemo
  1. Add the SQLite NuGet Package:
  • Install the Microsoft.Data.Sqlite package using the following command: bash dotnet add package Microsoft.Data.Sqlite
  1. Write Your .NET Code:
  • Here’s a quick example of using SQLite in a .NET application:
using Microsoft.Data.Sqlite;

class Program
{
    static void Main()
    {
        using var connection = new SqliteConnection("Data Source=sample.db");
        connection.Open();

        var command = connection.CreateCommand();
        command.CommandText =
        @"
            CREATE TABLE IF NOT EXISTS users (
                id INTEGER PRIMARY KEY,
                name TEXT
            )
        ";
        command.ExecuteNonQuery();
    }
}
  1. Run Your .NET Application:
  • Compile and run your application with dotnet run. This will create an SQLite database named sample.db in the current directory.

Warp Up

Setting up SQLite on Windows 11 is easy with the right steps. Whether you’re working with Go, .NET, or another language, SQLite’s versatility makes it an excellent choice for a wide range of projects. With this guide, you’re well on your way to leveraging SQLite’s power in your development workflow on Windows 11.

Self-Inflicted Shortage: How Poor Leadership and Practices in Large Companies (specifically FAANG like companies) Created a Developer Crisis

I’ve been wanting to write up a few thoughts on the ever ongoing “labor shortage” and “talent shortage” that big companies often cite. Especially in regards to expanding H1B use (albeit arguably exploitive in the way its often used) all the while damning existing labor. The following are some collected observations of the tech industry. It seems timely considering the number of people, qualified people, looking for work right now. All while still citing a shortage when it is pretty clear there is not a shortage of qualified people.

The Self-Inflicted Wound of Talent Shortages: A FAANG Case Study

The tech industry, and more specifically the FAANG giants (yes, I’m sticking with that acronym despite its recent evolutions), has long been heralded as the pinnacle of innovation and progress. But, beneath the shiny exterior, there’s a glaring problem that’s both self-inflicted and entirely avoidable: a severe shortage of good software developers. This isn’t because there’s a lack of talent out there—far from it. It’s because of poor leadership, short-sighted hiring practices, and a failure to nurture and retain the talent that these companies already have.

Burnout and Turnover: The Tech Industry’s Revolving Door

Let’s call it what it is: FAANG companies, and their countless imitators and offshoots, have a problem with how they manage their workforce. They’ve turned what should be an asset—their employees—into a disposable resource. Rather than investing in the growth and development of their teams, they chew through talent at an alarming rate. This burnout machine not only depletes their own ranks but also sends shockwaves through the entire industry, making it harder for other companies to find and keep good developers.

Here’s how it goes down: instead of cultivating a culture of continuous learning and professional growth, these companies opt for the short-term gains of high-pressure environments. The inevitable result? Massive turnover. The few who do manage to thrive in such a setting often find themselves undervalued, eventually moving on to greener pastures—if they don’t burn out first. And so, the cycle continues.

The Hyper-Competitive, Salary-Driven Vicious Cycle

In response to this revolving door of talent, what do these companies do? They throw money at the problem. Salaries in FAANG have skyrocketed, with compensation packages reaching absurd levels—$250k, $400k, and in SF or Seattle, sometimes far beyond that (think $600k as a base total comp package for senior/top talent). But, here’s the kicker: this hasn’t solved the problem. It’s merely masked it.

Rather than addressing the toxic work environments that drive people away, these companies have tried to buy their way out. New hires are lured in with promises of wealth, only to be ground down and replaced by the next wave of recruits. It’s a vicious, unsustainable cycle, driven by poor leadership and a fundamental misunderstanding of what keeps people engaged and productive in the long run.

Exploiting Immigrant Talent: The H1B Band-Aid

And then there’s the H1B visa program. Originally designed to bring in skilled workers where there’s a genuine need, it’s now being used as a band-aid for poor workforce management. FAANG companies exploit this system, bringing in talent from abroad under the guise of providing opportunities, only to subject these workers to the same burnout-prone environment that domestic employees face.

For many of these workers, their visa status ties them to their employer, making it difficult—if not impossible—to leave, even if they want to. This is exploitation, plain and simple. It not only harms the individuals involved but also tarnishes the industry’s reputation, making it even harder to attract and retain talent.

Summary of The Crisis

The tech industry’s talent shortage is not a result of a lack of skilled developers, but rather a consequence of poor management practices, toxic work environments, and short-term thinking. FAANG companies, in particular, have created a vicious cycle of burnout and turnover – exacerbated by stack ranking (more on that in the future) – by failing to invest in their employees’ growth and relying on unsustainable salary inflation to mask deeper issues. The exploitation of immigrant talent through the H1B visa program further exacerbates the problem, damaging both the industry’s reputation and its ability to retain talent. To break this cycle, tech leaders must prioritize creating supportive, growth-oriented cultures that value long-term employee engagement over short-term gains. Only by addressing these fundamental issues can the industry hope to build a sustainable future where innovation thrives alongside a healthy and motivated workforce.

Transform Your 1:1 Meetings: From Status Reports to Meaningful Conversations

Let’s face it—1:1s often feel like a chore. They can seem awkward, unnecessary, or even stressful, especially if they devolve into nothing more than a glorified status report. These meetings are supposed to be about meaningful dialogue, yet too often, they become just another checkbox on the to-do list. If you’ve ever found yourself reciting project updates that could’ve been sent in an email, you’re not alone.

But here’s the thing—when 1:1s turn into status reports, they lose their value. And that’s a big problem for several reasons:

  1. Missed Opportunities Turning 1:1s into routine updates means missing out on the chance to discuss your personal growth, career aspirations, or challenges that need attention. This time is carved out for your development and support. If you’re not using it wisely, you’re letting potential progress slip through your fingers.
  2. Lack of Connection When your 1:1s are all about status updates, you miss the opportunity to build a deeper connection with your manager. Understanding your manager’s goals and challenges is key to aligning your work with the broader mission of the team and company. Without this connection, you risk becoming isolated, working on tasks that don’t fully align with the bigger picture.
  3. Increased Frustration If 1:1s feel like just another meeting to get through, they become something you dread rather than look forward to. When these meetings lack substance, they turn into a time-waster, leading to frustration and disengagement.

So, how do you change the dynamic? How do you make 1:1s less cumbersome and more valuable for both you and your manager? Here’s how to flip the script:

Make Your 1:1s Count:

  1. Ask for What You Need Use your 1:1s to ask for the resources or support that will help you grow. Need career advice? Ask for it. Facing a roadblock? Seek help to get unblocked. Want to meet someone influential in your field? Request an introduction. This is your time—make sure you’re using it to your advantage.
  2. Understand Your Manager’s World Instead of just sharing your progress, take the time to ask your manager about their challenges and goals. What’s their biggest concern right now? What are they focusing on? Understanding what’s on your manager’s mind can help you better align your efforts with the team’s priorities, making you a more effective and valuable team member.
  3. Learn About the Business 1:1s are an excellent opportunity to get a deeper understanding of the business. Ask about the company’s growth areas, the challenges it’s facing, and where your work fits into the bigger picture. Having this insight not only makes you more informed but also more strategic in your contributions.
  4. Seek Feedback Regularly Don’t wait for annual reviews to get feedback on your performance. Use your 1:1s to ask for continuous feedback. What are you doing well? Where can you improve? Regular feedback helps you course-correct quickly and ensures you’re always moving in the right direction.
  5. Discuss Long-Term Goals Use your 1:1s to discuss your long-term career goals. Where do you see yourself in a year or five years? What steps can you take now to get there? This helps ensure your day-to-day work aligns with your broader career aspirations and keeps you motivated.

For Managers:

As a manager, your role in 1:1s is crucial. If you’re not careful, these meetings can easily become stale and unproductive. Here’s how to ensure they stay valuable:

  1. Foster Openness Create an environment where your team feels comfortable discussing more than just their work progress. Encourage them to bring up their challenges, ask questions, and share their career aspirations. This openness builds trust and helps you better support your team.
  2. Share Your Perspective Be transparent with your team about your own challenges and objectives. This helps your team understand the context behind decisions and aligns their efforts with the company’s goals. Transparency also makes these meetings more engaging and less about checking boxes.
  3. Focus on Growth Your 1:1s are an opportunity to mentor and guide your team. Use this time to help your team members grow, providing the resources and support they need to advance in their careers. When your team thrives, so do you.
  4. Set Actionable Goals Work with your team members to set clear, actionable goals during your 1:1s. These goals should be specific, measurable, and aligned with both their personal development and the team’s objectives. Setting and tracking progress on these goals gives your 1:1s direction and ensures they’re driving real impact.
  5. Provide Regular Feedback Make feedback a regular part of your 1:1s. Don’t wait for formal reviews to give your team members insights into their performance. Regular, constructive feedback helps them improve and stay aligned with the team’s goals. It also shows that you’re invested in their development.
  6. Create a Safe Space for Honest Dialogue Encourage your team to speak openly and honestly in 1:1s. Let them know that this is their time to share what’s on their mind without fear of judgment. Creating a safe space for dialogue ensures that issues are addressed early and that your team feels heard and supported.

Conclusion:

1:1s don’t have to be a burden—they can be one of the most powerful tools for growth and connection in your work life. By shifting the focus from status reports to meaningful conversation, you’ll find these meetings become not only more productive but also more engaging and rewarding.

What strategies have worked for you in making the most out of 1:1s? Let’s share and learn from each other—drop your thoughts below! 👇

Azure Arc: Unified Management for Hybrid and Multi-Cloud Environments

I’ve been deep in the trenches of multi-cloud tooling for years now, exploring everything from Kubernetes to Terraform, and all the glue that holds modern infrastructures together. Recently, I took a deep dive into Azure Arc, Microsoft’s hybrid and multi-cloud management solution, to see what it brings to the table. What follows is a breakdown of Azure Arc, framed through the lens of someone who’s seen the evolution of these tools over time.

The Core Idea Behind Azure Arc

At its core, Azure Arc is Microsoft’s answer to the complexities of hybrid and multi-cloud management. The idea is simple yet powerful: provide a unified management experience for resources, regardless of where they live. Whether you’re running workloads on-premises, across different cloud providers, or out on the edge, Azure Arc aims to bring them all under a single, cohesive management umbrella.

What Azure Arc Really Does

Azure Arc extends Azure’s management capabilities beyond its own boundaries. Think of it as a bridge that connects your existing infrastructure to Azure’s powerful tools and services. Once your resources are “Arc-enabled,” you can manage them just like you would any native Azure resource. This means applying policies, leveraging Azure’s security features, and using monitoring tools – all from within the Azure portal.

The beauty of Azure Arc is that it doesn’t discriminate based on where your resources are. Whether it’s a Linux server running in your own datacenter, a Kubernetes cluster on Google Cloud, or even a SQL database on AWS, Azure Arc brings it all together. This isn’t just about management, though. Azure Arc also allows you to deploy Azure services, like SQL and PostgreSQL Hyperscale, directly into your non-Azure environments.

Azure Arc for Kubernetes

Azure Arc’s support for Kubernetes is where things get particularly interesting. If you’re managing Kubernetes clusters across different environments—whether it’s AKS, EKS on AWS, GKE on Google Cloud, or even an on-premises setup—Azure Arc brings these disparate clusters into the fold under Azure’s management.

With Azure Arc, you can attach your Kubernetes clusters to Azure, enabling you to deploy applications consistently across all your clusters using GitOps, apply consistent security and governance policies, and even monitor and manage them from the Azure portal. This is incredibly powerful in multi-cloud environments where you might have clusters spread across different platforms but need a unified approach to management and operations.

The integration with AKS is seamless, of course, but the real power lies in Azure Arc’s ability to connect with other cloud providers’ Kubernetes offerings. Whether you’re dealing with AWS’s EKS, GCP’s GKE, or a custom Kubernetes setup, Azure Arc enables a level of control and consistency that can be a game-changer in complex, hybrid environments.

Defining Azure Arc

Azure Arc is, in essence, a set of technologies that extend Azure’s control plane to wherever your resources reside. Here’s what it means in practice:

  • Unified Server Management: You can connect and manage your Windows and Linux servers across on-premises, edge, and multi-cloud environments from a single pane of glass within Azure.
  • Kubernetes Cluster Integration: Azure Arc allows you to attach and manage Kubernetes clusters from anywhere. This means consistent management, monitoring, and governance across your entire Kubernetes estate, regardless of where those clusters are running.
  • Data Services Anywhere: With Azure Arc, you can run Azure’s data services, like Azure SQL and PostgreSQL Hyperscale, in any environment. This gives you the flexibility to use Azure’s data capabilities wherever you need them most.
  • Consistent Governance and Security: Perhaps one of the biggest wins here is the ability to enforce compliance and governance policies consistently across all your resources, no matter where they’re deployed.

In short, Azure Arc is Microsoft’s play to bring coherence and control to the sprawling, often chaotic, world of hybrid and multi-cloud environments. It’s a tool that’s not just about visibility but about giving you the power to manage, secure, and optimize your entire infrastructure from a single point of control. And in a world where resources are scattered across different platforms and locations, that’s a game-changer.

Further Reading and Viewing on Azure Arc

If you’re interested in diving deeper into Azure Arc and particularly how it integrates with Kubernetes across various environments, there are a few must-see resources:

  1. **[Azure Arc-enabled Kubernetes Extensibility Model Azure Friday](https://www.youtube.com/watch?v=2HSuzHEQDGw)** – In this video, Scott Hanselman and Lior Kamrat discuss how Azure Arc enables Kubernetes clusters outside of Azure to be managed and governed like native Azure resources, complete with demos.
  2. **[Azure Arc-enabled Kubernetes with GitOps Azure Friday](https://learn.microsoft.com/en-us/shows/azure-friday/azure-arc-enabled-kubernetes-with-gitops)** – This session delves into how Azure Arc uses GitOps to manage Kubernetes clusters across various environments, showcasing how to maintain a single source of truth through GitHub repositories.
  3. **[Building Modern Hybrid Applications with Azure Arc and Azure Stack Azure Friday](https://learn.microsoft.com/en-us/shows/azure-friday/building-modern-hybrid-applications-with-azure-arc-and-azure-stack)** – Thomas Maurer joins Scott Hanselman to demonstrate how to build and manage hybrid applications across multiple environments using Azure Arc, including a demo of Kubernetes integration.

These resources provide a comprehensive look at how Azure Arc can be integrated into your multi-cloud strategy, particularly if Kubernetes is part of your infrastructure mix.