Proposed NetNewsWire Branching Strategy

Branching Strategies are controversial.  Why is that?  Why can’t we just pick a strategy like Git Flow and call it the one true way to do branching?  The answer is that software development is too complicated for a one size fits all approach.  Factors that can impact how you do branching:

  • Is your team remote?
  • Do all contributors have the same level of repository access?
  • Is the project an open source project?
  • Are there multiple products being produced from this repository?
  • Are you doing Agile development?
  • Is there a comprehensive automated test suite?
  • What tools are you using to manage source control?
  • Does your project have core values regarding quality?

NetNewsWire

What I am going to propose in this post is a minimalist branching strategy designed to fit the NetNewsWire project.

NetNewsWire is a small, open source project.  It has a small core team that is trusted with full repository access.  It has additional developers that contribute via repository forks and pull requests.  Everyone is remote.  There are two main products produced, an iOS app and a macOS app.  The two products share code that should be kept in the same repository.  There isn’t a comprehensive automated test suite.  It has a stated project goal of zero known bug releases.  There is a desire to ensure that the release process doesn’t impede development.  Source control is done in Git and dependency management is done using Git submodules.

Three-Flow

The branching strategy I am going to recommend is an implementation of Three-Flow, a Trunk Based Development strategy.  Do not read about Three-Flow right now. I’m going to give you an executive summary of Three-Flow and apply it to NetNewsWire. Besides the Three-Flow post has a lot of scary git commands and it specifically says it won’t work for a project like NetNewsWire.  By itself it won’t, but it is a good foundation to start from.

(A lot of NetNewsWire development is done using Git forks and pull requests.  This branching strategy accommodates that workflow, but I won’t be addressing it in this post.  This post will focus on how development is managed for the developers with full repository access.)

Three-Flow uses 3 branches to facilitate development, stabilize a release, and manage production hotfixes.  Development happens on Master and moves to a branch called Candidate when it is ready to be stabilized.  Development continues on Master and bug fixes to the release candidate happen on Candidate.  When the product is released, it is pushed to the Release branch. Hotfixes can happen on the Release branch.  All bugs found and fixed are back merged to Candidate and then Master respectively.

Branching

All arrows going up are promotions (pushes) to the next environment.  All arrows going down are back ports of bugfixes.

That is Three-Flow applied to NetNewsWire.  It would be that simple, but we have two products we are going to deliver from the same repository.  The iOS and the macOS variants of NetNewsWire.  To stabilize and manage both variants, each will need to be given their own Candidate and Release branches.  

Branching Full

Today (6/2/2019) we would need 2 branches, Master and macOS Candidate, in the main repository which will eventually grow to be 5 branches.  There will also be a number of repository forks that NetNewWire developers will create to do bug fixes and implement new features (not shown here).

Tagging

Each release should be tagged using Semantic Versioning.  Candidates will continue to be tagged using the current convention which denotes the difference between developer, alpha and beta releases.  Additionally, we will need to use a convention to avoid tag name collisions between iOS and macOS products.  macOS will use even minor release numbers and iOS will use odd minor release numbers.  (See the above diagram for examples.)

Submodules

NetNewsWire uses Git submodules to manage project dependencies.  All the submodules are under the same project umbrella as NetNewWire and there are no third party dependencies to manage.  These submodules are mostly stable at this point.  For simplicity sake, all development on the submodules will continue on their repository Master branch.  These submodules won’t be managed as separate projects with separate releases/tags at this time.

TL;DR

There are 3 types of branches: Master, Candidate, and Release.  All feature development happens on Master.  Stabilization happens on Candidate.  Hotfixes happen on Release.  Each product gets its own Candidate and Release branches.  All candidates and releases get tagged.

I feel this system is as simple as it can be, but not any simpler.  The complexity built into this system buys us:

  • The ability to release for 2 platforms
  • Shared code stays in the same repository
  • Time to stabilize releases
  • Management of production releases

Feedback is welcome.  We will be discussing this post in the NetNewsWire Slack on the #work channel.

Feed Compass 1.0 Released

I’ve put the finishing touches on Feed Compass 1.0 and uploaded it to the App Store.  Feed Compass makes it easy to find and preview blogs.  If you like the blog you previewed, it makes it simple to subscribe to it in your favorite RSS Reader.  I find it a really useful app, especially if you are an Apple Developer since it has the iOS Dev Directory OPML files in it.

It is a free app, so there is no reason to not check it out.

App store badge

Because one of the shortcomings of Feed Compass is the lack of OPML files available on the net, I built a companion application for it, Feed Curator.  Feed Curator makes it easy to create OPML files and publish them for free on the internet.  I wrote about the design behind Feed Curator in Curated Blog Lists.

In the end, the applications had references to each other so I wanted to release them together at the same time.  Feed Curator 1.0 is also available in the App Store and is also free.

App store badge

Give these applications a try.  If you read blogs, you should check out Feed Compass.  If you have a collection of blogs you think is special and want to promote, you will want Feed Curator too.  Feed Compass and Feed Curator together make it easy to share blogs with the world.

Algorithmic Blog Lists

In my previous post, I talked about curated listings of blogs.  This time I want to talk a little bit about computer generated lists.

Following

A following list is a staple in social media.  Who you are following and who is following you are very useful pieces of information.  You can tell a lot about a person from who their friends are or who they are interested in.  

If we knew what blogs a person was reading on a regular basis, would could do the same kind of following recommendations that social media platforms do.  For example, if Bob is following Suzy and Suzy is following Karen, then we could recommend Karen’s blog to Bob.

OPML

So how do we get that following information for blogs?  Fortunately a good number of people still rely on RSS and use RSS readers to get their daily blog fix.  The RSS readers themselves know who people are following.  Also fortunately, the various RSS readers all allow you to export this information in a standard format.  

(OPML has many uses besides managing feed subscriptions, but for the this article I am going to focus on subscriptions only.  When I use OPML in this post, just consider it a list of RSS feeds in an open format.)

If we could get people to export their OPML file and upload it to a common database, we could do a simple algorithmic recommendation list.

feedBase

It so happens that this database of OPML files already exists in feedBase.  This is a project that allows you to upload and manage your OPML subscriptions.   It also publishes a Hotlist of the top 100 most popular blogs in feedBase and exports it as OPML.  It will be of no surprise to anyone familiar with RSS and OPML that this is one of Dave Winer’s projects.

Unfortunately, feedBase doesn’t currently do a suggestion list.  feedBase, like all systems of this sort, could also use more data in its database.

Feed Compass Integration

Feed Compass needs more and higher quality OPML lists to make it more useful.  Being able to consume a specialized recommendation list from feedBase is very desirable.  Also, the more data in feedBase the better the lists from feedBase in Feed Compass will be.

I’ve spoken to Brent Simmons, the creator of NetNewsWire about making possible to directly request a users subscription OPML.  This would be of course with the user’s permission.  Feed Compass would pull the OPML from NetNewsWire and upload it to feedBase.  This removes the friction of exporting it and going to the feedBase website to import it.

My hope would be that by making it easier to upload you subscriptions and getting a customized recommendation list for your effort, more people would be inclined to share their subscriptions with feedBase.

How I envision this working:

+----------------+
|    feedBase    |
+----------------+
  |      |     ^
  |      |     |
Hotlist  |     |
  |      |     |
  |  Suggested |
  |      |     |
  |      |     |
  |      |   Subs
  V      V     | 
+----------------+               +----------------+
|  Feed Compass  |  <-- Subs --- | NetNewsWire 5  |
+----------------+               +----------------+

Better Blog Discovery

I don’t think that this idea is going to revolutionize how the web is used or that it’s going to take down the social media silos.  I do think it could make blog discovery better which could drive traffic to more blogs.  It may be a small contribution to making blogging more mainstream again, but I think it is a worthwhile one.

Curated Blog Lists

The Problem

I recently wrote app for the Mac called Feed Compass.  It is an app that displays lists of blog feeds, allows you to preview them, and then subscribe to them in your RSS reader.  It is designed to solve the problem of not having enough content in your RSS reader.  The problem I’ve run into is that Feed Compass also has the same problem of not having enough content.  In this case, it is not having enough lists of blogs to show to the user.

One solution to this problem is for users to take their personal listings of blogs from their RSS readers and upload them to a service for aggregation.  The only service I know that does that currently is feedBase.  Feed Compass already utilizes the Hotlist from feedBase.  The Hotlist is the top 100 most subscribed listing.  There are currently plans to do more feedBase integration to get more content from it into Feed Compass.  What I want to talk about to day are curated or custom lists.

More on Curated Lists

Feed Compass already has a small handful of curated lists that provide the majority of the content.  Some of the best ones come from the iOS Dev Directory.  They are awesome if you are an Apple developer.  I think that Feed Compass needs more curated lists like this, but with a wider background of interests.  The problem is that they simply don’t exist.

I think one of the things that makes iOS Dev Directory successful is that it has a process where people can submit blogs to be included in the listings.  This process utilizes Github with forks and pulls for its workflow.  In the end it produces an OPML file that can be used by RSS readers and Feed Compass.

This seems to me like a pretty good way to get a curated listing of technical blogs, but is too complicated for the lay person to use.  I’d like to propose a new application to make it easier for for the average person to curate and publish a listing of blogs.

The New Application

This application would be a Mac app originally, but could be ported to other platforms.  It would be able to create and edit OPML files.  OPML files have entries in them for blogs.  All together the entries comprise a blog listing.  

The application would allow you to drag URL’s from another application, such as a web browser, to it.  It would then produce the correct OPML entry for that page, including finding the RSS feed in the page.  There should also be a Safari plugin so the you can add the blog to the OPML listing without having to drag the URL.

For publishing, it would upload the OPML file to a Github Gist.  It would also be able to edit OPML files stored as Gists.  This gives us a way to distribute the OPML for free.  As a bonus it also provides a full revision history.

It should also have a button to submit the listing to Feed Compass for inclusion which would produce a Github Issue that would be reviewed to see if the feed should be included in Feed Compass.

The application would be Open Source and MIT Licensed the same as Feed Compass.

What I Like About It

This would give us a way to distribute and maintain OPML files without having to set up, pay for, or maintain a centralized server.  As long as Github doesn’t drastically change its business model and start charging for Gists or Open Source projects that is.

If done correctly, it should be easy enough for your average person to add to and maintain the OPML file while they are browsing the internet.  I envision people visiting their daily websites and adding to the OPML as they go.

It provides a workflow for reviewing lists via Github Issues to help prevent Spam from getting into the system.

Discussion

Feel free to leave a comment below.  You can also join the discussion on Github: We Need More Curated Lists.

iPhones Are Getting Expensive

I just ordered a new iPhone.  I’ve been using the same iPhone 6 Plus for 4 years now and am tired of it not fitting in my jeans pocket when riding a motorcycle.  If I didn’t want a smaller phone, I probably wouldn’t have upgraded.  More on that later…

I ordered a silver iPhone Xs and a green leather case for it.  I think it looks pretty sharp.  With the camera bump on the back, I think that the case is required equipment.  The total cost was over $1200, but Apple is giving my $100 for my old phone.

MTER2 AV1 GOLD GEO US

Although it is a lot of money, I feel really good about the purchase, especially after watching the September Keynote address.  In it Apple stated the making phones last longer is a specific business strategy for them.  Horace Dediu has a great right up on it, Lasts Longer.

Essentially, without the carrier subsidies, people aren’t upgrading their phones as much.  I used to update mine every 2 years.  Back then it wasn’t like they were going to make your monthly bill smaller after paying for 2 years, so everyone always got a new phone.  That was awesome for the companies selling you phones.

Now that the subsidies are gone, that incentive to upgrade every two years is gone.  My wife and I held on to our phones for 4 years and she still doesn’t want to upgrade hers.  So what are these companies to do?  I think Apple’s approach is to be known as the company that makes phones that last the longest and charge more for that. What they are willing to do is sell you a phone that lasts 2-3 times as long for 1.5-2 times the price.

I think they are really serious about this.  I’ve been running the test version of iOS 12, the version that comes out this month and it is impressive.  It made my old iPhone 6 Plus run faster than the day I bought it.  That is great, considering that most operating system releases try to take advantage of the new phone hardware to add new features.  That makes the older phones run slower.  Not this time.  It sped up and it sped up a lot.  And iOS 12 supports some really old phones.  It supports the iPhone 5s that came out 5 years ago.

My advice is this.  If you are in the market for a new phone then take into consideration that you will hold on to that phone for 3-5 years now.  Does your phone get regular software updates?  Will it be getting software updates after 2 years?  And if you have an iPhone that is feeling slow and think it is time to upgrade, wait a minute.  The new iOS 12 is coming out soon and your old phone might feel brand new again.