Bad Software Advice

Bad Software Advice is a substack that explores the pitfalls and misconceptions in software development. It discusses anti-patterns, ineffective practices, and how to recognize and avoid them, aiming to stimulate creativity, problem-solving, and a deeper understanding of the software industry by learning from mistakes.

Software Development Anti-Patterns Workplace Dynamics in Tech Code Review Practices Team Management System Design and Architecture Technical and Managerial Transition Software Engineering Books and Learning Technical Debt Software Development Metaphors Business Domain Knowledge Software Debugging Automation in Software Deployments Software Development Process Product Roadmap Development Career Development in Tech User Empathy and Feedback Database Design Vacation Policies

The hottest Substack posts of Bad Software Advice

And their main takeaways
247 implied HN points 11 Mar 24
  1. Transition from offense to defense in a company means focusing on predictability and consistency rather than rapid growth.
  2. Operate within constraints by aligning your project with the company's current theme to open doors and ease scrutiny.
  3. Find ways to expedite approvals, deflect ownership, and handle criticism strategically to navigate a defensive organizational culture.
82 implied HN points 22 Jan 24
  1. Today's newsletter theme is learning from failure.
  2. Stories shared include UK air traffic control meltdown, Mars Rover Mistake, A Very Subtle Bug, and Patriot Missile Failure.
  3. Consider how AI might evolve failure patterns and cover-ups.
247 implied HN points 18 Oct 23
  1. In software, it's tough to predict project timelines but giving up isn't the solution. We should strive for improvement in estimation practices.
  2. Simple architectures can be effective and spending time understanding different perspectives can be valuable.
  3. Reading and discussing books on software engineering can lead to insightful conversations and deeper understanding.
Get a weekly roundup of the best Substack posts, by hacker news affinity:
22 HN points 05 Feb 24
  1. Software development can be hard to explain due to different layers of understanding within a company
  2. Using bad metaphors can be a technique to help explain complex technical concepts in a simpler way
  3. Metaphors like comparing software to construction, writing, surgery, art, and research can be effective but also have limitations
164 implied HN points 25 Jul 23
  1. Learn about common traps in software development called anti-patterns.
  2. Understanding bad software advice can stimulate creativity and problem-solving.
  3. Gain a broader perspective of the software industry by learning what not to do.
128 HN points 13 Aug 23
  1. Code reviews are important to find errors and maintain consistency in software development.
  2. Establishing a rigid and intimidating code review process can hinder productivity and confidence of new developers.
  3. Creating unnecessary obstacles and focusing on trivial details during code reviews can be counterproductive and demotivating for the developers.
91 HN points 20 Sep 23
  1. When working on an old, stable system, consider a full rewrite if you plan to focus on it long term.
  2. During a full rewrite, use the existing source code as documentation and remove unnecessary complexity.
  3. Prepare users for missing features in the early version of the new system by having a detailed feature spreadsheet.
120 HN points 26 Jul 23
  1. Most people want to get along, so create a team that never reaches peace.
  2. Foster a culture with inconsistent goals to prevent a collaborative workforce.
  3. Discourage creativity by blaming individuals publicly for failures.
2 HN points 26 Feb 24
  1. When working on a system, it's common to face issues like downtime, scalability challenges, and the need for updates and cost optimization.
  2. It's important to address the existing problems systematically rather than blaming past developers and implying superiority.
  3. In a work environment, balancing necessary improvements with existing constraints can be tricky. Working towards gradual improvements and maintaining the system's functionality is crucial.
1 HN point 04 Mar 24
  1. SQL can be intimidating, but using Object Relational Mappers (ORM) allows you to work with objects in memory instead of worrying about SQL intricacies.
  2. Abstraction in software, like using ORM, lets you hide the complexity of data management and focus more on coding comfortably.
  3. There are many ORM options available for various programming languages, each with cool names, making it easier to work with databases without diving deep into SQL.
2 HN points 15 Jan 24
  1. Working harder can mean different strategies, but often involves sitting at your desk for longer hours.
  2. To get ahead in tech, you may need to sacrifice personal time and work extra hours, even on weekends.
  3. Feeling like you always need to catch up or be available can lead to stress and burnout in the tech industry.
3 HN points 04 Dec 23
  1. Spending time at a small company that doesn't understand technology can lead to quick promotions.
  2. Dealing with and fixing mistakes in crucial systems can elevate your job title.
  3. Staying at one company for a long time can build walls around you but also lead to continuous promotions.
2 HN points 18 Dec 23
  1. Understanding and solving the same problem repeatedly can make you an expert or incompetent.
  2. Being a problem-solving hero in software development can lead to rewards like promotions.
  3. Solving familiar problems quickly can be more valued by a business than engineering long-term solutions.
4 HN points 30 Aug 23
  1. Smart people in a team can be challenging to work with, but they may be the best programmers.
  2. In a software development team, the louder and more demanding developers may actually be the most skilled and valuable.
  3. Over time, the top programmer might become dominant in the team, driving others away, but their unique skills may justify the investment in them.
1 HN point 08 Jan 24
  1. Developer heaven is a concept where software engineers aspire to go after their careers.
  2. To be considered good enough for developer heaven, focus on your sins and good deeds in the software development field.
  3. Getting into developer heaven involves following a specific set of rules and adhering to 'The Right Way' of doing things in different companies.
4 HN points 16 Aug 23
  1. Spend your vacation wisely based on your own values, not just work demands.
  2. Choose how to handle work while on PTO: keep working or inform others and truly disconnect.
  3. Remember to set boundaries and prioritize self-care during your time off.
2 HN points 08 Nov 23
  1. Leadership styles can be influenced by what we see in movies and sports
  2. Yelling and insulting can sometimes be used to motivate a team.
  3. Yelling can lead to fewer mistakes being reported.
2 HN points 01 Nov 23
  1. In a technical interview, the interviewer should have the upper hand and focus on testing the candidate.
  2. The job interview should consist of stress-inducing, arbitrary, irrelevant, and complex questions that don't reflect the actual job requirements.
  3. The goal of a demoralizing interview is to select a candidate who feels inferior, accepts a challenging environment, and does not threaten the interviewer.
2 HN points 30 Oct 23
  1. When building software, start with a prototype to test the problem domain and make quick changes.
  2. Share your prototype with others for feedback to understand the problem better and influence the final system.
  3. Be prepared for the challenges of transitioning from a prototype to a final product, with hard deadlines and evolving requirements.
2 HN points 25 Oct 23
  1. The best database is one managed by a team of specialists with dark magic.
  2. Create a bad database by making it accidental, hard to inventory, and highly opinionated.
  3. Opinions like having many stored procedures, obscure data protection, and complex naming make a database memorable.
2 HN points 04 Oct 23
  1. For a startup, prioritize growth over security until you reach a point of being a potential target.
  2. Consider security as you scale and encounter security-focused customers or regulated markets.
  3. Using modern cloud technologies can provide a level of security, but don't ignore security completely.
3 HN points 09 Aug 23
  1. As a software engineer, focus on fortifying your existing knowledge instead of constantly learning new things.
  2. When faced with new ideas, divert attention to one detail to avoid delving into the whole concept.
  3. Maintain a facade of knowledge by referencing old technology and critiquing new ideas without fully understanding them.
2 HN points 02 Oct 23
  1. There are two ways a company can provide a vacation system: tracked PTO or passive-aggressive open PTO.
  2. Option 1: Tracked PTO involves accumulating paid time off and fearing layoff with unpredictable outcomes.
  3. Option 2: Passive-aggressive open PTO provides unlimited vacation with hidden restrictions and advantages for the company.
3 HN points 26 Jul 23
  1. Debugging software can be avoided by following a few steps.
  2. When debugging software, ask for more information and code to fix the bug.
  3. If stuck, add more logging and repeat the debugging process.