I'm excited to have created this simple page where I can write short posts that I can refer back to.
Feel free to ask questions right below each blog post, or send me a message on linkedin.
๐ช Agile embodies values and principles, allowing flexibility rather than rigid rules.
โ๏ธ The best helmsmen are ashore. If you want something done right, do it yourself. Hindsight is 20/20.
๐ค Persuasion over coercion, interactions should be rooted in voluntary mutual consent. Aligning personal incentives towards a common goal is more effective than enforcing a universal set of rules. A majority or privileged class may feel legitimized to enforce rules on others (legal positivism). This may result in conflicts with universal moral principles that govern human behavior (natural law), which can lead to situations where individuals may feel compelled to flee or resist, lacking alternative recourse.
๐ง Open-mindedness, listen with the intent to understand, not the intent to reply.
๐ Abstain from using logical fallacies or statistical errors (unintentionally) in arguments.
๐บ Silos and echo chambers emerge in environments devoid of social interaction.
๐ฌ Asynchronous communication over scheduled meetings. When assistance is needed, a simple message suffices, followed by a call. Meetings should not be reserved for socializing; instead, take a moment to enjoy a drink together.
๐ธ The shorter the feedback loop, the less time and money is wasted on developing unwanted results.
๐ฆพ Automate processes to alleviate repetitive tasks and allow developers to focus on more valuable work. Embrace mistakes as opportunities for learning, leveraging human creativity and development environments to mitigate adverse effects.
๐งช Only tested software can reliably change.
โ๏ธ To avoid complex code, designs ought to remain flexible, with regular refactoring becoming standard practice.
๐ฅ Don’t repeat yourself - DRY, except when introducing coupling between components that should remain separate.
๐ดโโ ๏ธ Superficially positive solutions often conceal negative side-effects:
The concept of a Sprint, can inadvertently prioritize individual tasks over collaboration, impacting broader project priorities. Additionally, fixed time frames lack agility and responsiveness to change.
Empirical measurements of progress, such as lines of code or storypoints finished, may give a misleading sense of success or failure, overshadowing the primary measure of progress: working software.
Documenting ways of working can foster passivity and hinder creativity, leading to cargo cult behavior.
While estimating repetitive isolated tasks may seem acceptable, asking developers to provide estimates for complex tasks can create a false sense of assurance. This may lead to management misinterpreting deviations between estimated and actual time spent, while developers may feel pressured to overwork or neglect important tasks.
Mandatory code reviews may slow down development without guaranteeing successful integration. Flexible code review processes may be more effective.
In compulsory Retrospectives, developers may feel compelled to offer improvement suggestions, resulting in action items and subsequent meetings. However, these gatherings can paradoxically become burdensome overhead rather than facilitators of progress. Due to the obligatory nature of the setting, genuine pain points are often too contentious to address, undermining the intended purpose of the Retrospective entirely.
Bureaucratic processes and micromanagement can stifle individual growth and lead to talent attrition.
Deadlines and percentage complete metrics do not necessarily improve outcomes and may discourage collaboration (as developers commit to individual deliverables). Increasing man-hours can lead to diminishing returns (The Mythical Man-Month), team disintegration, and developer burnout.
Agile Values
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
That is, while there is value in the items on
the right, we value the items on the left more.
Agile Principles
Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
Business people and developers must work together daily throughout the project.
Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
Working software is the primary measure of progress.
Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
Continuous attention to technical excellence and good design enhances agility.
Simplicity–the art of maximizing the amount of work not done–is essential.
The best architectures, requirements, and designs emerge from self-organizing teams.
At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.