progress = Mathf.Clamp01(progress + speedspeedPerTick);
current = Mathf.Lerp(start, end, progress);
current = Mathf.Lerp(current, target, sharpnesssharpnessPerTick);
This parameter isn't quite a "speed" anymore, because we approach the target in a Zeno-like fashion. If sharpnesssharpnessPerTick waswere 0.5, then on the first update wewe'd move halfway to our goal. Then on the next update wewe'd move half the remaining distance (so a quarter of our initial distance). Then on the next wewe'd move half again...
This gives an "exponential ease-out" where the movement is fast when far from the target and gradually slows down as it approaches asymptotically (though with infinite-precision numbers it will never reach it in any finite number of updates - for our purposes it gets close enough). It's great for chasing a moving target value, or smoothing a noisy input using an "exponential moving average," usually using a very small sharpnesssharpnessPerTick parameter like 0.1 or smaller.
progress = Mathf.Clamp01(progress + speedspeedPerSecond * Time.deltaTime);
// or progress = Mathf.Clamp01(progress + Time.deltaTime / durationSeconds);
current = Mathf.Lerp(start, end, progress);