From Twitter this morning: writing tips for academics. Prof. Feamster's advice in that column is excellent. I would just like to add one thing that I have found very helpful in my own writing: think about what the paper — and each section of it — need to accomplish.
Software engineers are familiar with the concept of requirements: when designing a program, it is important to understand what its users require it to do. If you do not know what the program is supposed to do, and how it relates to the things around it, it is difficult to write a good program. Indeed, it is difficult to even know what a good program would be.
I apply a similar idea to my writing. There are many times when I do not necessarily think about it explicitly. But when I get stuck on a section of a paper, I often find it helpful to think about what that section is supposed to accomplish. I even think about it like a software module: its prerequisites or dependencies (i.e. the things it assumes previous sections have stated or set up) and its outputs (the things later sections will assume it will have done). If I spend 5 minutes writing down what the section has to say, it is often easy to finish drafting the section.
I personally find this more useful than deep outlining. Many people like to outline down to the paragraph level, writing out their paragraph topic sentences. This is good advice, and likely helpful to many writers. But for my own writing, I have difficulty thinking in that way. I find it more useful to outline the sections and subsections of my paper, and then start thinking about each section's requirements. Sometimes, these requirements may turn directly into paragraphs; other times, they may be merged or split or interwoven. But they're still useful, and they give me something concrete to think about as I go to implement the ideas with prose.