1. Public Knowledge Base
  2. Support News and Announcements

Upgrading from .NET Framework to .NET Core

At Zanda, we are committed to ensuring that our practice management software meets the evolving needs of health practitioners, both now and in the future. In line with our commitment to keeping the system updated, we are transitioning elements of our code base to .NET Core. 

We understand that some customers might think, “If it’s not broken, why fix it?”, but we have a different perspective. It's important to keep all software updated, especially to be able to keep information secure. We know that anytime we make updates there is some risk involved, so the easiest thing for us to do is to avoid them. But that would be shirking our duties towards security and long-term reliability.

While many customers understandably won’t appreciate changes like this, we view these types of upgrades as key to our responsibility to continuously enhance performance, reliability, security and scalability of the platform. Any system that is not continuously upgrading is taking a short-term view.

The transition to .NET Core represents a significant step towards providing a more robust, efficient, and future-proof system. By adopting .NET Core, we are addressing the current technological demands and preparing for future advancements. 

In this article:

Key Benefits of this Upgrade

Many well-known brands leverage the advantages of .NET Core to deliver services to hundreds of millions of people every day. These include Microsoft Office 365, Netflix, Xbox, Samsung Smart Devices, GE Healthcare, Siemens Healthineers, UPS, Lufthansa and more.

For customers, the benefits of Zanda migrating to .NET Core include:

  • Improved Performance: Faster response times and better scalability can lead to a smoother user experience, especially for applications handling large datasets or concurrent users.
  • Increased Security: While .NET Framework has adequate security protections at the moment, older technologies become more vulnerable over time as more exploits are discovered and patches are released slower, if at all.
  • Enhanced Stability: The application will be able to support more functionality, without impacting stability and resilience, resulting in less risk of downtime.
  • Future-Proofing: Adopting a modern and actively developed platform like .NET Core ensures the software remains relevant and supported in the long term, safeguarding users from potential compatibility issues or security vulnerabilities associated with older technologies.

Under the Hood of .NET Core

The following information will thoroughly explain the technical information regarding Zanda’s transition from .NET Framework to .NET Core. Feel free to skip this part if you are not interested in the technical details.

.NET Core offers several benefits for both developers and end-users. Here's a breakdown of the key differences and advantages:

  • Cross-platform Compatibility:
    • The .NET Framework was originally designed to run only on Windows servers. .NET Core introduces the ability to create applications that can run on various server operating systems, not just Windows. This includes Linux and gives more flexibility when it comes to evolving cloud infrastructure.
  • More Secure:
    • .NET Core is more secure because its own code is open-source. This means that the code can be scrutinized and improvements suggested by a wide group of passionate developers.. This has been proven over decades to result in better security and features. For developers (like Zanda) building software on top of it, this means more flexibility, faster solutions to issues and better security. Unlike closed-source software, where the code is kept secret and controlled by a single company, open-source software like .NET Core confirms that the company is proud of its work, and is happy to have it publicly evaluated and generally considered more transparent and trustworthy.
  • Performance Improvements:
    • .NET Core offers better performance and scalability compared to .NET Framework. In particular, it is optimized for modern workloads and can handle high-traffic applications more efficiently.
  • Containerization Support:
    • .NET Core enables easier deployment and scaling of applications, leading to faster delivery and better resource utilization. This will make it far easier to roll out and roll back new updates.
  • Microservices Architecture:
    • .NET Core aligns well with microservices architecture, allowing developers to build modular, independently deployable components. This can result in improved agility, easier maintenance, and better resilience of software.
  • Support for Modern Features:
    • .NET Core supports the latest C# language features and modern frameworks/libraries, enabling developers to leverage the latest technologies and best practices in their applications.
  • Development Environment:
    • .NET Core provides a more streamlined development experience with tools like Visual Studio Code and command-line interfaces. This lightweight approach can enhance productivity and make development more accessible and enjoyable. In the long run, this can help companies like Zanda attract and retain more of the best software engineers to continue to further enhance the software.

Minimizing Disruption for Users

The transition from .NET Framework to .NET Core is a gradual process and has been going on for some time. Nearly all our system applications and components have already been done, and we are now working on the final (and largest) component. As we navigate this transition, our absolute priority remains the smooth and uninterrupted operation of your Zanda experience. We understand that changes, no matter how beneficial in the long run, can bring about concerns regarding continuity and service quality.

To this end, we have undertaken several proactive measures to ensure that this transition is as seamless as possible:

  • Enhanced System Monitoring: Our engineering team has intensified our monitoring processes, conducting 24/7 proactive surveillance of load indicators and key predictive metrics to promptly identify and address potential issues.
  • Building Reversible Releases: Creating updates in a manner that allows for a straightforward rollback if issues are detected, ensuring a rapid response to emerging problems and maintaining system stability through earlier detection and a lower tolerance for deviations from expected norms.
  • Refined Code Review Process: While we have always had an audited code review process, we recognize that all processes can be improved, ensuring that every piece of code is thoroughly vetted for quality and reliability. These recent incidents have increased our focus on the code review process. 
  • New System Status Page: We have implemented a new system status page to provide you with real-time updates regarding the health and status of Zanda. This page allows you to instantly check if the system is operational and opt-in to receive email updates on any scheduled maintenance or unforeseen system downtimes.
  • Enhanced Communication Strategy: Our commitment to transparency and open communication has led us to intensify our efforts in notifying you promptly about any issues or changes affecting the system. Whether through email, in-app notifications, or our support channels, our goal is to keep you fully informed and prepared for any changes.

We understand the importance of a stable and reliable practice management system for the smooth operation of your health practice. We are committed to ensuring that your experience with Zanda continues to be as smooth and reliable as ever.

FAQs

Can I expect less service disruption going forward?

Yes, whilst we have encountered some issues recently that have been difficult to isolate and resolve, the strategies we are implementing will reduce disruptions going forward.  

Why doesn’t Zanda just release updates on the weekend when most practices are closed? Wouldn’t that allow for issues to be detected without impacting users?

Zanda operates on a continuous development model, deploying updates daily to ensure optimal system performance and introduce enhancements seamlessly. These updates range from minor adjustments to significant feature rollouts and are rigorously tested before release. Our 12-year track record shows that updates typically go unnoticed due to their seamless integration.

Issues arising from updates usually become apparent only under real-world operational conditions. Releasing updates exclusively on weekends wouldn't prevent these issues; they would only become evident once the system is in full use during business hours. Moreover, batching updates for weekend releases would complicate issue resolution, making it harder to pinpoint the cause of any problem due to the simultaneous implementation of multiple changes.

Can Zanda provide notice when an update or system change is going to be released so we are aware in advance?

For our standard daily update schedule, which aims to enhance system functionality, release incremental upgrades, resolve bugs and perform routine maintenance without disruption, issuing daily notifications would be more cumbersome than helpful. Our updates are nearly always seamless and non-disruptive, ensuring that our customer experience remains uninterrupted. 

However, when an updates does cause a system issue it is natural to think that prior notice of the pending update would have been helpful to allow for contingency planning. In practice though this would not be the case. Let's say we made 1000 updates, and one of the updates caused a system issue. Sending advanced notice for each update would not realistically help customers prepare for the one in a thousand that causes a problem.  

Does Zanda conduct any testing before an update is released? 

Yes. Zanda is committed to maintaining the highest quality standards. Our comprehensive testing and Quality Assurance process encompasses automated end-to-end testing, meticulous manual testing, performance evaluations, and thorough code reviews.

Our automated testing looks at the operation of the code, the logic, and it also simulates a user of the application. We have thousands of these tests, which are run for every release. Manual tests of every update are also done, to check the effectiveness and that it complies with the requirements specification.

These measures are underpinned by detailed policies and procedures, mandatory for all our engineering teams, with the aim to ensure that each update meets our quality benchmarks before it reaches you.

Why have there been more service disruptions lately?

Our journey to enhance Zanda's performance and capabilities led us to begin transitioning to .Net Core several months ago. This progressive migration has largely been smooth, with the vast majority of updates and changes integrating seamlessly into our system without impacting user experience.

However, in the recent period, we have observed a few instances where .Net Core components performed unexpectedly in the live environment, diverging from both our testing outcomes and the performance of their .Net Framework predecessors. These discrepancies typically manifest under specific conditions, often not immediately detectable post-release, but rather when a unique set of variables aligns, which can take days to surface.

Addressing these nuanced challenges requires more than simply reverting recent changes. Our team undertakes a detailed review of system logs to pinpoint the root cause. Following this, we craft a targeted solution, which then undergoes our Quality Assurance and pre-release testing protocols. Only after thorough verification is the update deployed, with continuous monitoring to confirm the resolution's effectiveness.

While our goal is always full resolution, some scenarios may lead to incremental improvement but not full resolution. In these cases, our team will repeat the same process until the issue is fully resolved.

What is the estimated timeline for completing the migration to .NET Core?

We are in the final stages of migrating to .NET 8, which is the latest evolution of what was previously known as .NET Core. Our migration has been methodical, addressing each part of our codebase systematically. To date, we have already successfully updated over 30 components, with just one complex component remaining. Due to its complexity, this final section was strategically left for last. We are committed to careful, incremental updates to ensure a smooth transition. As such, we estimate the completion of this phase will take several more months. This approach gives us the best chance to maintain service quality and minimize disruption for our users.

Why are you migrating  to .NET Core despite its phased-out status, and does this align with security and HIPAA compliance standards?

In conclusion, our migration to the latest .NET technology is not just a technical update but a strategic enhancement of our security posture and compliance readiness, ensuring we provide a secure, reliable service to our users.

Can you explain the strategies being implemented to minimize disruptions during the transition? How are you addressing potential issues that were not accounted for previously?

To mitigate disruptions and ensure a smooth transition, we have implemented several strategies:
  • Adjusting Release Strategy: We've refined our update deployment process to occur during local off-peak hours, minimizing service interruption. Although new updates might introduce unforeseen issues, our systems are designed to prevent service disruptions. This strategy will help us manage deployments more effectively and reduce potential impacts on system performance and user experience.
  • Enhanced Quality Assurance (QA): We are expanding our QA team to enhance our testing processes. More comprehensive, automated pre-release testing will be conducted to ensure stability and compatibility of changes before they are implemented. Our goal is to identify and fix potential issues earlier in the development cycle, improving overall system reliability.
  • Prioritizing Critical Updates: We prioritize essential updates to focus on maintaining system stability and performance. Non-critical updates are scheduled less frequently, allowing us to allocate more resources to ensure that all changes meet our stringent quality and reliability standards.
  • Proactive Monitoring and Reversion Capabilities: We employ extensive logging, monitoring, and feature gating to quickly identify and revert problematic updates. This proactive approach will allow us to respond swiftly to any issues, maintaining system integrity and minimizing user impact.
  • Intensified Review Processes: Our engineering teams are intensifying their review efforts, particularly during the development stages. Each code change undergoes thorough scrutiny, a practice reinforced by our ISO 27001 certification. By doubling down on these efforts, we aim to ensure the highest standards of quality and security in our updates.
These measures collectively enhance our system's resilience and reliability, significantly reducing the likelihood of unexpected disruptions during and after the transition.