I assure you this was not a quick fix without a lot of consideration. Believe it or not, there’s been at least 1 engineer working full time on docking for the past year and often times 3 or more.
I’ve told the story in various details before but it never hurts to tell it once more I guess:
The docking system when released in late 2022 was plagued by multiple issues that we never saw with numerous rounds of internal testing. But out in production, people were reporting corrupt window issues — often the Viewport was simply disappearing during Play Testing. We had all hands on deck to try and reproduce the issues internally based on information from the community. To those that gave us logs, videos, and screenshots: thank you!
While we tried everything we could think of to reproduce it, we noticed that running Reset View would resolve the issue. We put in logic to detect the corruptions, still not knowing the actual cause yet, and automatically reset the view. Originally we tried to pop up a dialog to encourage users to reset their layout but almost everyone ignored that popup and kept complaining about their issues. So we switched to automatic resets… which is not my first choice by a long shot but it did help keep people working on their projects.
There was no simple regression to patch but we did try a couple of speculative fixes that didn’t pan out. Our only other option at the time was to completely disable any docking capabilities and force everyone to single layout of our own design. So in reality we had no quick, simple options.
FINALLY we got a reproducible case to work with. It only appeared on one particular laptop we had and we could only get it to occur with multiple hours of dock layout thrashing. We treated that laptop like a fragile glass sculpture and we were eventually able to root cause the issue: depending on a bunch of variables (working style, plugins utilized, window layout, OS) the underlying OS kernel would just start spitting out bad data. No errors — just invalid native window handle values that look totally normal but poisoned the layout data.
Because this didn’t affect all creators, we spent time exploring every possible option to resolve this without changing functionality. During this time, we were still getting frequent angry reports about disappearing Viewports, reset views, and various other related problems. But since the issues were widely varied in how they manifested, we needed a solution that would definitively fix it today and going forward.
Of all the things in play (user behavior, docking system, and OS) the only thing we had the most control over was the docking system. The other thing we learned during all of this was the corruption conditions were related to deep window hierarchies that were possible by allowing infinite and arbitrary layout combinations. We took more time to investigate what type of layouts most people utilized. We determined that a fixed set of “regions” with some reasonable splitting limits/conditions would work with most layouts.
At this point we are several months into the issue. We figured out how to wrestle the docking system into respecting these new rules. Docking is at the heart of our window/widget management and making such a serious change required several rounds of testing and bug fixing before we could even get it out as a Beta.
Adding to the “fun”, we also had to change the data saving part of the new layout system. Which meant old layouts could not be migrated over and anyone that got switched over to the new system would get a freshly reset layout. So we couldn’t roll this out as an A/B or even your typical Beta feature. But we did finally get a Beta feature out in December that required explicit opt-in even if you have auto enroll turned on.
We ran the Beta through the holiday season, got some excellent feedback from this group on how to improve the docking rules to support more layouts. In April after we fixed the last of the known crashing issues, we flipped off the explicit opt-in which automatically switched more people over and we saw an immediate decline in corruption issues.
Having to rollout a change that affects all users to solve several “moving target” issues is a big product challenge. On the UX, we came up with the best solution we could within the constraints. There’s not a lot of choices on how to show where available docking areas are when they are empty. That said, I do think there’s some improvements we could make: adjusting the rules to support more layouts, make the placeholder panels smaller, and introduce a delay so they don’t appear during quick adjustments. So I’ll be trying to get those through but it’s going to take some time.
If you’ve read this far into Grandpa Paul’s story time, thank you!
Honestly this isn’t even all of the story but hopefully this gives some insight on how much effort and thought we’ve put in here. This has been a tough one to work through but we will keep iterating and trying to find ways to make this better (with your help!)