Hi,
Having worked with your software on and off for some time now there are a few things I have noticed that are slightly disturbing when it comes to the SDK.
Usually any SDK (or API for that matter) is supposed to be a smorgasbord of routines to help and speed up program development. Some routines may either be linked to hardware or a "soft" feature but should preferrably be separated from other parts of the SDK and only files that are completely unified in their use should have a connection to each other. There is a term often used for this:"Separation of concern". Then building an application merely consists of selecting the proper building blocks and connect them in an orderly fashion (like LEGO).
Provided application examples should provide a crystal clear and simple use of the building blocks so that programmers get the hang of how things do work without necessarily go through the complete code base.
Unfortunately this is not what I see when I look at the nRF SDK5. Examples are overly complicated and does by no means explain how to write your own application. The SDK contains multiple interleaved samples, possible to save space but makes it virtually impossible to pick only the wanted features from the code base. I do not mind the code being obfuscated (like it is) if it is clear and to the point where programmers can just use the software. Programmers are often adviced to use an example and tweak it to their uses. This would also be fine if it were possible. In my opinion this is only possible if you make alterations to the SDK itself which is fine if you are just working on one single project. Having more than one project can therefore create undesired effects unless you are highly disciplined as a programmer (few of us really are).
Finally I have some objections to the use of the sdk_config file found in every project. Creating a project from scratch is thus a tedious task of finding the bits and pieces needed to make a sdk_config file. Even if you start with an example and add some features later, you will inevitable loose several hours on just finding out which defines are needed. The file also has a tendency to become very big with more than 4500 lines which does not help either. The idea is good that you can control the building blocks by using a configuration but it simply gets to much at times. I suspect that plenty of support cases actually comes down to small but important changes in the sdk_config file.
I realise that the "monster" that you have created is far from easy to change overnight and perhaps you should not even consider altering the code in any way, I still long for small separated building blocks that can be easily accessed and assembled. Perhaps you should consider creating such a SDK instead. Having said that, I still think that it is a good idea to have complete implementations of various standards (radio mostly) ready for the user but those are just slightly larger building blocks or possibly "soft devices".
Best regards
Anders