Here are some notes I took during Mary Poppendieck's keynote speech comparing Lean Product Development and Lean Software Development:
Change isn't the enemy. Anticipate change. It's there to make things flexible. The 'soft' in software is there for a reason. Software is meant to change so stop trying to nail everything down. Write change-tolerant software by employing change-tolerant practices.
Complexity is the enemy. Perfection is achieved when there is nothing left to take away. Write less code. Build what you need now and don't build today what you might need tomorrow - just-in-time not just-in-case. Add features only when you really need them - no features ahead of their time; no features after their time.
The rhythm of doing iterations helps to level the workload by establishing a predictable workflow and a reliable pace. Don't force an increase in the workload beyond what can be achieved with a sustainable pace.
Create a stop-the-line culture. Invest is systems that detect the moment a defect is infected into the code, and then fix it.
You won't achieve fast throughput by maximising person utilisation.
If your more than 10% of requirements are changing as you progress, you've specified them too early. If you have separate test and fix cycles you're testing too late.
Think 'systems'. Build complete systems, not just the software. Focus on the flow of information otherwise you'll realise Conway's Law. Crisply define value. Don't batch-and-queue. Appreciate the lifecycle.