Maker's Schedule, Manager's Schedule (2009)
This is directly analogous to memory allocation[1].<p>Your day is the heap of all available memory.<p>"Manager time" is a small allocation. Since the manager's heap only uses blocks this size, she can do this all day without any problems or fragmentation.<p>"Maker time" is a large contiguous block. If the heap is empty, you can allocate them without any problem. But stick one manager-sized block in the middle and now you've split your heap such that the total time available is large enough, but it's not contiguous. Classic heap fragmentation[2].<p>pg's solution is the classic one in memory management: memory pools[3]. Partition your heap into regions for different-sized allocations. Small allocations always go in one region, large ones in another. "Office hours" is your small block allocator.<p>I often hear people say, "Look, I program in <high level language> with <giant standard library> all day. Why should I care about this old low level CS stuff? It's already been done for me!"<p>This is a great example to me of how those old concepts are still useful once you realize they are only a single analogy away from being about your new high level problem.<p>[1]: <a href="https://en.wikipedia.org/wiki/Memory_management" rel="nofollow">https://en.wikipedia.org/wiki/Memory_management</a>
[2]: <a href="https://en.wikipedia.org/wiki/Fragmentation_(computing)#External_fragmentation" rel="nofollow">https://en.wikipedia.org/wiki/Fragmentation_(computing)#Exte...</a>
[3]: <a href="http://gameprogrammingpatterns.com/object-pool.html" rel="nofollow">http://gameprogrammingpatterns.com/object-pool.html</a>