Console 42

Unleash, nq, and Blocklists

Console Referral Program

Drop your friend’s email in this Google Form, and be entered to win an Amazon gift card when they open their first Console email!


Sponsorships

Circles for Zoom

Circles is a new way to experience Zoom.  Circles turns each participant into a movable circle on your screen to put you back in control of your desktop.  With Circles, you can now easily take notes and multi-task during your Zoom meetings.  Circles is free to use, and you'll love the flexibility and control you get over your meetings. Get Circles today!


unleash

Unleash is an open-source feature toggle service.

language: JavaScript, stars: 2996, watchers: 58, forks: 240, issues: 21

last commit: February 26, 2021, first commit: September 29, 2014

https://twitter.com/unleash_hosted

nq

nq is a Unix command line queue utility which allows the creation of very lightweight job queue systems that require no setup, maintenance, supervision, or any long-running processes.

language: C, stars: 2410, watchers: 49, forks: 51, issues: 3

last commit: February 04, 2021, first commit: July 31, 2015

https://twitter.com/leahneukirchen

blocklists

Blocklists is a shared list of problem domains people may want to block with hosts files.

language: Digital Command Language, stars: 4241, watchers: 163, forks: 326, issues: 13

last commit: February 18, 2021, first commit: May 27, 2016

https://twitter.com/jmdugan

clubhouse-py

clubhouse-py is a clubhouse API written in Python. Standalone client included.

language: Python, stars: 1345, watchers: 59, forks: 193, issues: 0

last commit: February 25, 2021, first commit: February 19, 2021

https://twitter.com/stereotype32


Help Wanted

If you’re interested in posting a help wanted ad for your project to thousands of open-source developers, send an email to console.substack@gmail.com


An Interview With Ivar of Unleash

Hey Ivar! Let’s start with your background. Where are you from, where have you worked in the past, how did you learn how to program, etc?

I am a Norwegian software engineer and have been in the industry for 11 years now. I started my career as a consultant working in the banking & insurance industry. The first few years I tried to learn as much as I could from my peers and advance my technical skills. At some point I got tired of all the bureaucracy working in this sector, and wanted to work with a product where the teams were following agile practices, experimented a lot and moved fast. To fulfill these desires I joined FINN.no the leading Online Classified Marketplace in Norway. Here I took on multiple roles over the years, ranging from Developer, Lead Developer to Architect and eventually Chief Enterprise Architect. 

What do you feel were the biggest differences between these roles?

I enjoyed both roles. As a developer I was able to focus more, and run fast. As an architect you have a much broader picture, and work more on longer term direction. I actually enjoyed both roles, but being architect for almost 5 years I feel it is good to mostly code again. And I am fortunate to have been able to transform my little side-project in to my full time job.

What are your biggest influences as a developer?

I think a combination of the Agile and DevOps movements has influenced me the most as a software developer. At FINN.no I was part of the transformation where we went from four releases per year to more than 2000 releases to production every week. The first step of this journey was to automate all our infrastructure and our deployment pipelines. It almost felt like we had implemented everything in the DevOps handbook. You get tremendous power when you combine Agile practices with the capabilities of shipping code in small batches to production all the time. This reduces your lead time and exponentially grows the number of experiments you are able to run. 

What’s your most controversial programming opinion?

Just ship it. People tend to hold on to their code for too long in my opinion, and are scared to let it loose in the wild. The faster you ship your code the faster you are able to learn. Iterate, improve, and ship again. 

What is one app on your phone that you can’t live without that you think others should know about?

The browser. I think too many  things try to be apps, when they could just do with an optimized mobile webpage instead. 

Which browser are you using?

Mostly Chrome. But I have started playing with Brave, as I like their take on privacy.

If you could dictate that everyone in the world should read one book, what would it be?

If you work in the software industry I feel it is mandatory to read The Phoenix Project”.

If I gave you $10 million to invest in one thing right now, where would you put it?

I would put 50% in my company, building Unleash. The rest I would spread across promising startups in Africa. Africa is up and coming and they have a lot of interesting startup initiatives and the market potential is huge! 

What are you currently learning?

I recently started playing around with BigQuery. Learning how I can use it to analyze hundreds of terabytes of request data is a fun night activity when the kids are at sleep. 

What resources do you use to stay up to date on software engineering?

I follow various blogs, Reddit, and Hacker News, in addition, I Google a lot. Recently Google Discover also has been providing me with good recommendations on things to read up on. 

How do you separate good project ideas from bad ones?

I collect feedback from my team, peers, friends, users. If there is a new crazy idea for Unleash I sometimes create an issue and see if anyone responds. If there are no reactions, not even an emoji, it’s a sign; either it is a fantastic idea nobody understands or more likely a bad idea.  

Who, or what was the biggest inspiration for Unleash?

Because I wanted to go faster. We had already automated our deployment pipelines all the way to production. We were doing weekly sprints, but still we were not in a position where new code was moved to production. I felt this caused multiple problems for us; we were postponing the learning opportunities.  In addition, we kept the code at separate branches, which reduced communication and increased the cost of merging the code back to the main branch. 

It became clear to me that feature toggles were the tool we were missing in our toolkit. This would essentially allow us to detach the process of moving code into production from releasing it to customers.

I actually like another project called “Togglez”. It was a nice framework for feature toggling in Java. But I wanted something a bit simpler, that could scale across all our microservices and scale to more than 10k req/s. We also needed to support both Java and node.js and wanted a service across all our microservices. 

What trade-offs have been made in Unleash as a consequence of its overarching design goals?

There are actually three overarching goals in the architecture of Unleash. And they are actually interconnected. 

  • Performance - Unleash should be super-fast. You do not want your application to synchronize reaching out to another service to check whether a feature should be enabled or disabled for a specific user request. Thus all the important logic is implemented in the SDKs. The service itself is “just a small CRUD” service with a fancy Admin UI on top. 

  • Resilience - Networks are unreliable and you don’t want your app to stop working just because you're not able to talk to the Unleash API. If the Unleash API becomes unavailable for a short amount of time, the cache in the SDK will minimize the effect. The client will not be able to get updates when the API is unavailable, but the SDK will keep running with the last known state. Sane defaults and local backups also allow the client application to start without the Unleash API being available (even though our hosted service has proven to be extremely stable over the years). 

  • Privacy - In today's world where user data is scattered all over the place. In Unleash we have decided that user data is not automatically shared from the Unleash SDK to the Service itself. Instead we take a different approach where you define your rules on the server side, we synchronize the rules back to the client and evaluation happens on a per user request basis, locally in the customers application. In order to support Single Page applications you do not want to push your entire configuration to the browser. This is the reason why we have developed the Unleash-Proxy which sits between the Unleash API end user and only exposes the evaluated feature toggle for a specific user. 

I have to ask, what is "extremely stable"?  How much downtime have you had so far?

The registered downtime over 1.5 years of hosting it for customers is 10 minutes. I think this is more luck, and the fact that AWS is really stable.

What is the most challenging problem that’s been solved in Unleash, so far?

There are a lot of small challenges we have tackled. We are asking the users to put the SDK into their business critical applications and thus it is important that the SDK is performant and does not bring along a lot of dependencies. Especially in Java, transitive dependencies used to be a problem with the shared classpath. This has led us to only bring along two dependencies: slf4j-api to support logging, and gson to deal with json parsing. Aside from those we are only using core Java modules. This leads to a bit of nasty code to perform a simple HTTP get call, but it does the job. 

What was the most surprising thing you learned while working on Unleash?

I learned more from our first few paying customers than I did from open source users over four years. 

What is your typical approach to debugging issues filed in the Unleash repo?

Pretty standard. I start debugging the case, and if it makes sense I try to write a test that triggers that exact problem.

What is the release process like for Unleash?

We use Semver and try to release a new version of Unleash every week, if it makes sense. 

How is Unleash currently monetized?

Unleash has been around as an open source product since 2015. In 2019, we expanded it into an open-core model and offer Unleash Enterprise, with additional functionality, either as a hosted service or something you can self-host in your own data center. 

How do you balance your work on open-source with your day job and other responsibilities?

I am lucky enough to be working full-time on Unleash. I would say that I probably use about 80% on the open-source version at the moment. Given that the Enterprise version also benefits from the open-source I would say this is time well spent. 

What is the best way for a new developer to contribute to Unleash?

Come join us. We welcome help of all kinds, and even try to engage both via pull-request, or more interactively in our Slack community. I have even engaged in VC with contributors to help land a PR. 

If you plan to continue developing Unleash, where do you see the project heading next?

There is so much more to do! First I want Unleash to become the de-facto open-source platform for feature management and experimentation. A key part of this is to help the team using Unleash understand whether an improvement of a feature is better than the previous version. There is also room for automation around these decisions. Why should a developer have to look at the metrics dashboard and decide whether to increase exposure to a new feature or turn it off if it is not functioning? 

Where do you see software development in-general heading next?

I don’t think I am the person that can give you an answer to where the software industry will move in general. But I strongly believe that increased awareness of users' privacy will affect how we design systems in the future. GDPR, CCPA etc is just the beginning.  Why should central services be allowed to hold all this data about people of the free world? There are a lot of interesting ideas around this topic today, solutions emerging around the blockchain and the Solid project

Where do you see open-source heading next?

I think open-source is up and coming and there is a lot of momentum going on. 

Do you have any suggestions for someone trying to make their first contribution to an open-source project?

Just do it. It’s often not that hard but make sure the project is still active and that requests are responded to. If you plan to send a pull request, it can be beneficial to open an issue request first, to verify that your planned contribution is in line with the goal of the project and that the maintainers welcome external contributions.  


Like what you saw here? Why not share it?

Share

Or, better yet, share Console!

Share Console

Also, don’t forget to subscribe to get a list of new open-source projects curated by an Amazon software engineer directly in your email every week.