Since I and some others have had issues with the current multiclassing system, I'd like to propose a change which limits abuse of the system, but still allows for traditional multiclassing at a cost:
1. Declare certain 1st level abilities as signature abilities for a class. These abilities you don't get automatically when you multiclass, but can purchase them at the cost of a feat. For example, multiclassing rogues might get sneak attack, but not get dex to damage by default. Clerics might get a deity, but not a domain. First level is front-loaded, so this helps solve some of that problem, but makes the things you miss accessible via feats.
2. Move stat boosts to 1, 5, 9, 13, 17. Still 5 of them, but now actually 4 levels apart as opposed to 4, then 5.
3. At each stat boost (after the first), you can switch to a new class by giving up either 1 or 2 of your stat boosts for that level (you get either 2 or 3). If you already have more than one class, you can choose to swap to any one you already have for free at thiss time.
4. Feats you select *must* be from your current class, at a level appropriate for your level for that class (I'd consider being flexible on this, and allowing feats from other classes you already have).
5. Handle multiclass spellcasting: For each level outside of your class, you get 1/2 the progression you'd get for a level with your class. You get a new level of spells every 4 levels rather than 2.
Why this system? It solves the following:
1. Ensures shallow dips for single abilities don't occur.
2. Lets you front-load abilities at level 1, and by declaring some of them "signature", ensures someone splashing into the class has access to them, but doesn't get a ton of extra abilities for free.
3. Ensures people who multiclass as casters still get *some* benefit to their casting as they go up in level.
4. Gate abilities to levels of investment in a class. Anything 5 or higher requires 2 "blocks" of multiclassing, 9 or higher requires 3 "blocks"...
Note: This is a proposed framework, but if something here doesn't work, it'd be easy to alter pieces of it as appropriate.