I am a master student and working on the effects of having nullable types by the example of Java. There seems to be consensus that the nullable by default types cause problems (bugs) and that one should use them carefully. Nevertheless, the negative effects can be observed to this day and the problem can not be considered solved. I try to provide more evidence, both quantitative and qualitative, whether null usage is problematic in general. I am also interested in wether there are certain patterns that avoid the problem effectively.
In my bachelor thesis, I worked on Talents, dynamically composable units of reuse. I built a streams framework where orthogonal features are modelled as Talents and easily composable to build a stream with the desired features (see here). In a seminar project, I classified null checks in a big corpus. Apparently, 71% of objects compared against null are in fact returned from method calls. Surprisingly to me, we found that 35% of all conditionals (if, where, for, ternary operator, ...) are null checks (see here).