PayPal’s APIs are… a work in progress. First came Direct Payments, aka. PayPal Payments, aka. payments v1 accompanied by a REST SDK that provides API client code in various languages. After the Braintree acquisition came PayPal Checkout with a new payments API (v2) and completely new Checkout SDK. The Direct Payments API has continued to evolve, however, (despite being “in the process of being deprecated”) with a new Product Catalog and Subscriptions implementation replacing the original Billing Agreement. Unfortunately as of writing these API changes were not being reflected in the REST SDK, though there is now a separate subscriptions developer reference home page that explains how to customize the JS SDK and documents the server side API (for the most part, but Plan Create and Subscription Create are missing(!), for that see the REST API reference). PayPal’s documentation catalog links to the REST SDK for subscriptions management despite the implementation being absent.
For better or worse Braintree has taken a very different approach with the Checkout SDK compared to the REST SDK: there is no longer any effort to provide mapping of the schema to data objects with marshalling or unmarshalling. The open source gem code is machine generated using a tool and the underlying schema representation is not obviously available, making collaboration on any improvements problematic if not impossible.
To be fair the REST SDK is dated and has it’s own issues: no client side validation or defaults, unintuitive connection management and limited control of logging, but at least these things can be fixed. Unfortunately it appears unlikely.
For further discussion see PayPal-Ruby-SDK#378
At a practical level, for our mature in-house codebase a switch to microservices is not necessary or cost effective. This year, however, has seen Stephan Hagemann’s ‘Component Based Rails Applications’ ebook published (endorsed) as a softback by Addison Wesley and a very similar approach embraced by Shopify. Our own internal codebase remains ~60% gemified from 2017 in a simple layered architecture while we have focused on consistently packaging business logic using interactors (service objects) for both foreground and background processes.
New gems (to us) used this year included roxml, and replacing the unmaintained god process monitor with eye. On the open source side I stepped back from contributing to ActiveAdmin and published instead a couple of API clients for AmEx and PayPal.
Year 8 with Rails for me has been an unglamorous affair of maintenance upgrades (Ruby 2.3, Rails 5.x), refactors and bug fixes.
It has been discouraging to see StackOverflow characterize Ruby as shrinking and unpopular and compare Ruby on Rails with ASP.net. Nate Berkopec’s findings that vanilla Rails apps are perfectly capable of 1,000 requests/minute is cold comfort in the face of shrinking developer mindshare: this decline has real consequences in terms of open source contributions and Ruby gem maintenance.
On the Rails front end Basecamp continued their contrarian tradition by offering Stimulus.js as a more limited and pragmatic alternative to React’s dominant framework. The Majestic Monolith remains relevant for smaller businesses and early stage startups despite ambitious engineers everywhere (myself included) wanting to use the same tech stack as the largest, most successful companies from Apple, Salesforce and Netflix to… Twitter. At Railsconf GitHub, now owned my Microsoft, recommitted to easier scalability enhancements for Rails 6.
On the infrastructure side the Docker ecosystem has continued to mature with the embrace of Kubenetes at Dockercon EU in Oct ’17. It has also been good to see a more enlightened approach to open source by AWS with EKS and ApacheMQ.
At my employer we continue to support a somewhat modular monolith with a 50 kloc monorepo, 40 ActiveAdmin resources, 60 background jobs, 70 direct and 240 total gem dependencies. We have fully caught up with Rails 5.2 and edged forward with Ruby 2.3 for Bootsnap support and React-Apollo 1.x. Procedural code has continued to migrate to standardized Interactors. New gems used included Bootsnap, Combustion, Dalli (memcached) and AWS SDK v3 SQS, S3, SES & SNS.
What has Rails 5.x brought us? More secure controller parameters, still scarily subvertible by less experienced developers, but at least awareness has been raised. More restricted autoloading, for the best. Better callback management, though we try to avoid them as much as possible. Bootsnap with a significant improvement in startup times, yay!
Open source contributions this year have included a couple of minor ActiveAdmin releases including Rails 5.2 support and various PRs for the AuthorizeNet Ruby SDK.
AWS features I have been working more with this year have included ClassicLink, private subnets, piculet, Data Pipeline and managed SSL certs. Concerns over production container management have been mitigated with a mass of metrics collection with CloudWatch, Librato and Skylight.
Spreedly’s first customer and partner conference was held in leafy Durham this year. First thing you notice is the new construction and the recovering economy: the city is still far from overdeveloped. The one-and-a-half day event drew more than one hundred attendees in the Carolina Theatre downtown. Spreedly’s growth has been accelerating since it pivoted away from hosted subscriptions a few years ago into a meta-gateway providing PCI compliant card vaulting and a standardized card payments API. Transaction volume last year tripled to around 90M, helped by key accounts like FattMerchant and SeatGeek, which recently won the ticketing business for the Dallas Cowboys. The first day featured lightening talks on feature prioritization, Riak, Elixir and Kafka, followed by open house at Spreedly’s offices, recently doubled to around 10,000sq.ft.
The second day was filled with a variety of presentations. Nate Talbott pitching to build a payments community. John Duff with a familiar history of payments at Shopify: integrations using active_merchant, compliance, scalability, partnering with Stripe for merchant services, leveraging data for fraud protection. Jennifer Marston on transitioning to Spreedly at Paylock. Nathan Adamson on the costs of EMV for small businesses. Stephanie Slattery on accessibility and Alex Henderson on ‘assured’ payments and learning to effectively work around gateway outages. Camille Acey providing a non-engineering perspective and Brad Powers of Passport on the challenges and benefits of working on local government projects. Unfortunately I had to skip Sandi Metz’s closing keynote but I look forward to catching it on Confreaks.
Tuesday 17 April. Snow. DHH poking fun at Twitter and raising alarms about Facebook. Nick Quaranto with a GraphQL intro: best for new APIs as a mobile backend. Sean Griffin trying to encourage Rails contributions by labeling it a legacy app. Fastly presenting their not yet released alternative to docker-compose for developers. Olivier Lacan talking about the life and imminent death of CodeSchool.com. Taylor Jones with an introductory overview of Webpacker. Akira Matsuda teasing with his unfinished performance hack gems. Mark Imbriaco with a stellar career from AOL to Decisiv, 37signals, Heroku, Living Social (with Chad Fowler), GitHub, Digital Ocean and Pivotal.
Wednesday. Eileen Uchitelle keynote on upcoming Rails 6 features for scalability: baked in parallel tests (minitest) and polished multi-database support. Initially skeptical but ultimately inspired by her appeal for more companies to upstream their work. Justin Searles and Ted Kaufman talking about growing their agency. Chris Hoffman reviewing Optoro’s experiences adopting services: start with new business services, not an extraction, do something large enough to be noticed but as simple as possible, establish infrastructure standards and have developers support their services. Exhibition hall with booths by BTCOTC, Procore, GitHub, Heroku, Engine Yard, Cloud 66, Shopify, Scribd and LendingHome amongst others. After lunch James Adam recounting his struggle to popularize Rails engines and the forces shaping the framework’s evolution. Leanardo Targon of Plataformatic with an introduction to Warden. Admin frameworks BOF discussing modular monoliths, TrailBlazer and CBRA. Lightening talks including Clearwater and jsonapi-suite
Attendance looked up (2,000+), and more diverse. No more ‘Rails is dying’ and React/Elixir FOMO. Webpack/services/JSONAPI for sure, but not too much beyond that. Standards of the technical talks were good, especially Akira and Eileen. I missed the talks by Vladimir Dementyev and Justin Weiss and I look forward to the inspiring videos of Ernie Miller and Nicolas Means.
TIOBE replaces their index content each month, so I quote:
“Ruby is back in the TIOBE index top 10 and now it seems to be for a longer time. If we take a look at the chart of Ruby it follows a very common pattern for programming languages. Ruby was invented a very long time ago and it remained in obscurity till 2006. That was when the Ruby on Rails framework was released. This framework made it easy to create web applications and because Ruby was the underlying language it skyrocketed in the TIOBE index at that time from position 40 to a top 10 position. It also was awarded the TIOBE programming language of the year in 2006. All new language gurus were in ecstasy about Ruby. The language peaked in 2008, but then all hipsters moved to a new language and Ruby dropped to one third of its popularity. It remained there for a long time but is now catching up very slowly. The fact that it is getting more popular so gradually is a good sign. This means that its increase in popularity is structurally instead of being pushed by hypes. Some other interesting moves this month are that both Julia and Kotlin entered the top 40, whereas Rust and Groovy lost their positions in the top 50.”
According to this blog post Active Admin monthly downloads nearly doubled last year to almost 3,000 times a day. Part of that can probably be attributed to increasing use of continuous integration, but more interesting is that Active Admin has outpaced the competition. Possible contributing factors include three releases, including a 1.0 release that coincided with RailsConf and was featured by Ruby Weekly, a GoRails episode by Chris Oliver at the end of 2016, and the blog post by Charlie Gleason on using Active Admin as a back end to a React application, that has been discovered and tweeted by new fans repeatedly. I’ld love to think that timely responses to GitHub issues and pull requests and StackOverflow answers have helped also, along with the curated wiki and continuing contributions by plugin authors. Also there have been Japanese blog posts and activity so more adoption there. At this point Active Admin has 7,800 GitHub stars and 2.9M downloads, it will interesting to see how things are another year from now.