Product Library Best Practices
It's best to take a moment to think about the way you want to configure a product especially: "How it should be used by users on the planner side?" Which structure logic would work best? What should be defined as parts, which parts are going to be used in accessory slots, etc. Sometimes and especially with more complex products, making even a seemingly small change to the product behavior later on can require plenty of changes to the actual product library structure.
Standardise a naming convention
As your product grows, the more tricky it is to follow the logic throughout the configuration, if you do not have clear naming convention. Naming values in Custom Properties makes it difficult to determine their value across different parts and in general understanding the product structure.
Make it virtually self evident from the name of the item, what it is in terms of eg size or other attributes that help you see exactly what you have without clicking on the part to see the part specific properties.
Do not use a space in names when you plan to use scripting
Do not use spaces in a names. It's better to name objects using camelCase or PascalCase instead of snake_case or kebab-case for scripting purposes at least, when trying to get a part by its name in a function.
The power of ItemLists is something you should carefully learn. It allows you to contain parts of your product in additional structures, that do not interfere with configuration as such. Having families of materials in ItemLists allows clear partitioning of similar assets in a place easing your comprehension of the logic
Copying and linking
Make unique copies of the same part if it is used in other places but it is not entirely same as the original. But when the part, material, accessory slot or other product tree item is shared between many parts, learn to use copy-paste-as-reference to reduce your maintenance work. Remember that items that are linked can be edited once in any place where the item is visible and the change will immediately reflect on all the linked places as well. This way, minor tuning of for example material parameters is done once and the update is reflected across the whole product library where the item is linked.
You can have items in an ItemList and copy as reference the list and the child items are automatically also linked.
This helps in several ways: 1. keeps the product library organized and easy to maintain, 2. easy to find and see these shared objects, 3. you can edit a shared object and the change is reflected everywhere it's referenced (they are essentially linked copies) 4. you can also do this with folders/item lists which is even more convenient. Example of a good shared object candidate are sofa legs that all sofa parts use.
Consider making a hidden product for shared content
If your product library will be rather big, like more than 20 main parts and most of the assets are shared, it will be easier for you to manage the assets in a separate product, which can be set "hidden" so it wont ever show on the planner UI where you mainly manage the assets and ItemLists that are shared between parts, accessories and so forth. This will allow the same convenience of content management, but make it even more easy to find the proper content without having to search through the product tree to the right location. Having clear naming convention helps track which ItemList is which.
Keep it tidy
As the complexity of your product library and the number of assets and rules grow, the generation of runtime data will slow down. Thus we recommend splitting products to different product libraries when the assets do not directly link with each other.
This may mean that you have to upload some assets to many libraries, but it will make generation of runtime data faster, thus making your iteration cycles quicker as you edit and develop.
This starts to be worthwile if your product has many tens of materials and many tens of parts.
Use Pre-built component as a quick view
Use pre-built component to quickly view how your product looks, instead of 'View Product' and 'Open Web app for Product' buttons. You will stay on same tab, dont ahve to click on publish and you can save a design you're now testing. In fact, even if you prefer viewing the product with the other 2 options, it's a good practice to create prebuilt components of various designs to help you during development. In this way, when you make some changes to the product behavior, you can easily test a bunch of combinations with pre-built components.