Skip to main content

Software Practices

Software exists to help people solve valuable, real world problems.

You need to evolve flexible, trust-based, and speed-oriented approaches for tackling complex, fuzzy problems. Fuzzy problems require a different approach than traditional agile or waterfall methods. Complex problems are where cause-effect relationships are not clear, and best practices don't apply.

Delivering Value

  • The age of agents is driving the need for new approaches. This involves programs running on behalf of users, making suggestions and assisting with tasks.
  • Speed is crucial in solving fuzzy problems. The competitive advantage comes from being able to try ideas out quickly and aggressively.
  • Traditional agile roles (like QA, Business Analyst, Iteration Manager) tend to evaporate when solving fuzzy problems. The focus shifts to two main roles: customers and developers.
  • Trust is essential in creating a manager-less process. This includes trusting that programmers care, leaders will emerge, and problems will be solved without constant management intervention.
  • The organization should have a delivery focus, with everyone supporting the goal of getting code out the door faster.
  • Manager Serves: Management inversion is important, where the manager (or "concierge") works for the team rather than the other way around.
  • Simplify Titles: Specialization institutionalized with titles can be a barrier. The speaker suggests creating new, more flexible titles for new projects to overcome this.
  • Lead via Action: leaders still contribute to coding and other tasks rather than being full-time managers.
  • Invest in Teamwork: Keeping teams together and bringing work to them is more effective than constantly reshuffling team members for each new project.
  • Progress: Appraisals and coaching should be separated in manager-less teams, with coaching preferably done by outside mentors.

Engineer Flow

Understand how data flows through a system, how it created, stored, what impacts it's change of state, and who/what needs to know about that.

  • Flow of Information: For information to be valuable it must be timely and actionable.
  • Flow of Progress: The smooth, uninterrupted advancement of a project. Principles include clear process logic, synchronization, and minimizing waste. Practical steps to achieve this include defining clear steps and responsibilities and coordinating tasks and timelines.
  • Flow of Value: The flow of value focuses on delivering maximum value to the customer with minimal waste. This involves value stream mapping, lean principles, and continuous improvement. Strategies include implementing lean methodologies and regularly assessing and improving processes.

Growth Mindset

Evolve mantras to stay on track delivering value. The primary goal is to gain confidence, surface issues, learn faster, and design systems that scale well.

  1. Dumb questions rule. Ask a minimum number of "dumb" questions every day when you join a new team. It surfaces important issues others were too scared to ask about.
  2. Learn git really well and don't learn a codebase through the code tab, start in the PR tab to see what is changing and why.
  3. Make it deploy, then make it useful. Deploy code as soon as you make it before building out all the features. It makes debugging and learning much easier.
  4. Learn git really early. The confidence from realizing making changes isn't scary is huge.
  5. Interview a lot, at least once every 6 months. Companies have an incentive not to promote you, so you need to know your true market value by interviewing elsewhere frequently.
  6. Aim for simple architectures and designs, they tend to scale surprisingly well compared to starting with complex ones.
  7. Practice taking interviews to level up.

What is the most important question you could ask yourself to make progress?