A good way of finding your own giants is trying to comply with all licenses your own software depends on.<p>When writing a LGPL licensed CMS server, I tried to find all sub-projects to make sure we could distribute the software safely. Sadly, not every framework and plugin does list its own dependencies correctly - often you will find components in the lib/ folder that require specific attribution with the author's name if the software is to be used legally.<p><a href="http://cinnamon-cms.com/de/cinnamon-server/lizenz-ubersicht" rel="nofollow">http://cinnamon-cms.com/de/cinnamon-server/lizenz-ubersicht</a><p>And for a list of Giants and Dwarves:<p><a href="http://cinnamon-cms.com/de/standard/riesen-und-zwerge" rel="nofollow">http://cinnamon-cms.com/de/standard/riesen-und-zwerge</a><p>edit: clarification / fix typo
> I generally understand the full stack from assembler all the way up to managed code and beyond to the cloud.<p>Please let this be the new definition of 'full stack developer'. I cannot stand the current definition.
All that abstraction has a cost. Additional compute time (and energy) to work through the abstraction layers. Having to debug someone else's code when it doesn't "just work". Having to re-write the abstraction layer when your work no longer fit within the defined parameters of the abstraction.<p>Frequently, the benefits of developer productivity outweigh these costs, but when an abstraction falls apart, it has a tendency of doing so spectacularly.<p>I tend to think of abstractions like those mentioned in the article as land mines full of technical debt. At first, it's easy to avoid stepping on them. But eventually you will step on that landline (perhaps even intentionally), and when it does, your productivity is going to suffer severely.<p>The analogy fits in one other way: the cost of clearing those abstraction land mines is disproportionate to the cost of putting them in your code in the first place.