Console #84 -- LazyGit, Headless UI, and Kubescape
An Interview with of Jesse of LazyGit
The great resignation is here and with it has come a major power shift. It is time for talented individuals all over the world to take back their careers.
Fortunately Tal&Dev is here to guide you through that journey. Tal&Dev has a free matching network which leverages its proprietary algorithms to match you to progressive employers within their network that are looking for a profile exactly like yours. They will be your agent!
What are you waiting for? Join Tal&Dev’s talent pool now!
Not subscribed to Console? Subscribe now to get a list of new open-source projects curated by an Amazon engineer in your email every week.
Already subscribed? Why not spread the word by forwarding Console to the best engineer you know?
lazygit is a simple terminal UI for git commands, written in Go with the gocui library.
language: Go, stars: 24913, watchers: 244, forks: 931, issues: 249
last commit: December 13, 2021 first commit: May 13, 2018
Headless UI is a set of completely un-styled, fully accessible UI components, designed to integrate beautifully with Tailwind CSS.
language: TypeScript, stars: 12201, watchers: 155, forks: 430, issues: 89
last commit: November 08, 2021, first commit: September 16, 2020
Kubescape is an open-source tool for testing if Kubernetes is deployed securely according to multiple frameworks: regulatory, customized company policies and DevSecOps best practices, such as the NSA-CISA and the MITRE ATT&CK.
language: Go, stars: 4699, watchers: 49, forks: 204, issues: 14
last commit: December 14, 2021, first commit: August 12, 2021
Want to make more money for your work? Let us find you a new, higher-paying job for free! Sign up for The Console Career Service today! The benefits of signing up include:
Automatic first-round interviews
One application, many jobs (1:N matching)
Free candidate preparation service
New opportunities updated regularly
All roles, from PM to SWE to BizOps
High potential, venture-backed, and open-source opportunities
Even if you’re not actively looking, why not let us see what’s out there for you?
Sign up for free in less than 5 minutes👇
Hey Jesse! Let’s start with your background. Where are you from, how did you learn how to program, and what languages or frameworks do you like?
I’m a developer based in Melbourne. My passion for programming started in primary school, making games in a thing called ‘The Games Factory’. I’d love to get back into making games but at the moment I’m mostly focused on web stuff in my day job and dev tools in my side projects.
In my day job I use Rails/React and in most of my side projects I use Go. I love React, and I’ve been spending some time with Rust lately as well.
Who or what are your biggest influences as a developer?
The man makes sweeping generalisations and over-confident remarks but for all his flaws, Bob Martin has given me more ‘aha!’ moments than any other figure in the world of programming. His desire to boil concepts down to their essence makes for great insights, even if you need to temper his views with those of a more reserved contemporary like Martin Fowler. I’ve also caught Bob’s contagious obsession with dependencies, for better or worse.
What's an opinion you have that most people don't agree with?
Static type keys should be treated with suspicion. That is, if you have an enum variable whose value is determined at compile time and it’s only used for control flow rather than storing the actual value somewhere, you should see if your code is made simpler by removing it. There are some major caveats but that’s the thrust of it, and quite a few people disagree.
What’s your most controversial programming opinion?
Go is a frustrating language to work in.
Why do you say that? It's surprising given you chose to write your side project in Go.
I go into some detail about my gripes with Go in my blog but I can give a brief summary. Let me preface this by saying I actually respect the Go community’s commitment to keeping Go simple: it’s not an easy stance to take when people like me keep pushing for changes.
With that said, complexity has to live somewhere, and the less complexity lives in the language, the more complexity lives in your program. Common language constructs that can make your code more expressive like filter/map/reduce are nowhere to be seen and instead you need to write a bunch of for loops, leaving it to the reader to get to the end of the for loop and then realise ‘ah okay so this is just doing a map’. Generics will help with that, but there are other design choices I disagree with for example:
Privacy is scoped to the package (i.e. the directory) which makes it hard to understand how the pieces of a package fit together.
Error handling is too verbose. I agree that sad paths are just as important as happy paths, but that does not mean they deserve equal real-estate in my editor
Lack of discriminated unions contributes to the awkwardness of handling errors, and enums in Go feel like a hack.
Lazygit was my first Go program so I hadn’t yet developed these opinions, but time will tell as I gain more experience with Rust whether I’m just hard to please, no matter which language I use!
If you had to suggest 1 person developers should follow, who would it be?
If you’re into podcasts, Tyler Cowen’s Conversations With Tyler is hands down the best podcast in the game. Nothing to do with programming unfortunately but every episode I learn something and I suspect the typical dev would be interested in the content.
What have you been listening to lately?
No easy way to admit this, but I’ve been listening to Death Grips vs Crystal Castles mashups on youtube. It’s basically its own subgenre at this point.
How do you separate good project ideas from bad ones?
Sometimes it’s hard to tell whether an idea is good or bad without going ahead and doing it so I try to pick projects I can do in a short period of time and then see if they gain traction. Along the way you’ll always come up with new ideas.
What’s the funniest GitHub issue you’ve received?
Very soon after releasing Lazygit there was an issue that had no text, just a single image: a woman taking a photo of herself through her mirror. It was taken down soon afterwards and I will never know the meaning behind it.
Why was Lazygit started?
Everybody around me was using the git command line to do the simplest tasks and I was too impatient for that. I could have used an existing GUI but wanted the experience to live in the terminal and wanted a UX that bent to my will.
Where did the name for Lazygit come from?
The expression ‘lazy git’ is a pejorative in the UK, and as much as I like to take credit for such a clever name, I actually had no idea about that term being a thing: I just wanted ‘lazy’ in the name to communicate the intended audience.
What is the most challenging problem that’s been solved in Lazygit, so far?
Sometimes you commit a change and then realise that part of it doesn’t belong in that commit. Lazygit lets you select that chunk of code and yank it out of the commit. I find that very useful when trying to keep my commits clean. I walk through the feature in this video (forgive the shameless 'look how surprised I am!' thumbnail)
How do you balance your work on open-source with your day job and other responsibilities?
I am terrible at it. I’ve had long periods where I neglect my open-source stuff and slowly build up this irrational fear of even checking the issues board. At some point I break through that fear and dive back into it, wondering why I was so scared in the first place. I want to build up more of a routine but routines make me feel claustrophobic.
Do you think any of your projects do more harm than good?
If my joke programming language, OK? , ever actually gets used by a real person, it will certainly do more harm than good!
What is the best way for a new developer to contribute to Lazygit?
Pick an issue that has the good-first-issue label and take a stab at it. If you need any pointers feel free to ask in the issue itself.
If you plan to continue developing Lazygit, where do you see the project heading next?
I want Lazygit to integrate with Github (and alternatives) so that you can do all of that stuff from within Lazygit. Not a simple task though!
What motivates you to continue contributing to Lazygit?
Whenever I come across somebody saying that Lazygit improved their life as a dev, it’s a heartwarming and surreal experience. I just want to continue having those moments and that means ensuring that Lazygit continues to improve.
Where do you see software development heading next?
I think we’re going to reach a period of stagnation in the near future with respect to new languages and frameworks. I’m not sure what will happen then, but I suspect it won’t be good. Hoping to be wrong though, on both counts!