#mindset
10 posts

Become a better developer by mastering the superpower of deep work

Deep work is the ability to focus without distraction on a cognitively demanding task, to produce results in less time. To develop a good deep work habit, add routines to your work life.
Read more

Become a better developer by mastering the superpower of deep work

  • Deep work is the ability to focus without distraction on a cognitively demanding task, to produce results in less time. To develop a good deep work habit, add routines to your work life.
  • Check your agenda for important meetings and plan your day’s deep work sessions, breaks, and shallow work.
  • Arrive at work well before colleagues, when there is no noise, no meetings & no demands that require context switching.
  • Once your teammates arrive, take a social break or do some shallow work - answer emails, check feeds, engage in the daily scrum. Then tackle another deep work session.
  • Create a shutdown ritual to end the day - answer important emails, update task statuses and do small tasks that help you prepare for tomorrow.
  • Once you leave, practice stopping to think about work. If you can, turn off work-related notifications.

Full post here, 15 mins read

The programmer mindset: main debug loop

What the author calls a ‘main debug loop’ is a natural tendency most programmers develop over time: Write a small piece of code. Run the code. Fix what’s not working. Repeat.
Read more

The programmer mindset: main debug loop

  • What the author calls a ‘main debug loop’ is a natural tendency most programmers develop over time: Write a small piece of code. Run the code. Fix what’s not working. Repeat.
  • Validating small pieces of code you write while you write them (in-application validation) is better for code quality & for speed of the overall project than using only testing as a validation method.
  • However, in many cases this approach may consume a lot of developer time due to the latency in the file system, the runtime loading the change you just made, and your own time interacting with the newly updated application.
  • There is a correlation between large codebases, service architecture, and a retreat to test validation as the primary debug loop.
  • Staging environments can help solve these local machine resource problems, if any, and also alleviate the burden of maintaining a local data set for testing while writing code.

Full post here, 9 mins read

Does this code spark joy? Tidying up your code bit by bit

Use helper methods and differentiate between sections of code that are accomplishing different tasks. Ensure your tests pass at all times when making changes.
Read more

Does this code spark joy? Tidying up your code bit by bit

  • Messy code can result in bugs, prolonged development time, or increased difficulty with onboarding new engineers.
  • Tidying means making purely structural changes to a confusing and messy section of code.
  • Use helper methods and differentiate between sections of code that are accomplishing different tasks.
  • Ensure your tests pass at all times when making changes.

“Divide your program into methods that perform one identifiable task. Keep all of the operations in a method at the same level of abstraction.” - Kent Beck

Full post here, 5 mins read

Cognitive bias in tests: The most human side of testing

To avoid the sunk cost fallacy, analyze ROI of the current solution & compare alternatives. Continuously refactor existing systems to stay up-to-date.
Read more

Cognitive bias in tests: The most human side of testing

Types of cognitive bias that affect testers and how to avoid them:

  • To avoid the sunk cost fallacy, analyze ROI of the current solution & compare alternatives. Continuously refactor existing systems to stay up-to-date.
  • Mitigate the anchoring effect (excessive reliance on early information) by ensuring testers are familiar with the project’s context and placing testers directly in touch with clients or decision-makers.
  • Counter confirmation bias (relying on information that confirms what we already believe in) by relying on measurable, objective values rather than opinion. Use A/B testing and have team members undertake cross-testing for each other.
  • Negativity bias makes past negative experiences weigh in too much on decision-making. It can make one pessimistic of the current release. Mitigate it by developing suites of automatic checks, by categorizing bugs by severity & impact and by doing a trend analysis of bug reports and solutions over time.
  • Inattentional blindness can be due to fatigue or tunnel vision from hyper-focusing on specific areas. Use peer reviews, pair testing, cross-testing, & automated checks, and encourage exploratory rather than script-based testing.

Full post here, 12 mins read

How is software developed at Amazon?

Decompose a monolithic organization into small, autonomous teams that own each service or product end to end. Automate as much as possible. Deploy in a pessimistic fashion, constantly looking for problems.
Read more

How is software developed at Amazon?

Key tenets Amazon follows to ensure its obsessive customer focus:

  • Decompose a monolithic organization into small, autonomous teams that own each service or product end to end.
  • Deploy in a pessimistic fashion, constantly looking for problems.
  • Deploy on a small scale, so that you can rollback in case of failure and expand only if successful.
  • Start every project with a threat model and have it reviewed by a security engineer; also seek peer feedback before committing to a build.
  • Architects do not develop the architecture of a project; developers on each team do.
  • Plan from the bottom up, because teams closest to the product know best what the customer wants.
  • Accept that keeping teams independent can result in occasional duplication.

Full video here, 41 mins watch time