One of the first programs I ever wrote was something like:
100 CALL CLEAR 110 OPTION BASE 120 FOR 1=0 TO 20 130 PRINT SIN(X-3.141592) 140 NEXT X 150 END
This will return something like:
Look how beautiful values alternate between positive and negative. How there is a balance between peaks and valleys. This illustrates the realities of being a software developer. Some times you will be killing it. Solving problems at a great rate. But then, no matter what process you follow, there will be valleys were your output will be flat, at best, and some times even negative, producing technical debt that will make any work done during this period "backward" progress on any work that you are making.
Having consciousness if you are on the top of the sine or at the bottom is hard. Is this, what makes a good programmer great. A great programmer understands when he is burned and takes his time to rest the mind and allow his performance curve to go up.
Management has to understand this. Having strategies that allow a team to work out these different performance stages will prevent permanent burn out, and loss of talent. Promoting healthy habits in the team and allowing people to recover from performance peaks.