Principles


This list is not a theoretical manifesto, but a set of principles I have seen work time and again from my vantage point as a software engineer on very diverse teams. These are observations that I always try to keep in mind when I find myself leading or influencing. Of course, they must be adapted to each project, context, and culture. Following them does not guarantee success, but adopting a pragmatic approach focused on solving problems efficiently, effectively, and sustainably usually makes the difference. After all, it's just software.

Communication & Transparency

  • Clear communication & direct feedback: Open channels with honest, constructive, timely feedback. Disagreements should be voiced immediately.
  • Shared knowledge with clear ownership: Everyone understands what others are working on and collaborates to reach consensus. If consensus cannot be reached, the specialist takes the final decision.
  • Prepared and focused meetings: Every meeting has a clear agenda and objectives shared in advance.
  • Cross-cultural awareness: Be mindful of communication styles in multicultural or distributed teams.
  • Remote Working: Ensure your camera is on and positioned at eye level. Maintain proper lighting and a tidy, professional environment.

Methodology & Process

  • Adaptive methodology: Choose the right framework (Safe, Scrum, Kanban, Waterfall, hybrid) based on context. Agentic development is exposing the limits of human-centric processes.
  • Software engineering should always have been spec-driven. Agentic development finally makes that discipline non-negotiable.
  • Realistic planning with buffers: Include reasonable margins for unexpected events.
  • Team standards & working agreements: Document acceptance criteria, testing policies, code standards, security protocols, and team-specific definition of "done". Treat specifications as first-class design artifacts: written before implementation, precise enough to guide both human developers and AI-assisted tooling.

Value Delivery & Quality

  • Continuous & visible value delivery: Frequent releases providing tangible, measurable value to users. Users should always feel progress, balancing visible and internal work.
  • Balance speed with sustainability: Deliver value continuously without sacrificing quality or future sustainability. Plan technical debt explicitly.
  • Specs and automation as force multipliers: Invest in automation across the full delivery pipeline (testing, deployment, and increasingly construction itself). Clear, unambiguous specifications are the input quality that determines output quality when working with AI-assisted development.
  • Spec-driven delivery: Design is complete when the specification is unambiguous. Invest in writing clear, structured requirements before construction. This discipline improves human collaboration and is the foundation for reliable AI-assisted development.

Technical Decisions & Continuous Improvement

  • Collaborative architectural decisions: Discuss and agree on technical choices; document context and reasoning. Well-structured architectural decisions serve double duty: onboarding reference for the team, and persistent context for AI-assisted development tools working within that codebase.
  • Culture of experimentation & learning: Encourage ideation, controlled experimentation, and allocate time to learn new technologies and best practices.
  • Actionable metrics, not vanity metrics: Measure what drives improvement: lead time, deployment frequency, user satisfaction, and total cost of delivery (including AI and token spend where it applies).

Risk & Expectation Management

  • Proactive risk management: Identify, communicate, and manage risks early. Be transparent about limitations and dependencies.
  • Blameless culture & team wellbeing: Post-mortems focus on understanding and improvement. Monitor burnout and respect personal boundaries. Healthy teams are productive and sustainable.
@Nothofagus
FAVORITES EXPERIENCE MASTERCLASS CONNECT