Save Time, Reduce Errors and Enhance Teamwork

Hey! Nina here. Welcome to Sketech Free Edition, where you’ll find visuals and insights to make learning technical unforgettable.

First, a huge thank you to the 107 new subscribers who joined us this week, welcome aboard ☺!

This edition brings together some fresh ideas:

4 OOP Principles Explained – Understand the Core Principles of Object-Oriented Programming to write cleaner and more modular code.

Breaking Down Git Branching for Developers – Discover the key branching models and choose the one that best fits your project workflow.

Hope you find it helpful!

https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8248670-58a9-4875-a85b-3c7f303b736a_2100x2400.png

4 OOP Principles Explained

Object-Oriented Programming organizes code around objects, which encapsulate both data and behavior. This paradigm plays a central role in creating modular, scalable, and maintainable systems.

Below is an easy-to-read summary of its four key principles:

Abstraction

Abstraction focuses on what an object does, not how it does it. It hides implementation details and exposes only the essential features, typically using abstract classes or interfaces.

★ Simplify complexity by separating the “what” from the “how.”

An interface PaymentProcessor might define a method processPayment() without detailing the implementation. Classes like CreditCardProcessor or PayPalProcessor implement it differently.

https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0199d3fb-32e8-4367-ba3c-6a46cc852612_1080x1080.png

Encapsulation

Encapsulation binds data (attributes) and behavior (methods) within an object. Access is controlled using modifiers like private, public, or protected to protect the object’s internal state.

★ Prevent unwanted interference by exposing only necessary details.

A BankAccount class might have a private balance attribute and allow changes only through controlled methods like deposit() or withdraw().

https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d5084f4-4861-427a-be81-d333bd982e69_1080x1080.png

Polymorphism

Polymorphism allows a single method or interface to exhibit different behaviors depending on the object. This can be achieved through:

  • Method Overloading (compile-time polymorphism): Same method name, different parameters.

  • Method Overriding (runtime polymorphism): Same method, different behavior in subclasses.

★ Adapt functionality dynamically.

A Shape class might define a draw() method. Subclasses like Circle and Rectangle override it, allowing the same method to produce different outcomes.

https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb034f4-9886-4c14-9b8c-028ec7bfbbe4_1080x1080.png

Inheritance

Inheritance enables new classes (subclasses) to derive from existing ones (base classes), reusing code while adding or modifying functionality.

★ Reuse and extend existing code.

A Vehicle class might define properties like speed and methods like startEngine(). A Car class can inherit these while adding specific attributes like fuelType.

https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F344ae9a9-1b8f-41de-ad46-5efc1d49f069_1080x1080.png

Why OOP Matters

OOP provides a structured framework to tackle complex systems. By adhering to its principles:

  • Code becomes easier to understand and modify.

  • Projects are more scalable and maintainable.

  • It supports the creation of reusable and flexible components.

OOP provides a clear and structured way to build scalable and maintainable systems. Its principles make code easier to understand, modify, and reuse, forming the backbone of modern software development in languages like Java, Python, and C#.

Check out the LinkedIn post that inspired this

Breaking Down Git Branching for Developers

Choosing the right branching strategy can significantly improve code management and teamwork. Here’s a breakdown of five widely-used strategies, tailored to fit different project needs and team dynamics:

https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F566b11b0-6248-477a-902c-6ee4d9c5db1f_2100x2400.png

1. Feature Branching

Main branch → Feature branches

Create a dedicated branch for each feature.

Merge into the main branch after completion and testing.

Best For:Small teams, isolated feature development, and maintaining a stable main branch.

https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13dd9ff-d472-43f0-82ad-81e46d5d6e56_1080x800.png

2. Gitflow

maindevelopfeature/release/hotfix/

Workflow:

  • develop for ongoing development.

  • feature/ for new features.

  • release/ for finalizing releases.

  • hotfix/ for urgent fixes.

Best For: Large teams, projects with strict version control, and structured release management.

https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d0bcbfd-5a0c-4556-9db9-7a1ab33aee47_1080x800.png

3. GitHub Flow

Main branch → Feature/Bug branches

Branches created for every feature or bug fix.

Merge back into the main branch after thorough review and testing.

Best For: Agile teams, frequent deployments, and CI/CD workflows.

https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87626c83-ac32-4e14-84ae-78a5b0a24abc_1080x800.png

4. GitLab Flow

mainfeature/ → Staging/Production Environments

Focus on tight CI/CD integration with automated pipelines.

Feature branches are used for development and deployment.

Best For: Teams using GitLab, automated deployments, and seamless integration with CI/CD.

https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29628978-961f-4e2a-aa64-71a86e523a4e_1080x800.png

5. Trunk-based Development

Main branch (trunk) → Short-lived feature branches

Developers merge changes frequently (even daily).

Use feature flags for gradual feature rollouts.

Best For: Rapid feedback, incremental development, and continuous integration.

https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f1d79a2-dd31-4cab-8e8c-6b43cad9f5b7_1080x500.png

How to Choose the Best Branching Strategy

The right strategy depends on your specific team and project needs:

  • Team size: Larger teams often benefit from structured workflows like Gitflow.

  • Project complexity: Simple projects may lean toward Feature Branching or Trunk-based development.

  • Release frequency: Agile teams prefer GitHub Flow or Trunk-based strategies for faster releases.

  • Deployment process: CI/CD pipelines align well with GitLab Flow.

  • Technical maturity: Advanced teams with robust processes thrive with Trunk-based or GitLab Flow.

There’s no one-size-fits-all strategy. Evaluate your team’s workflow, technical requirements, and goals to find the approach that works best for you.

Read the LinkedIn post here

Let’s connect! Sketech has the Big Pictures you’re missing

Text within this block will maintain its original spacing when published

And that’s a wrap for Sketech Edition #13! This week has been truly special, with so many new subscribers joining us. Your support and enthusiasm mean the world, thank you for being part of this growing community. See you in the next edition!

Nina

Text within this block will maintain its original spacing when published

Sketech Newsletter
Crafted to make concepts unforgettable 🩵

Credit to the Original Article | Explore More of Their Work If You Found This Article Enjoyable.
https://sketechnews.substack.com/p/git-branching-strategies-explained