We already have a question about tools useful specifically for testing, but what about actually writing the code? Which packages do you find speed up your development? Which aids do you use to quickly and easily navigate and understand your projects?
Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.
edebug: Step-by-step debugging of Elisp code.
checkdoc: Learn about style errors in your comments and docs.
elint: Linter for Emacs Lisp.
paredit: Manipulate lisp code as trees instead of lines. Never have unbalanced parentheses.
lispy: vi-like alternative / superset of
paredit. Additionally includes shortcuts for outlines, narrowing, edebug, ediff, semantic, ace-jump-mode, multiple-cursors, cider, slime and geiser.
multiple-cursors: Simultaneously edit multiple similar expressions. Amognst other things, useful for code refactoring.
erefactor: Code refactoring.
redshank: Another refactoring library (designed for Common Lisp, but works well with Emacs Lisp).
macrostep: Interactive in-buffer macro expansion.
yasnippet: Code snippets for quick expansion of repetitive idioms (examples here)
speedbar: The speedbar is a great way to navigate through your project. It recognizes 'tags' as
defvars (and the like) and provides visible bookmarks as an outline.
outlined-elisp-mode: A collection of settings for the
outlineminor mode for Elisp buffers.
elisp-slime-nav: Instant jumping to function and variable definitions with
elp: Interactive frontend for the Emacs Lisp Profiler, useful for exploring what exactly is slow in your profiled function and how it interacts with the rest of Emacs.
names: Provides a macro to create namespaces
Gitand its Emacs front-end
Magit: arguably the best version control system and a very well-thought Emacs front-end for it.
ielm: interactive REPL