More seriously than the repetition of the call to DefaultAction is the style itself because the code is written non-orthogonal (see [this answer][1] for good resons for writing orthogonally). To show why non-orthogonal code is bad consider the original example, when a new requirement that we should not open the file if it is stored on a network disk is introduced. Well, then we could just update the code to the following: if(FileExists(file)) { if(! OnNetworkDisk(file)) { contents = OpenFile(file); // <-- prevents inclusion in if if(SomeTest(contents)) { DoSomething(contents); } else { DefaultAction(); } } else { DefaultAction(); } } else { DefaultAction(); } But then there also comes a requirement that we should not open large files over 2Gb either. Well, we just update again: if(FileExists(file)) { if(LessThan2Gb(file)) { if(! OnNetworkDisk(file)) { contents = OpenFile(file); // <-- prevents inclusion in if if(SomeTest(contents)) { DoSomething(contents); } else { DefaultAction(); } } else { DefaultAction(); } else { DefaultAction(); } } else { DefaultAction(); } It should be very clear that such code style will be a huge maintenance pain. Among the answers here which is written properly orthogonally are [Abyx' second example][2] and [Jan Hudec's answer][3], so I will not repeat that, just point out that adding the two requirements in those answers would just be if(! LessThan2Gb(file)) return null; if(OnNetworkDisk(file)) return null; (or `goto notexists;` instead of `return null;`), **not affecting any other code than those lines added**. E.g. orthogonal. When testing, the general rule should be to [test exceptions, not the normal case][4]. [1]: http://stackoverflow.com/a/3272062/23118 [2]: http://programmers.stackexchange.com/a/122488/11110 [3]: http://programmers.stackexchange.com/a/122508/11110 [4]: http://stackoverflow.com/a/223881/23118