#culture
6 posts

What is legacy code? Is it code without tests?

The definition of legacy code as code without tests comes from Michael Feathers’ Working Effectively with Legacy Code. An alternative definition is valuable code that is difficult to change (you are afraid you might break existing behavior) because you struggle to understand it.
Read more

What is legacy code? Is it code without tests?

  • The definition of legacy code as code without tests comes from Michael Feathers’ Working Effectively with Legacy Code.
  • An alternative definition is valuable code that is difficult to change (you are afraid you might break existing behavior) because you struggle to understand it.
  • You overestimate the complexity of unfamiliar code or code you don’t remember why you wrote. Sometimes it gets better after working with it a few months.
  • Having tests is not enough, good tests make you confident about changing unfamiliar code but poor tests don’t.
  • A recipe for legacy code is multiple people working on a codebase, over a long period, with conflicting requirements, under time pressure. This happens because knowledge is always imperfect and you take shortcuts to meet deadlines until every move introduces a bug and new features take ages to implement.
  • Finally, ‘legacy code’ is a matter of personal perspective: it depends on your understanding of the code and your feelings about changing it.

Full post here, 4 mins read

Staging environments are too important to be overlooked: here's why

Staging environments can reduce the errors occurring due to unmet dependencies. They reduce the impact or number of errors in your product and result in indirect cost savings.
Read more

Staging environments are too important to be overlooked: here's why

  • Data sets tested locally are usually an unrealistic representation of what is in production and can expose users to potentially breaking changes.
  • Staging environments can reduce the errors occurring due to unmet dependencies.
  • They reduce the chances of incorrectly merged changes getting deployed to production and save you from potentially rolling changes back or hotfixes.
  • They reduce the impact or number of errors in your product and result in indirect cost savings.
  • Using staging environments can result in a higher degree of quality assurance.

Full post here, 7 mins read

Prototyping vs. production development: how to avoid creating a monster

The ability to rapidly iterate, receive quick feedback, and keep costs relatively low are the three main priorities during the prototype phase. In the production phase, it is all about keeping the user, their needs and their environment in mind.
Read more

Prototyping vs. production development: how to avoid creating a monster

  • The ability to rapidly iterate, receive quick feedback, and keep costs relatively low are the three main priorities during the prototype phase.
  • Even in the prototype phase, write tests for vital pieces of code.
  • If your prototype starts turning too buggy, slow down and tighten your code. If you are constantly missing deadlines, simplify your code to improve the pace.
  • In the production phase, it is all about keeping the user, their needs and their environment in mind.
  • Users want products to be flawless and fast. Have well-defined code standards, review processes, and quality assurance testing process.
  • Be thorough with your documentation if you don’t want considerable code rewrites.

Full post here, 16 mins read

How Shopify scales up its development teams

When scaling up development teams, the first folks to recruit are the recruiters themselves - specialists who understand the company culture & team’s exact needs.
Read more

How Shopify scales up its development teams

  • When scaling up development teams, the first folks to recruit are the recruiters themselves - specialists who understand the company culture & team’s exact needs.
  • The number of on-boarded folks on any team is greater than or equal to the number of those still onboarding to ensure enough market & product context.
  • Set a clear baseline for teams about how they will plan their work and track their progress, what are the tools and technologies they will use etc.
  • Be very open about technical designs and code changes
  • Use tooling to codify best practices
  • Use pair-programming to share experiences
  • Conduct frequent retrospectives

Check out the full post here.

7 min read

Programmer’s discipline

Programmers face inherent challenges of programming - ambiguity, complexity, integration, and paradox - while building solutions for hard problems.
Read more

Programmer’s discipline

Full original post here

Sidu Ponnapa has spent much of his career scaling the 'people side of tech'. He has helped seed and scale GojekTech from 1 million to 10 billion GMV in the last 4 years. In this post, Sidu expounds on how can team leaders & decision-makers bounce off programmers’ discipline to build & scale effective organizations. Programming is inherently difficult. Programmers face inherent challenges of programming - ambiguity, complexity, integration, and paradox - while building solutions for hard problems.

To reduce the difficulty of problems, programmers break things down into ‘systems’, and define how they engage with these systems through ‘disciplines’. Many of these disciplines are a perfect fit when dealing with the problems inherent in scaling businesses. Because all competent programmers are experienced at designing, building and running large, complex systems, they are excellent sounding boards when developing non-tech systems.

8 min read