Skip to content

Instantly share code, notes, and snippets.

@mdb1
Last active January 1, 2022 20:52
Show Gist options
  • Save mdb1/dcaa4a40eae34cb3a394b21ff3e437b2 to your computer and use it in GitHub Desktop.
Save mdb1/dcaa4a40eae34cb3a394b21ff3e437b2 to your computer and use it in GitHub Desktop.
Industry Related Reading - Q4 2021

Books

The Missing README: Great explanations about every aspect of the software engineering world.

Hell Yeah Or No: Thoughts around what’s worth doing, fixing faulty thinking, and making things happen.

Factfulness: Ten Reasons We're Wrong About the World—and Why Things Are Better Than You Think.


Crypto

A beginner’s guide to how cryptocurrencies work: Great article explaining the very basis of crypto under the hood.


Design and UX

The State of UX in 2022: A hot take on how UX should look in 2022, with a big focus on fixing or deprecating old practices.

THE FIRST RULE OF UX: Everything a designer does affects the user experience. From the purposeful addition of a design element to the negligent omission of crucial messaging, every decision is molding the future of the people we design for.

5 tips for better App Store screenshots: Tips for the AppStore screenshots.


Git

Clean Conventional Commits: Good practices for using git and writing useful commit messages.

Breaking down large pull requests: Nice breakdown of why using smaller PRs is a better approach:

  • Always keep your PRs small and focused.
  • It’s important to keep the develop branch updated with your changes as early on as possible.
  • Feature flags are powerful for developing user-facing features.

Leadership - Management

How To: Be A Good Employee, Be A Great Boss: Really detailed points on both how to succeed as an employee and as a boss in a company. Every human is a work in progress.

Are you sure you want a job promotion?: You don't need to wait for the promotion to start working at the next level. Ask for more responsibilities instead.

Stay weird: A cruel reality check, are you being yourself or are you following outdated conventions?

Managing Up - Lessons From Scaling Teams at Credit Karma and Lyft: "As you continue to progress in your career, managing up will grow to be one of the most important skills you need to master (if not the most important)." - Nice breakdown of common mistakes and tips for overcoming them.

What are the primary traits of a great people manager?: Some lessons learned about people management.

Being Glue: Nice breakdown of a lot of "non-technical" things that organizations need software engineers to do and how it affects promotions.

How to be a manager: Management and leadership are acquired skills, and they take practice. This guide is a framework for you to build upon, make your own and be the best manager.

Transferring your manager skills when returning to the individual contributor track: The skills you picked up as a manager will make you a more capable and compassionate individual contributor for years to come.

Being Opinionated Is Good And Bad: Pros and cons about being opinionated.

Mapping Alignment: We shouldn’t just focus on the practices independent of each other we can also consider and highlight on a map the relationship between them.

Your Calendar = Your Priorities: The basic idea is that we need to open our eyes to where our time and energy is going...and also clarify what “valuable” means in our context.


Product

OOPS writeups: Explains the OOPS template that Netflix uses for their postmortems documents.

Broken State of Data: Good summary of the current state of data in business organizations.

How to Translate Your App Ideas into a Brilliant Product?: Good breakdown.

The Decision-Making Pendulum: The flexibility in the decision-making style brings success and creates a healthy environment that moves while everyone has a voice that can elevate objections. The leaders have to learn the skills to move in the pendulum from side to side.


Productivity

What is underneath productivity?: In order to be productive, you need to have an end toward which you are working. You also need to have a means or a strategy to get there.

Why Story-Driven Learning Can Help You Master Any Subject: Nice illustration on a different approach to learning. "No matter the topic, there’s an incredible story waiting to inspire you."

100 (Short) Rules for a Better Life: Great list. It might be interesting to write down my own.

Here’s 10,000 Hours. Don’t Spend It All in One Place: How Charles Edward Ives dedicated his life to two completely different topics.


Random

Cut Out Time Estimates on Roadmaps: Get Into a Product Delivery Rhythm: A guide on how Honeycomb manages time.

Leave your ego at the door: I always say I have “strong opinions, weakly held”. Meaning I’m going to have an opinion on many things, but if you can provide me counterarguments, I will be grateful to you for letting me learn, and will possibly change my opinions.

FINDING YOUR SWAGGER: A well-written story of a guy who lost his swagger and how he earned it back. Swagger is knowing what you're good at and acting accordingly — earned confidence.

The Danger of Idolizing Imperfect Humans: Idolizing forces you into blindly worshipping imperfect humans. Learning, on the other hand, allows you to observe, synthesize, and pave your own imperfect path.

Stoicism is Not Just For Emperors and Hipsters: The impact of an issue is good to know, but it is not controllable. You can control your reaction. You can control the next steps, but you can't literally control your work situation.


Technical - Hybrid

Creating the same app using 4 different frameworks: Building the same app using SwiftUI, Xamarin, Flutter and React Native and comparing the experiences.

Technical - iOS

Architecture

Clean Code on iOS: Nice breakdown of some of the SOLID practices applied to iOS codebases.

Clean Architecture on iOS: A continuation from the Clean Code article, going into more details about the Clean Principles for iOS programming.

Dependency injection and Generics to create a modular app in Swift: Nice tips on using abstractions to decouple modules.

Composition vs. Inheritance: code architecture solutions explained in Swift: Both inheritance and composition are often used in Apple’s SDKs and require us to think with a different mindset. Composition has the benefit of using value types and often results in better reusable code. Though, inheritance might sometimes be inevitable, which you shouldn’t see as a bad thing. You can combine both patterns in a single project, and one should pick the right solution that fits the problem best.

Non-fatal errors vs fatal crashes: The differences explained: Even though non-fatal errors don’t break your app right away, they might still break an important user flow in your app. Like with crashes, you should closely monitor whether your app is performing well by adding tracking for non-fatal errors. A 99.5% crash-free percentage doesn’t mean your app is performing great. It’s great to have a low number of crashes, but it’s worth nothing if there are many non-fatal errors still breaking important app flows, making your end-user unhappy.

assert() vs precondition() vs fatalError(): how do you choose?: A nice video explaining the differences.

Picking your minimum iOS version to support: Dropping an iOS version can be an easy decision if you’re developing an app on your own. When working on a team though, it can be very hard. Making a solid decision based on data and facts is required to convince your colleagues about dropping a version. Once you drop a certain version, inform your users and update your backlog with new APIs to implement.

CI and Distribution

iOS: app upload via GitHub Actions: A simple step-by-step guide to configure app uploads using fastlane+GHA.

First time using Xcode Cloud: A raw article with screenshots of using Xcode Cloud to build and test a project.

Setting Up an iOS Continuous Integration Pipeline: Another great article con how to set up CD for iOS apps using GHA.

Debugging

How To Solve Any iOS Crash Ever: Great guide on dealing with crashes.

Networking

Async await in Swift explained with code examples: Great guide with 3 different strategies to refactor existing callback-based code into async-await.

Random

M1 Pro and M1 Max Xcode Build and Test Benchmarks: Real-world benchmarks on the new M1 machines.

30 tips to make you a better iOS developer: Good set of tips. Most of them SwiftUI-oriented.

Automatically merging conflicts in Xcode project files: A tool for handling merge conflicts in xcodeproj files.

Swift

Currency Formatting in Swift with NumberFormatter and NSAttributedString: Well explained currency formatter. The video creator has some very nice skills explaining and displaying solutions. However the code he is using only works for currencies with the dollar sign at the beginning of the formatted string.

How to use the #available attribute in Swift: Covers all the possibilities of using the available attribute in Swift.

Closures (Lambda) In Swift Programming: Basic article explaining how closures are used in Swift.

Testing and DI

(Improving Your) XCTAssert* Failure Messages: Pretty detailed description of a lot of XCTest features.

Unit Testing Weak References / Retain Cycles in Swift: Use autoreleasepool to test correct deallocation on unit tests and avoid retain cycles.

Real-World Unit Testing in Swift: Great guide for testing beginners, explains the basics and give some examples on how to get started.

Unit testing UIView action and gesture in Swift: Detailed guide on testing UIView and UIButton actions.

Code Coverage for iOS Development Using Swift, xCode, and GitHub Actions: Guide on how to integrate Codecov in GHA.

Retrying Failed Tests With Xcode 13 and Continuous Integration: Now it's possible to auto-retry failed tests using test plan

UI and UX

Animator: Easy trick to make UIKit animations reusable.

Keyboard Layout Guide: Useful guide on using keyboardLayoutGuide and workarounds for the floating keyboard on iPad.

Detecting Broken Constraints in Swift: A smart way of using Swizzling to detect broken constraints on debug builds.

UIKit Constraint based Animations: Simple way to animate UIKit components via its constraints. Make rounding specific corners easier with extension: A handy way to make rounding specific corners more effortless.

Xcode

Introducing XCMetrics: Our All-in-One Tool for Tracking Xcode Build Metrics: Spotify engineers open sourced their tool to grab metrics from Xcode builds.

Swift Playgrounds 4 is here, and it’s a thing of beauty: We can know develop apps using Playgrounds on iPad.


Technical - Programming in general

Software Estimation Is Hard. Do It Anyway: Estimating a software project seems to always run up against Hofstadter’s Law: “It always takes longer than you expect, even when you take into account Hofstadter’s Law.” Estimation is a skill and can be learned, but practice makes perfect.

My Software Estimation Technique: Nice framework for software estimation.

  1. Break down work into less-complex tasks
  2. Estimate uncertainty
  3. Do the math to get expected- and worst-case estimates
  4. Refine, if needed
  5. Track your accuracy, so you can improve over time

On Pair Programming: Great article going full into details about pair programming and it's benefits.


The Future

20 reasons I'm excited (and scared!) about the future: 20 things that will probably happen in the next 5-20 years. Really interesting.

50 Emerging Technology Themes to watch out for in 2021

The work of the future: A sneak peak at the book that the MIT will publish early in 2022.

The Present

21 really good things that happened in 2021: Must read.

THE BEST INVENTIONS OF 2021: Title.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment