TL;DR Modern Git workflows optimize for features, but best practices optimize for integration, review quality, and history. The Git Patch Stack Methodology replaces feature-centric pull requests with small, architectural patches stacked directly on top of mainline. Each patch is: Small and reviewable Continuously rebased and integrated Architecturally meaningful Historically valuable Development…
For a long while now it has become more and more evident that you just can't trust companies to host your data. This is true even if you are paying for said services. This has become even more obvious with the introduction of large language models, etc. Additionally, the products that exist in the space of Git hosting are less than ideal in my opinion. Instead of them focusing on making Git…
Welcome to my first Shower Thoughts arcticle. This is a series that I came up with while taking a shower this morning. I am not planning on writing an article every day or anything. As I don't necessarily have significant shower thoughts every day. But when I do this is an outlet for me to get them out and share them with my future self and the world. Of course they will primarily be…
On Arch Linux if you need multiple versions of PostgreSQL installed at the same time. Say because you are working on a software product that is currently locked into an older PostgreSQL version while also working on another product that is using a new PostgreSQL version. You are kinda screwed, at least in terms of being able to do it from the packagement management system. They effectively provide…
The following is an example of what you need to do to fix PostgreSQL Collation version miss-match issues on Arch Linux. REINDEX DATABASE dummy; ALTER DATABASE dummy REFRESH COLLATION VERSION; Basically my understanding is that PostgreSQL depends on certain libraries and the version of those libraries are effectively snapshotted when the indexing is done. Hence the COLLATION VERSION. So when…
I had to frum install Buby with the following so that it was setup to find the proper system libs, etc. CFLAGS="-std=c99 -I/usr/include -L/usr/lib -D_GNU_SOURCE" frum install 3.2.2
The following are my notes for upgrading PostgreSQL on Arch Linux when I have installed PostgreSQL through the official package management system. Stop the service with the following. sudo systemctl stop postgresql The PostgreSQL upgrade process which is done with pg_upgrade requires having the previous version of postgres that created the /var/lib/postgres/data directory as…
The following is a Design Doc for an idealized alternative to what is currently the pull request work flow. The Problem The feature branch/pull request process is fundamentally broken a bunch of different ways. This can be improved significantly with a Patch Stack based workflow and tooling. But this is still far from ideal as when you have dependent patches you can't open a review for…
When people are first learning Git they seem to learn something along the lines of the following. You can create a commit by doing the following. staging a change with git add <path/to/file> create the commit with git commit Or maybe something like. You can stage and commit in one shot with git commit -a . It seems that for the majority of people, once they learn the above about creating…
Ok, so let's talk about Git and this "rule" that people often get attached to, "Don't rewrite history once it is shared!" There is definitely some wisdom in this "rule". However, following this "rule" religiously also has some side effects. And it is worth understanding those in more depth, as well as understanding any alternatives and what their pros & cons might be. When you follow…
The following are some excerpts related to code organization from a code review I did recently. I started reviewing this PR and wasn't quite sure exactly what the separation of concerns were with the boundaries you had drawn. So I drew a diagram to try and help myself understand better. It ended up looking as follows. From looking at the code in far more depth I started to get a better…
TLDR The following is a deep dive into my current keyboard which is outlined below. 4x5 Dactyl Manuform (with a few small tweaks) Printed on my 3D printer Custom-built Hand Wired Cherry MX Blue switches (Cherry MX Silver in my secondary keyboard) Firmware: QMK My fork of QMK firmware (repo: git://git.drewdeponte.com/qmk_firmware.git ) Dvorak Pretty Layout for Printing Why a Dactyl…
The 7.0.0 release of Git Patch Stack is an extremely significant release. It marks the beginning of a few major mental & strategic shifts in terms of Git Patch Stack. State Historically we have tracked state in all versions of Git Patch Stack before 7.0.0 . We stored this state in .git/GIT-PATCH-STACK-PATCH-STATES-V3.json , and a state entry in it generally would look something like the…
The content goes here. Context Principle One: The customer is the hero not your brand. Define characters ambition. What they want. So that we open the question, Will the hero get what she wants? This is called a Story Question or story gap. When we define something our customers want, we posit a story question in the mind of the customer: Can this brand really help me get what I want? define…
If I am honest with myself. One of the areas that I lack strength & skills, is marketing. I try and focus on areas I am weaker to hopefully improve over time. But it is hard to do this when you are running a business, doing client work, and have a family. A while back a friend of mine introduced me to the book, Building a StoryBrand by Donald Miller. I read it through, and it resonated pretty…
Hello! We just released v3.7.0 (51) of Pullwalla to both macOS and iOS platforms. Quick Filters One of Pullwalla's primary goals has been to help people quickly discover the pull requests they are interested in. Quick Filters continue to be a key mechanism supporting this. More Workflows One of the things we have done in this release is support additional workflows. The workflow we supported…
The following is a transcript of an audio recording I made exploring the goals and intent behind the Git Patch Stack project. I have also included the audio below if you would prefer to listen. Your browser does not support the audio element. Transcript Hi I am Drew De Ponte, Partner at Uptech Studio & creator of Git Patch Stack. Today I wanted to talk about Git Patch Stack and the driving forces…
The following is a transcript of an audio recording I made exploring some of the benefits and drawbacks of the Feature Branch, Classic Continuous Integration, Stacked Branch, and Patch Stack workflows. I have also included the audio below if you would prefer to listen. Your browser does not support the audio element. Note: I added some headers into the transcript to try and make it a tad bit…
Let's say for sake of discussion that we want to paginate a set of transactions to be presented in a mobile app with infinite scroll implemented. We will also assume that for sake of discussion our service is backed by PostgreSQL as our database. We obviously want to see these transactions in relation to time. Probably the most recently created transactions first and then the older…
Within the last month, I have interacted with several developers that don't have a great understanding of the concept of Inversion of Control (IoC) . Just the other day one of the developers at Uptech Studio asked me to explain it after I mentioned it as a way of separating DB concerns from business logic concerns when the DB concerns are tied together by a DB transaction. I introduced this…
One thing that people don't seem to naturally understand is that to make code reusable you have to make it generic. To get a better understanding of this lets walk through some examples and see if we can get a better understanding of some good ways to make code more generic. Let's say we have a class called User and user has a firstName and lastName properties. It might look something…
We are experimenting with a new variation of our workflow based on the Continous Integration Methology. It is designed to facilitate feature level engineering reviews while still enabling us to follow the Continuous Integration Methodology and operate purely on the main trunk. TL;DR Create Patch use Git Patch Stack and follow Git Commit Standards as you normal would. Integrating a Patches…
We were struggling to deal with our pull requests. We weren't getting quality peer reviews from our peers, we were having a hard time reverting commits when necessary, and had a hard time understanding our Git history. So we decided to dig into this and see if we could get to the core of it and possibly come up with a solution. The first thing was just understanding all the of the issues we…
We require that Pull Requests have the following characteristics. small logical buildable testable releasable Small It is crucial that pull requests are small . The quality of peer review exponentially decreases as the size of the pull request increases. If you are going to have PRs in the hundreds or thousands of lines of change range you may as well just not do peer review. Here at Uptech Studio…
This is the third in a series of articles I am writing in which I do a Design Exploration of a Backend Web Framework with the following constraints. only use functions & data - no classes w/ methods use strong typing (via TypeScript) - no use of any trivially testable via basic unit style state based tests If you didn't start at the beginning I highly recommend it, Backend Web Framework…
This is the second in a series of articles I am writing in which I do a Design Exploration of a Backend Web Framework with the following constraints. only use functions & data - no classes w/ methods use strong typing (via TypeScript) - no use of any trivially testable via basic unit style state based tests If you didn't start at the beginning I highly recommend it, Backend Web Framework…
This is the first in a series of articles I am writing in which I do a Design Exploration of a Backend Web Framework with the following constraints. only use functions & data - no classes w/ methods use strong typing (via TypeScript) - no use of any trivially testable via basic unit style state based tests Note: Within this article I will include simplified code examples. If however you are…
Today we are focused on Git Patch Stack , an open source tool we developed and use for a patch stack based workflow in git , instead of doing feature branches. What is Git Patch Stack? You might still be asking, "Well, what is that?" Basically it's a workflow that we can use to conceptually create logically independent patches, and we have a stack of them. So think of a stack of plates.…
One frustrating/annoying things about SwiftUI Buttons for me has been the mechanism for styling them. In order to get information about the state of the button (e.g. if it is pressed, not pressed) you have to build a struct that implements the ButtonStyle protocol. This would generally look something like the following. struct MyColoredButtonStyle : ButtonStyle { let pressedBackgroundColor:…
At Uptech Studio we keep a CHANGELOG.md following the keepachangelog.com standard with all libraries and applications we create. We do this by using the git-cl tool that we built. It enables us to get all the values of keeping a CHANGELOG.md while not having to deal with the workflow impedances. To understand more about git-cl you can checkout our Keep a Changelog without Conflicts blog post which…
TLDR The following is the TLDR of how I believe you should organize your code base. organize code according to architecture not types of architecture element types if in framework that does organize by architecture elment types see if you can organize by architecture and then move the organization by element types into the folders representing the architectural components. if you can't,…
At Uptech Studio we organize ourselves in a similar fashion to Spotify with Squads & Guilds. However, how we define Squads & Guilds is a bit different. TLDR Below is an explainer describing what Squads & Guilds are to us and some examples of how people fit into them. Squads A squad is simply a group of people organized around delivering a particular project/product. They are on the hook as…
Kanban We are big believers in Agile methodologies. However, we don't prescribe to strict Scrum. Instead we use Kanban as we feel it better aligns with the fluidity and agileness necessary with the earlier stage companies we work with. In Kanban the columns on the board represent the prioritized queue of items that need to be done by each role in the software development process. Items move…
Branching strategies are generally applicable in two contexts. strategies used for development strategies used for releases Strategies for Development Our preferred branching strategy is a style of trunk-based development . This means that in terms of collaboration we have that happen over the mainline branch (a.k.a. trunk) by following a workflow we developed to facilitate the creation of small…
Our general position on error handling is that we should be using Result types with base exception classes so that we can easily transition between the Result type world and the Exception worlds. The following is a presentation Drew De Ponte gave that covers this topic and how we should be thinking about error handling. Abstractions & Errors - Slides TypeScript Example The following is an example…
The Git commit is probably the most fundamental unit we have to manage the growth and evolution of our source code. Git commits can be extremely useful sometimes and other times they can be useless. The following are the guidelines we have honed in on over the years to help make sure that our commits end up being the valuable kind. Commit Characteristics To aid with making sure our commits are the…
The intent of this document is to provide a reference document for the Peer Review Process that we follow. Goals The following are the main intentions of this process. improve code maintainability reduce defects in production developer growth Participants All developers, no matter skill level, should participate in the peer review process. If only a subset of the team does the peer reviews, this…
Discovery & Definition One of the first phases we go through in a project is what we refer to in the engineering space as Discovery & Definition . The goal of this phase is to get a decent understanding of what the project should be and what the initial scope of the project should be. This is generally done through a series of meetings between the stake holders and Uptech Studio Product,…
We require README.md files in our repositories so that people can understand the following. what the repository is how it fits into the bigger context how to get the development environment up and running how to contribute to it how to run the test suites how to deploy it. README.md Content The following is an example of a README.md file and its content. Use this as a template. # git-ps - Git…
Here at Uptech Studio given that we use semantic versioning as our standard for versioning we can talk instead about the process of doing a release. Normal release Cutting a release consists of the following steps. identify the commit in the Git history that is to be the release - generally this is HEAD tag the commit with the new release version number, e.g. 1.2.3 or v1.2.3 push tags up to the…
Lets first understand exactly what a role is. According to the macOS Dictionary it is "the function or part played by a person or thing". The distinction here is that a role is not a person or their title . It is something a person takes on. For our discussion the role itself is a categorization of work that is to be performed or acted by a person. This means that a person could take on multiple…
We have always been big believers in automated testing and Test Driven Development ( TDD ). Back in the day we were even big believers in Behavior Driven Development ( BDD ). Over the many years we have learned that Cucumber and Gherkin were nice ideas but we never really saw huge value and it required additional adoption from Product which was always a hurdle. The concept of emergent design , the…
Versioning Libraries We use Semantic Versioning for our standard of choice for versioning libraries. Versioning APIs There are few options. URL based versioning, e.g. /api/v1/route HTTP Header based versioning use Media types , e.g. application/vnd.github[.version].param[+json] or application/vnd.github.v3+json HTTP Custom Headers versioning (any header beginning with X-…
Git was created by Linus Torvalds out of a need. At the time the Linux Kernel team was using a proprietary Distributed Source Control Management (DSCM) system. However, due to licensing issues the Linux Kernel team could no longer use this proprietary DSCM system. Therefore, Linus decided to build Git as the DSCM system he always wished they had. You might also know Linus as the creator of Linux.…
Woot woot! The first couple releases of the year are out 🎉. These releases include major features as well as important bug fixes. iOS Pullwalla iOS has always helped you discover and examine pull requests you want to review across all your accounts & repositories. This release marks the beginning of a new era where Pullwalla begins to achieve it's true vision as the primary interface for…
It is amazing how many developers I run into that don't seem to either know about git add -p (a.k.a. git add patch), and ever fewer that know what to do when git add -p won't let you split your hunks up any further. Given how much I use this command in my workflow to facilitate creating logically chunked, buildable commits I figured I might as well make a post just touching on it. Yes,…
When you first discover the importance of logically structured Git commits, which is by the way a core fundamental expectation & design characteristic of Git and how it is intended to be used. You are probably still following your bad habits and creating commits that aren't logical commits. This naturally leads to the question, "How do I split a commit up into multiple commits?" Below I…
This is a little diagram I put together years ago when macOS El Capitan came out and I ran into issues with how it was impacting my PATH environment variable. It ends up that every so often I need to reference it. Today was one of those days. However, I couldn't remember where I put it. The first place I looked was my blog. But it wasn't there. Therefore once I found it it I decided it…
I just released Git Changelog v3.3.2. To update simply run the following: brew update && brew upgrade git-cl What's Changed? Support any Branch It used to be that prior to this release that it would only work on the master branch. However with this release it now functions properly when currently checked out on any branch. It walks the Git tree from where you are currently checked out on and…
I just released Git Patch Stack v0.5.0. To update simply run the following: brew update && brew upgrade git-ps What's Changed? Multiple Stacks of Patches? This release makes it so that Git Patch Stack now works with any branch that has an upstream branch, instead of having the patch stack be limited to the previously hard coded master & origin/master upstream branch. Other Mainlines This…