It's not so much the problem itself that takes 20 minutes (though if you have loose specs, you have to think of the best way to solve it, which I prefer), it's how to solve the problem within the constraints of the existing codebase / framework / design philosophy.
I can give you a concrete example. At a place I worked at a while ago, they wanted to integrate shipping. Well they had already done Fedex but wanted to now do UPS. Shipping has all sorts of special services like Saturday delivery and return receipts, etc. So first you have to understand what they were doing with the Fedex implementation, then you have to understand the constraints of the UPS implementation and conform those constraints into the same functionality of the Fedex implementation without missing any of the features or how the implementation works / looks to the user. You have to apply this to the front end, the back end, and the database.
That took a lot longer than 20 minutes, because you have to keep 2 mostly full implementations in your head at the same time while you are designing the second.
I can give you a concrete example. At a place I worked at a while ago, they wanted to integrate shipping. Well they had already done Fedex but wanted to now do UPS. Shipping has all sorts of special services like Saturday delivery and return receipts, etc. So first you have to understand what they were doing with the Fedex implementation, then you have to understand the constraints of the UPS implementation and conform those constraints into the same functionality of the Fedex implementation without missing any of the features or how the implementation works / looks to the user. You have to apply this to the front end, the back end, and the database.
That took a lot longer than 20 minutes, because you have to keep 2 mostly full implementations in your head at the same time while you are designing the second.