Complexity and Technical Debt
• Recognize that small changes can have significant impacts on complex systems
• Always consider technical debt in decision-making
• Understand that there's often a large gap between idea simplicity and implementation complexity
Time and Resource Management
• Minimize context switching and parallel work to reduce hidden costs
• There is a non-trivial impact when you change requirements on the fly
• Set realistic expectations by thoroughly understanding task complexity
Collaboration and Involvement
• Involve engineers as partners in product decisions
• Include engineers in "What?" and "Why?" discussions for better outcomes
• Align product direction with engineering team strengths for optimal results
Communication and Understanding
• Provide clear product documentation and communicate long-term trajectory
• Take time to understand non-intuitive engineering challenges
• Avoid using words like "just" in change requests as they understate complexity
Engineering Priorities
• Allow engineering excellence to take precedence over new features when necessary
• Differentiate between "good enough/fit-for-purpose" and "perfection" in your requests
• Prioritize product health and maintainability alongside new features
Team Dynamics
• Remember that engineering teams & even engineers aren't interchangeable - each has unique strengths
• Share credit and recognize engineering contributions explicitly
• Actively help engineers grow as product-minded professionals
Estimations and Productivity
• Treat estimations as informed guesses, not commitments
• Understand that more development time doesn't always equal more productivity
• Create realistic timelines that account for the full development cycle