Reflective Software Engineering

Reflective Software Engineering explores bridging domain and tech expertise to improve software maintainability, drawing from Domain-Driven Design and Xtreme Programming. It covers enhancing team dynamics, functional programming, code management practices, remote work nuances, testing strategies, technical interviewing, software architecture, and development tool customization.

Team Dynamics Functional Programming Code Management Remote Work Software Testing Technical Interviewing Software Architecture Development Tools

The hottest Substack posts of Reflective Software Engineering

And their main takeaways
0 implied HN points 12 Nov 22
  1. Isolate IO side effects to maintain purity in domain logic, improving testability and readability.
  2. In functional programming, keep domain code side-effect free and contain side effects in the outer layers for simplicity and easy testing.
  3. Centralizing side effects through repositories can simplify code, improve maintainability, and make it easier to reason about.
0 implied HN points 26 Jan 24
  1. Consider the tradeoff space when it comes to the batch size of pull requests - aim to address a single concern in each PR to streamline review processes.
  2. Automate your workflow to make creating pull requests easier and faster - use command line interfaces, Git aliases, and tools like MAKE to optimize repetitive tasks.
  3. Even though the concept of atomic commits and pull requests is simple, it requires good commit hygiene, practice, and experience to execute effectively - reducing steps can help overcome barriers to implementing best practices.
0 implied HN points 19 Jan 24
  1. Remote work has both pros and cons, with some enjoying the flexibility and fewer distractions while others miss the social interactions and spontaneous office conversations.
  2. There are various challenges to address with remote work, like maintaining work-life balance, finding ways to commute without an office, preserving work memories and bonding, and brainstorming effectively through communication barriers.
  3. Remote-first companies offer the value of freedom, allowing individuals to work in the environment where they are most productive and comfortable, highlighting the importance of choice when it comes to how and where work is done.
0 implied HN points 12 Jan 24
  1. Having unit tests for SQL queries can help catch bugs introduced during code refactorings or changes.
  2. When writing unit tests for SQL queries, focus on testing the specific parts responsible for building the query rather than the entire method.
  3. Refactoring code for testability can involve moving pure functions outside of the class for easier testing and simplifying methods to focus on specific tasks.
Get a weekly roundup of the best Substack posts, by hacker news affinity:
0 implied HN points 30 Dec 23
  1. Test-driven development (TDD) is a valuable tool for ensuring software quality and driving great software design.
  2. Testing data integrations and clients, especially in complex data platforms, can be challenging due to less control over underlying databases. Strategies like mocking HTTP interactions can help in testing.
  3. Separating concerns and creating small, testable units of code can enhance confidence in the system, reduce fear of regression, and improve overall software quality.
0 implied HN points 02 Sep 23
  1. Technical job interviews often involve coding exercises that may not accurately represent real work processes. Employers should focus on the candidate's ability to learn and collaborate rather than specific technical knowledge.
  2. Pair programming during technical interviews can create a more enjoyable and effective process for both the interviewer and interviewee. It allows for a practical demonstration of problem-solving skills and teamwork.
  3. Prior to the interview, applicants are asked to prepare a small problem in any project and work on it for 45 minutes with the interviewer, practicing like in a pair programming session. This approach emphasizes problem-solving abilities and collaboration over specific technical expertise.
0 implied HN points 13 Sep 22
  1. Defining strongly typed Ids in F# can prevent issues like passing the wrong type of Id in a given context.
  2. Striving for type-strong Ids can enhance code readability by clearly indicating the type of Id a method requires.
  3. In F#, using a private struct with helper methods like New and Parse for defining Id types can ensure encapsulation and validation.
0 implied HN points 08 Jun 23
  1. Modeling everyday problems using test-driven development with a Python tool instead of spreadsheets can lead to better results and easier adaptability.
  2. Creating simple Python tools with scripting languages can automate mundane tasks, improve problem-solving skills, and potentially lead to open-source contributions.
  3. Writing code can be enjoyable and effective in automating repetitive tasks, enhancing problem-solving abilities, and potentially growing into valuable tools for others.
0 implied HN points 27 Oct 22
  1. When developing a domain model, keep it concise with abstractions related to the problem being modeled. Consider how to handle search queries that involve third-party data not directly stored in the model.
  2. Avoid growing your domain model extensively to accommodate indirect relationships with third-party systems. This can lead to increased coupling, maintenance challenges, and data movements.
  3. Implement a solution using a CompositeKeywordProvider and asynchronous worker to fetch and manage keywords from various sources in a microservice architecture. Decouple keyword generation from data writing and searching, enabling a flexible and efficient search functionality.
0 implied HN points 01 Oct 22
  1. Configuring Zsh with Oh My Zsh and Powerline10k can add useful features like branch viewing, history searching, and better auto completion.
  2. The installation process involves setting Zsh as the default terminal, installing Oh My Zsh and Powerline10k, and configuring them.
  3. Additional plugins like Zsh autosuggestions and Autoswitch Python Virtualenv can enhance the Zsh experience further.
0 implied HN points 22 Aug 22
  1. The content is about Reflective Software Engineering.
  2. The newsletter is still in the testing phase.
  3. Subscribe to the newsletter for updates on cabang.substack.com.
0 implied HN points 26 Jun 23
  1. Start with defining the API schema instead of API-first approach as it allows for early feedback, unblocks consumer development, and enables incremental progress.
  2. An API schema specifies all endpoints, interactions, and responses, and can be visualized in tools like Swagger, aiding in documentation and code generation.
  3. Working schema-first has benefits like enabling real-time collaboration, source-controlled contract, and code generation capabilities based on the formal specification.