We wanted to say at the outset that you, our users, always come first. It’s you that have helped what make Corona Renderer is today, and shaped how it has developed and what features it includes; and when we think of a new feature that maybe no-one has requested, we do so from the point of view of considering what will benefit most users most often, with a primary (but not exclusive) focus on the daily workflows of arch-viz and product visualization as those are the backbone of what Corona Renderer is for.
With that in mind, let’s take a look at “how development happens” here on the Corona team. It’s a long article, because we take a lot of things into account!
It may seem strange to start at the end, with a final release, but the development of the next version begins before the previous one is finished.
We are always keeping track of new algorithms, new approaches to solving rendering problems, what users are requesting, and of course ideas that we have on our own. You’ll find these on the Tentative Road Map (more on that later) as the “Pool of big ideas” list.
So, as development on one version is wrapping up, we’re already beginning to think about which of those items from the “Big Pool” of ideas are going to be in the next version – and thinking of things that might not be in that “Big Pool” which take priority.
As soon as one version of Corona Renderer is released, then it’s time to update the Tentative Road Map! This is where we take our thoughts as development was wrapping up on the previous version, and decide on the things we hope and plan to work on next. Here, we have to consider the immediate short term of the next release, but also factor in the longer term of the release after that and beyond (Corona Renderer is going to be around for a long time!)
This decision is always a hard one. There are a great many factors that come into play, and there’s no perfect answer on how to do this, but we do the best we can. Here are some of the things we consider when making the decision:
These are always high priority. This means that an existing feature is not working properly, which could mean things like:
As you can see, even here there is a great variety in how important something could be. We have to assess how much of an impact it has, how often that happens, and how much and how often that interferes with the workflow of our users.
Some of that will be informed by what users tell us, some of it we may have to assess for our ourselves to the best of our ability. For example, we may actually find a bug ourselves without any users reporting it – does that mean it isn’t happening for users since there have been no reports, or it’s happening so rarely that no-one realized it was a bug, or just that people have noticed but no-one has had the time to write it up and report it to us yet.
While a bug usually takes priority over new features, even that depends on our assessment of all those factors. Some are clear, such as crashes, but it may not be clear in other cases – perhaps the performance improvement that could be gained by fixing it is fairly minor, and a new feature would actually be more important for our users.
Now it’s time to weigh it all up, bugs and new features together, and decide what we want to work on (or even can work on).
As a formula it might look something like:
(How easy is it to code) x (how clear is the solution) x (how quickly can it be done) x (how many users it would benefit) x (how frequently would it benefit our users) x (how much time and manpower do we have)
Let’s take a deep dive into that.
That’s a long list, and to complicate things, many of these factors are tangled together, which means there is no 100% guaranteed, perfect, way of assessing them and prioritizing between them.
However hard it is to assess and weigh up all those, the driving force behind our decisions is always what will be of the most benefit to the most users.
It’s nice to think with code itself being inherently founded on logic, nothing unexpected will ever come up. This is only true while code is very simple, though.
It’s impossible to cover all the ways that plans can change, so perhaps the best way to describe how plans can change is to give some examples of what that might look like:
Example 1 – We start with a rough outline of features which we think would be most useful and that can be done within the release cycle. Then there is a process of re-evaluation as we go, based on things such as user feedback and what we uncover during development. Sometimes that leads to some changes, in order to deliver the best match of features to user needs at release (rather than how things looked at the time of pre-release planning).
Example 2 – Partway through the development cycle, we learn of some new feature. It turns out that this should be fairly easy to implement, and would be a frequent benefit to many users. This gets added into the development cycle, which may or may not mean other features move back until later.
A good example here is our Rendathon event, where for one week developers from the V-Ray and Corona teams get together to compare code and implementations, and then work together to see how feasible it is and start creating the code to do that. This happened in the Rendathon meeting between Feb 24th to 28th in 2020, where the brainstorming and coding uncovered that it looked possible to:
Since these had proven viable and had clear frequent benefits for a majority of our users, and because the coding work had already started and test results were being produced after only a week, these were added in to our plans for Corona Renderer 6.
And to show how complex things get and how things are always changing, during development it then turned out that the new secondary cache performed as expected in some cases, but in others it was worse than the UHD Cache – so the feature did make it into the release, but was not made the new default as expected and left as an experimental option if users wanted to try it. Of course, this was also after extended development time to see if we could fix those cases where it didn’t work before Corona 6 came out too.
Example 3 – A user (or maybe more than one user, or maybe ourselves!) discover a serious bug in the previously released version. Resolving this takes a higher priority, and as a result of the time and manpower needed to fix it, we have to move something out of the current development cycle.
That was a lot of reading – and really, only just scratches the surface of it all. Bug fixing and prioritizing new features is complicated, and there is no perfect answer, or even a perfect process for coming up with an answer. It’s part science, part art, and what’s most important is the spirit in which it is approached – for us, that’s always “what will benefit most of our users most often”.
Which does not mean we always get it right (we don’t, whether that’s in picking features, or estimating how long things take). What we can say is this though – even when we get it wrong, our heart was in the right place!
The article mentions how important user feedback is, so here’s how you can become part of the process! Keep up-to-date with the Changelogs in the daily builds sections of the forum:
Corona for 3ds Max Daily Builds Corona for Cinema 4D Daily Builds
The Changelog posts in those sections detail what is in each daily build, giving you a chance to test new features well before release. Then you can give us your feedback in the discussion/reporting threads there too, where we welcome suggestions for those new features, as well as any reports of problems using them.
Thanks for reading, and we hope you’ve found this an interesting and enlightening look into how we run things during the development of our software and products. The next article will be an update on what is going on with Corona 7.
All the best, The Corona Renderer Team
Want to request a feature? Feature requests – 3ds Max Feature requests – Cinema 4D
Want to tell us about a bug: How to report issues – 3ds Max How to report issues – Cinema 4D