Avoid Pitfalls in Laravel Scalability to Ensure Robustness

Introduction

As applications grow, so does the demand for performance and reliability. Laravel, a popular PHP framework, offers robust tools and features to build scalable applications.

Laravel application scaling is a critical step for businesses that are growing. This is necessary to ensure the web application can handle increases in loads and traffic. However, scaling is not without its pitfalls, and there are several common mistakes one needs to be aware of.

Avoid potential problems down the line with this comprehensive guide on what to watch out for when scaling your Laravel application.

Basics of Scaling

Scaling refers to the process of increasing an application’s capacity to handle more load, whether in terms of users, transactions, or data volume. There are two primary types of scaling:

  • Vertical Scaling: Increasing the capacity of a single server (e.g., adding more RAM or CPU).
  • Horizontal Scaling: Adding more servers to distribute the load across multiple machines.

While vertical scaling can be more straightforward to implement, it has limitations and can become expensive. Horizontal scaling, on the other hand, offers better flexibility and fault tolerance but requires a more complex architecture.

Scaling an application in terms of Laravel is increasing the capacity and performance of a Laravel-based application. This means increasing the number of users, requests, and data. The goal is to ensure the application remains fast, responsive, and reliable as its workload grows. Scaling can be done vertically by adding more resources to existing servers or horizontally by adding more servers to distribute the load.

Techniques and Tools for Scaling a Laravel Application:

  • Load Balancing
  • Database Optimization
  • Indexing
  • Caching
  • Queuing
  • Database Sharding
  • Microservices Architecture
  • Monitoring and Logging
  • Optimize Codebase
  • Monitor and Scale Proactively

Common Mistakes in Laravel Application Scaling

Scaling a Laravel application can be challenging. But avoiding common mistakes can ensure a smoother process and better performance. Here are some critical mistakes to watch out for:

Neglecting Database Optimization:

Overlooking indexing, query optimization, and proper database design. Avoiding N+1 query issues and eager-loading relationships can also improve efficiency.

Ignoring Caching:

Failing to implement caching mechanisms can lead to unnecessary load on your server. Caching is a powerful technique for reducing server load and improving response times. This includes page caching, database caching, and object caching using systems like Redis or Memcached.

Not Utilizing Load Balancing:

Relying on a single server can cause bottlenecks and single points of failure.

Overlooking Code Optimization:

Running unoptimized code can lead to performance issues as traffic scales.

Inadequate Monitoring and Logging:

Failing to monitor application performance and server health can lead to undetected issues.

Poor API Management:

Inefficient handling of API requests can degrade performance.

Skipping Horizontal Scaling:

Relying solely on vertical scaling (adding more resources to a single server) can be limiting and expensive.

Insufficient Load Testing:

Not conducting adequate load testing can leave your application unprepared for high traffic.

Ignoring Security Best Practices:

Overlooking security measures can expose your application to vulnerabilities, especially under high traffic.

Neglecting to Use Queues:

Running all tasks synchronously can slow down your application.

Not Taking Advantage of CDNs:

Serving all content from your primary server can slow down the delivery of static assets.

Improper Use of Eager Loading:

Using lazy loading in scenarios where eager loading would be more efficient can lead to performance issues.

Overcomplicating the Architecture:

Introducing unnecessary complexity can make the application harder to maintain and scale.

Underestimating the Cost of Scaling:

Scaling can be expensive, and costs can quickly spiral if not managed carefully.

Overcomplicating Deployment Processes:

A complex deployment process can hinder scalability.

Not Preparing for Failures:

No system is infallible, and as you scale, the potential impact of failures increases.

Overlooking User Experience:

Forgetting that the end goal of scaling is to provide a seamless user experience.

Best Practices for Scaling Laravel Applications

The first important decision always concerns the selection of the technology stack. Laravel is the right choice since it is useful for developing a wide range of applications and large-scale applications. Optimizing your code is important to build a highly scalable and robust Laravel solution.

Code Optimization Techniques:

Optimizing your code is the first step towards building a scalable Laravel application. Here are some techniques to consider:

  • Eager Loading: Use eager loading to reduce the number of queries executed. This minimizes database load and improves performance.
  • Lazy Loading: Conversely, use lazy loading for relationships that are not always needed. This avoids unnecessary data retrieval.
  • Caching: Cache frequently accessed data and queries to reduce database load. Use Redis or Memcached for efficient caching.
  • Queue Jobs: Offload time-consuming tasks to background jobs using Laravel Queues. This improves request-response time and overall performance.

Database Optimization Strategies:

A well-optimized database is crucial for handling increased load. Implement the following strategies:

  • Indexing: Properly index your database tables to speed up query execution. Analyze and update indexes regularly based on query patterns.
  • Partitioning: Partition large tables to improve query performance and manageability.
  • Connection Pooling: Use connection pooling to manage database connections efficiently and reduce overhead.
  • Database Sharding: Distribute data across multiple databases (sharding) to balance load and improve performance.
  • Effective Caching Mechanisms: Caching can significantly reduce load and improve response times. Consider the following:
    • Query Caching: Cache expensive queries to minimize database load.
    • Response Caching: Cache entire responses for static or rarely-changing content.
    • OpCode Caching: Use PHP OpCode caching to improve performance by storing compiled PHP code in memory.
    • CDNs: Use Content Delivery Networks (CDNs) to cache and serve static assets like images, CSS, and JavaScript files closer to users.

Comprehensive Load Testing:

Regular load testing helps identify performance bottlenecks and ensures your application can handle increased traffic. Follow these practices:

  • Simulate Real Traffic: Use load-testing tools to simulate real-world traffic patterns and usage scenarios.
  • Identify Bottlenecks: Monitor performance metrics to identify and address bottlenecks.
  • Iterative Testing: Conduct load tests iteratively, especially after significant changes or optimizations.

Robust Security Practices:

Scaling an application often exposes new security challenges. Implement strong security measures:

  • Regular Audits: Conduct regular security audits and vulnerability assessments.
  • Data Encryption: Ensure sensitive data is encrypted both in transit and at rest.
  • Access Controls: Implement role-based access controls and follow the principle of least privilege.
  • Secure Configurations: Secure server and application configurations to prevent unauthorized access.

Implementing Monitoring and Logging:

  • Effective monitoring and logging are essential for maintaining application health and performance:
    • Monitoring Tools: Use application performance monitoring (APM) tools to track key performance metrics.
    • Centralized Logging: Implement centralized logging to aggregate and analyze logs from different parts of your application.
    • Real-Time Alerts: Set up real-time alerts for critical issues to enable quick response and resolution.

Make Informed Architecture Decisions:

  • Choosing the right architecture is crucial for scalability. Consider the following:
    • Microservices: Break down your application into microservices to enable independent scaling and easier maintenance.
    • API Gateway: Use an API gateway to manage and route traffic to different services.
    • Service Mesh: Implement a service mesh to manage communication and security between microservices.
    • Containerization: Use containerization tools like Docker and Kubernetes to deploy and manage applications in a scalable manner.

Plan For Growth

The ideal method for developing a robust and high-performing Laravel application is to consider future growth. It is usually safe to assume that traffic and user demand are likely to rise in the future. Hence, always design with scalability in mind.

Acquaint Softtech is a software development outsourcing company in India. We are experts in developing scalable Laravel solutions and have over 10 years of experience developing cutting-edge solutions.

In fact, we have already successfully launched over 5,000 projects for clients worldwide. We are also an official Laravel Partner.

Conclusion

Scaling a Laravel application requires careful planning, optimization, and ongoing maintenance. Avoid common mistakes and follow best practices. This way you can ensure your application remains performant, reliable, and secure as it grows. Hire remote developers from Acquaint Softtech. This will ensure you gain an upper edge over your competitors.

Remember to continuously monitor performance, optimize your code and database, implement effective caching strategies, and maintain robust security measures. With a strategic approach to scaling, your Laravel application can successfully handle increased traffic and load, providing a seamless user experience.

FAQ

What are the common pitfalls in scaling a Laravel application?

Common pitfalls include unoptimized database queries, lack of caching, improper use of queues, and not leveraging horizontal scaling. These can lead to performance bottlenecks and reduced robustness of the application.

How can I optimize database queries in Laravel?

To optimize database queries, avoid N+1 query problems by using eager loading. Additionally, use indexing and optimize your database schema to enhance query performance.

What role does caching play in Laravel scalability?

Caching reduces the load on the database by storing frequently accessed data in memory. Laravel provides built-in caching mechanisms that can significantly improve application performance.

How do queues help in managing heavy tasks in Laravel?

Queues allow you to offload time-consuming tasks to be processed in the background, keeping your application responsive. Laravel’s queue system is flexible and easy to integrate.

What is horizontal scaling, and how can it benefit my Laravel application?

Horizontal scaling involves adding more servers to handle increased load rather than overloading a single server. This approach can improve the availability and performance of your application.

Parameters for Evaluating Laravel Application Robustness

Introduction

AHMEDABAD, GUJARAT, INDIA, June 25, 2024 /https://medium.com/@mukesh.ram/ — Laravel is a PHP framework known for its elegance and simplicity. However, evaluating their robustness becomes crucial as applications grow in complexity.

This is essential to ensure they perform well under various conditions and can be maintained over time. This article provides some essential parameters to consider when assessing the robustness of a Laravel application.

Is Laravel Best For Your Application?

Determining if Laravel is the best choice for your application depends on various factors such as your project requirements, team expertise, scalability needs, and budget considerations. Here are some key points to consider when evaluating if Laravel is the right fit for your application:

  • Web Application Type
  • Laravel Development Speed
  • Scalability Requirements
  • Community and Ecosystem
  • Team Expertise
  • Security and Reliability
  • Budget Considerations

Ultimately, the decision to use Laravel for your application should be based on a comprehensive assessment of your project requirements. It should also include technical considerations, team capabilities, and business objectives.

Conduct a thorough evaluation and consider the above mentioned factors to help you determine if Laravel is the best choice for your application.

What To Expect From Custom Laravel Solution?

When investing in a custom Laravel solution, you can expect several key benefits and outcomes:

  • Tailored Solution
  • Scalability
  • High Performance
  • Robust Security
  • Flexibility and Customization
  • Ease of Maintenance
  • Reliable Support and Documentation
  • Future-Proofing

A custom Laravel solution offers a powerful combination of tailored functionality, scalability and performance. It also includes security, and flexibility which empower your organization to achieve its business objectives efficiently and effectively.

Parameters To Evaluate Robustness

Laravel, a popular PHP framework known for its elegance and robust feature set, is widely used for building scalable web applications. However, the robustness of a Laravel application isn’t solely guaranteed by using the framework itself.

It must be carefully assessed and ensured through rigorous evaluation. The essential parameters for evaluating the robustness of Laravel applications:

Security:

Security is a paramount concern in web development and a critical parameter for evaluating the robustness of any Laravel application.

Authentication and Authorization:

Ensure your Laravel application correctly implements authentication and authorization. Laravel provides built-in support for many security features. This includes password hashing and reset, encryption, and user authentication.

SQL Injection Protection:

Laravel uses Eloquent ORM, which inherently protects against SQL injection. However, developers must ensure that raw SQL queries are handled safely.

Cross-Site Scripting (XSS) and Cross-Site Request Forgery (CSRF):

Laravel provides easy-to-use tools to defend against XSS and CSRF attacks. However, these must be correctly implemented and regularly updated to guard against new vulnerabilities.

Performance:

Performance is another vital parameter in assessing the robustness of a Laravel application. A robust application must handle high loads efficiently and maintain responsiveness under varying stress conditions.

Response Time:

Monitor the average response time under typical and peak loads. This will give insights into the efficiency of the application.

Memory Usage:

Efficient memory usage ensures that the application can run smoothly on servers with varying specifications and handle more requests simultaneously.

Database Optimization:

Proper indexing, efficient queries, and database caching are essential to prevent bottlenecks.

Scalability:

Scalability refers to the ability of the application to handle growth in terms of user load and data volume. It also includes transaction frequency without compromising performance.

Horizontal vs. Vertical Scaling:

Gain a good understanding of how your Laravel application scales. This can either be by adding more hardware resources (vertical) or by adding additional instances of the application (horizontal).

Load Balancing:

For applications expected to handle high traffic, implementing load balancing techniques. This will help distribute traffic evenly across multiple servers. It can also prevent any single server from becoming a bottleneck.

Error Handling:

Effective error handling ensures that the application can gracefully handle unexpected conditions without crashing. This provides helpful error messages to users and logs for developers.

Exception Management:

Laravel has built-in support for exception handling. Customize this to handle different types of exceptions appropriately.

Logging:

Laravel supports robust logging capabilities that can be integrated with various logging services. Proper logs assist in debugging and are crucial for maintaining long-term reliability.

Code Quality and Maintainability:

The codebase’s quality significantly impacts the application’s robustness. Poorly written code can lead to a fragile system that is difficult to maintain and prone to errors.

Adherence to Laravel Best Practices:

Follow Laravel best practices and guidelines. This ensures that the code is efficient and maintainable.

Use of Design Patterns:

Implement design patterns suitable for Laravel applications. This can enhance scalability and maintainability.

Code Reviews and Refactoring:

Conduct regular code reviews and refactoring sessions. This helps maintain code quality and address potential architectural issues.

Up-to-date Dependencies:

Keep all dependencies updated to their latest secure versions. This is essential to avoid security vulnerabilities.

Composer Dependency Manager:

Utilize Composer for dependency management. This helps maintain a clean and up-to-date library set. It is crucial for application integrity.

Testing:

Thorough testing is crucial in evaluating and ensuring the robustness of Laravel applications.

Integration and Browser Testing:

Beyond unit testing, integration and browser tests simulate user interactions and ensure that various parts of the application work together seamlessly.

Stress Testing:

Perform stress and load tests. This is to help determine how the application behaves under extreme conditions.

Documentation and Compliance:

Well-documented code and adherence to legal and regulatory standards are often overlooked aspects of robustness.

Code Documentation:

Maintain good documentation to ensure that the application is understandable. This ensures that it is maintainable by the current team and any future developers.

Compliance:

Ensure the application complies with relevant laws and standards. This is crucial for legal and operational robustness. For, e.g. GDPR for applications handling EU resident’s data.

How The Experts Can Help

Building robust Laravel applications requires  top-notch expertise. It also requires a team with plenty of experience and resources. Hire Laravel developers for this purpose.

This defines the team at Acquaint Softtech perfectly since we are official Laravel Partners as well. Your business will benefit from either outsourcing to us or opting for our IT staff augmentation services.

Acquaint Softtech is a software development outsourcing company in India. We are a firm with over 10 years of experience.

A very fitting quote:

“Master your strengths, outsource your weaknesses.” – Ryan Khan, Founder of The Hired Group

We offer a wide range of mobile and app development services including Laravel development services. We have already delivered over 5000 projects worldwide.

Conclusion

Evaluate a Laravel application’s robustness by engaging in a holistic look at various parameters. This includes parameters that impact its security, performance, scalability, and maintainability.

Systematically assess each area to ensure your application is functional and secure. Hire remote developers from Acquaint Softtech to gain the upper edge over your competitors.

A Developer Mindset to Create Resilient Laravel Applications

Introduction

In the ever-evolving landscape of web development, Laravel is the perfect choice. It is ideal for developing a robust application. It has an elegant syntax and is feature-rich too. Only professionals can take advantage of its true potential.

It requires the expertise of Laravel developers with a resilient mindset. They also need to have a deep understanding of the framework’s capabilities.

This blog post delves into the developer mindset necessary for creating resilient applications. It draws insights from recent discussions and resources in the developer community.

This article explains the mindset and practices for resilient Laravel applications.

Critical Skills For A Resilient Mindset

Embracing Laravel’s Philosophy:

Laravel encourages to write clean, simple, and readable code. This philosophy extends beyond the syntax to include how Laravel handles tasks. This includes functions like routing, authentication, and caching. A developer with a resilient mindset understands the importance of adhering to principles. They avoid the temptation to revert to plain PHP practices within the Laravel ecosystem.

Understanding MVC Architecture:

At the core of Laravel is the Model-View-Controller (MVC) architecture. This separates the application’s logic from the user interface. This separation allows for more organized and maintainable code. A resilient Laravel developer understands and leverages MVC to create scalable and flexible applications.

Leveraging Eloquent ORM:

Eloquent ORM is one of Laravel’s most powerful features. It provides an expressive and fluent interface for database interaction and allows developers to perform complex database operations with simple and expressive syntax. Mastering Eloquent is the key to enhancing the performance and resilience of their Laravel applications.

Utilizing Laravel’s Built-in Features:

Laravel has features like Blade templating and Artisan commands. These features are designed to simplify everyday tasks and boost productivity. A developer’s mindset should be geared towards making the most of these features. This helps streamline development processes and improve application resilience.

Continuous Learning and Adaptation:

The Laravel ecosystem is dynamic, with frequent updates and new packages. A resilient developer continuously learns, stays up-to-date with the latest Laravel features, and adapts to changes. This continuous learning process is crucial for maintaining and improving the quality of Laravel applications.

What is the Right Mindset?

Design with Resilience in Mind:

Expect failures to occur, and design your application to handle them gracefully. Use fallback mechanisms, retries, and circuit breakers where appropriate.

Fault Isolation:

Design your application to isolate failures. This prevents them from cascading through the system. Use techniques like microservices, queues, and distributed systems architecture. They help reduce the impact of failures.

Write Clean and Maintainable Code:

Adhere to Laravel coding standards, design patterns, and conventions. This will ensure consistency and readability in your codebase.

Modularize Your Code:

Break down your application into smaller, reusable modules that are easier to understand, test, and maintain. Use Laravel’s modular architecture to encapsulate functionality and reduce dependencies.

Graceful Degradation:

Handle errors gracefully by providing informative error messages, logging exceptions, and failing safely. This should not impact the user experience.

Monitor and Alert:

Use monitoring and alerting systems to detect and respond to errors in real-time. Tools like Laravel Telescope can track application health and performance.

Write Unit Tests:

Develop comprehensive unit tests to validate the behavior of individual components in isolation. Use PHPUnit and Laravel’s testing utilities to automate testing and ensure code correctness.

Integration Testing:

Test interactions between components and external dependencies to validate system behavior under real-world conditions. Use Laravel’s testing framework to simulate requests, database interactions, and queue processing.

Profile and Benchmark:

Using profiling tools and benchmarks, identify performance bottlenecks in your application. Optimize critical paths and resource-intensive operations to improve application performance.

Caching and Optimization:

Utilize Laravel’s caching mechanisms, database indexing, and performance optimizations. This helps reduce response times and improve scalability.

Follow Security Best Practices:

Use Laravel’s built-in security features, such as CSRF protection, XSS filtering, and SQL injection prevention. Update dependencies regularly and address security vulnerabilities promptly.

Data Encryption and Protection:

Encrypt sensitive data at rest and in transit using Laravel’s encryption and hashing features. Use role-based access control (RBAC) and authentication mechanisms to secure user data and resources.

Horizontal and Vertical Scaling:

Design your application to scale horizontally by adding more instances or vertically by upgrading resources. Use Laravel’s queue system, caching, and load balancing to distribute workload efficiently.

Monitor Resource Usage:

Monitor resource utilization and performance metrics to proactively identify bottlenecks and plan for capacity upgrades.

Document Code and Architecture:

Document your codebase, architecture, and design decisions to provide context and guidance for future developers. Use tools like PHPDoc, Markdown, and UML diagrams to create comprehensive documentation.

Stay Updated:

Keep abreast of the latest developments in Laravel, PHP, and web development. Attend conferences, workshops, and online courses to learn new techniques and best practices.

Share Knowledge:

Contribute to the Laravel community by sharing your experiences. Write blog posts and participate in forums and discussions. Collaborate with other developers to exchange ideas and solutions.

Real World Examples

Real-world Laravel application development has seen significant success across various industries. This showcases the framework’s versatility, robustness, and potential for building resilient Laravel applications.

Here are a few notable examples:

Buzzy:

Buzzy is a social media platform that connects users with local events, businesses, and activities. Built with Laravel, Buzzy offers user profiles, event listings, reviews, and messaging features. Its intuitive interface and seamless user experience have contributed to its popularity among users.

Invoice Ninja:

Invoice Ninja is an open-source invoicing, billing, and payment management platform. Developed with Laravel, Invoice Ninja offers customizable invoice templates, client management, expense tracking, and online payment integration features. There is widespread adoption among freelancers, small businesses, and agencies.

Shift:

Shift is a desktop application for code conversion and modernization. Leveraging Laravel’s robust backend capabilities, Shift provides developers with tools for converting legacy codebases to modern frameworks and languages. Its ease of use and powerful features have made it a valuable asset for developers seeking to update and improve their codebases.

Canvas:

Canvas is a blogging platform designed for developers and built with Laravel. It offers Markdown editing, code highlighting, SEO optimization, and customizable themes. Canvas has gained traction among developers and content creators looking for a simple yet powerful blogging solution.

Flare:

Flare is a Laravel-specific error tracking and debugging tool that helps developers identify and resolve application issues. Developed with Laravel, Flare offers real-time error monitoring, stack trace analysis, and performance insights. It has become an essential tool for Laravel developers seeking to maintain the stability and reliability of their applications.

These real-world Laravel applications demonstrate the framework’s adaptability, scalability, and performance in diverse use cases, including social networking platforms, productivity tools, and developer utilities. Their success highlights Laravel’s effectiveness in delivering high-quality, feature-rich applications that meet the needs of users and developers alike.

Benefits of Developing a Resilient Application

A resilient Laravel application can withstand and recover from failures. It can adapt to changing conditions and maintain acceptable performance levels under stress. Resilience in applications is achieved through a combination of design principles, coding practices, architectural decisions, and operational strategies. These are aimed at ensuring the application’s stability, reliability, and availability.

Here are some key characteristics of resilient Laravel applications:

Fault Tolerance:

  • Graceful Failure Handling: The application handles errors and failures gracefully. It does not crash or compromise the user experience. It provides informative error messages and fails safely without causing cascading failures.

Scalability:

  • Horizontal and Vertical Scaling: The application can scale horizontally by adding more instances or vertically. This can be by upgrading resources to handle increased traffic and workload.
  • Efficient Resource Use: It utilizes CPU, memory, and network bandwidth resources. This helps maintain optimal performance under varying load conditions.

Reliability

  • High Availability: The application is available with minimal downtime and service interruptions. It employs redundancy, failover mechanisms, and load balancing to ensure continuous availability.
  • Robust Error Handling: The application implements robust error-handling mechanisms. This will help detect, log, and respond to real-time errors. It provides actionable insights for troubleshooting and debugging.

Performance

  • Optimized Response Times: The application delivers fast response times and low latency. It employs caching, database optimization, and performance-tuning techniques, which help reduce response times and improve user experience.
  • Efficient Resource Management: The application manages resources in the right manner. It also helps avoid resource contention. It also manages memory leaks and performance bottlenecks that could degrade performance.

Security

  • Data Protection: The application uses encryption, hashing, and access controls to protect sensitive data. It implements secure authentication and authorization mechanisms to prevent unauthorized access to resources.
  • Defense in Depth: The application follows security best practices and employs several layers of defense. This includes input validation, output encoding, and security headers, to mitigate security risks and vulnerabilities.

Flexibility

  • Adaptability to Change: The application is flexible and adaptable to changing requirements. It employs modular design, dependency injection, and abstraction to decouple components. This also helps promote code reusability and maintainability.

Operational Excellence

  • Monitoring and Alerting: The application has robust monitoring and alerting systems. It provides real-time visibility into system health, performance, and availability. It alerts administrators to potential issues or anomalies for timely intervention.
  • Automated Recovery: The application automates recovery procedures and failover mechanisms. This is useful for quickly restoring service in case of failures or disruptions. It employs infrastructure as code (IaC) and automation tools for consistency.

Hire The Experts

Resilient Laravel applications can withstand challenges and recover from failures. At Acquaint Softtech, we have the perfect Laravel team for the task. We are a software development outsourcing company in India. We are also an official Laravel Partner and deliver top-notch solutions free from bugs or errors.

Incorporate fault tolerance, scalability, reliability, security, flexibility, and operational excellence into the design. Develop high performance that meets the demands of modern web environments.

Hire remote developers from Acquaint Softtech to gain the upper edge over your competitors. Our experience and expertise in delivering flawless solutions will work in your favor.

A fitting quote:

“Software is a great combination between artistry and engineering.” – Bill Gates

Conclusion

Adopt a developer mindset and integrate best practices into your workflow. This helps build resilient Laravel applications with reliable performance. It also ensures high security and scalability for your users and stakeholders.

Creating resilient Laravel applications requires more than technical skills. It requires a mindset that embraces the framework’s philosophy and an understanding of its core architecture. By fostering this mindset, developers can build functional, maintainable, and scalable applications that are ready to meet the challenges of the digital world.

Explore the resources and insights provided by the Laravel community. This is an excellent starting point. It is helpful for those looking to deepen their understanding of Laravel. Adopting the developer mindset is also essential for resilience.