Do you re-use your functions, or do they only exist to break apart a single operation into smaller blocks? If it's the latter, then he may have a good point
I disagree, strongly. Breaking a large routine into smaller ones abstracts away what those smaller routines are doing. It puts a boundry around their interaction with the rest of the code, and puts their code away somewhere that I don't have to worry about, unless there's some reason I want/need to know the details of how that routine accomplishes what it does.
Both approaches have merit and should be used where it makes sense. When abstracting away some lower level detail, a separate method may be best, but when breaking a higher level method into it's higher level steps (if that makes sense), keeping it all in one method keeps it linear which can help with reading/review.
It matters though how a method is broken up. Use whitespace to separate logical sections. Have a short comment at the top of each section to indicate what that section does. Write the comments first as an outline of the method. Declare variables where they are first used. Declare them in a limited scope where possible. Declare them const where possible (especially if method-global) to limit later misuse. In some languages you can introduce a nested scope for no other reason than to isolate local variables if you like.
And note that breaking the method into separate sub-methods doesn't necessarily solve the problem of changes near the beginning breaking things later on. It just makes it harder to know where the "beginning" and the "later on" are.