It's one day before the early access for the Revit Family App starts, and ideally I should be working on the early access page, emails for the first batch of users, screencast of how everything works, etc.
Instead I decided to build out the unit system in the editor as this is pretty important for international users. I'm based in Europe and therefore I use the metric system, however the majority of our customers as well as the users who joined the early access program so far are based in the US, which are using the imperial system.
I've put this topic off, as I thought it would be easy and straight forward to implement, however throughout today I really felt like going down the rabbit hole.
First I thought to persist the metric values in the database and only convert the displayed values in the editor, however once that was implemented I got quickly to the conclusion that this was a really bad idea due to rounding issues.
That realisation meant ditching my implementation and coming up with a better more robust solution. I ended up moving the entire units system to the backend, persisting the actual units the user has set for a particular Revit family, which eliminates all rounding issues and works just beautifully and so much more efficient. When the units for a Revit family do get changed, the conversion runs just once across all elements and that's it.
Although it took all day instead of a few hours, I'm really happy with the way this feature has turned out. At times it really felt like going down the rabbit hole without hope that this could be completed, tested and deployed in time for the scheduled early access.
I squeezed that change in before the early access starts, as I wanted to avoid the consequences of wide reaching changes once real users are starting to create data that would need to be migrated. I won't be able to avoid that in the future but for today it felt the right thing to do, even if that means that I'm running late with all the content preparation to kick off the early access tomorrow.