# Matt McKenna

Hi, I'm Matt, an Android GDE. Here I'll share insights on Android, Kotlin, and cutting edge topics to give back to the community that helped me grow. All articl

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Using a Slack Channel as a Living Hype Document

DevFeed: [Using a Slack Channel as a Living Hype Document](<https://devfeed.tech/articles/you-should-make-a-hype-channel-27352.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/you-should-make-a-hype-channel>)

Author: Matt McKenna

Published: 2026-03-25T13:00:00Z

Content type: article

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [Slack](<https://devfeed.tech/topics/slack.md>), [context](<https://devfeed.tech/topics/context.md>), [Documentation](<https://devfeed.tech/topics/documentation.md>)

Tags: [engineering](<https://devfeed.tech/tags/engineering.md>), [engineering-management](<https://devfeed.tech/tags/engineering-management.md>), [hype-doc](<https://devfeed.tech/tags/hype-doc.md>), [messages](<https://devfeed.tech/tags/messages.md>), [performance](<https://devfeed.tech/tags/performance.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [slack](<https://devfeed.tech/tags/slack.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>), [team-culture](<https://devfeed.tech/tags/team-culture.md>)

### AI overview

The article describes using a dedicated Slack channel as a living hype document to record professional accomplishments. It explains that keeping wins in the tools where work happens can reduce friction, preserve context, support self-reflection and performance reviews, and help engineers advocate for themselves.

### Source excerpt

During my time at Square, I started using a Slack channel as a living hype doc and worked with my manager, Stephen Pickens, to refine the approach. Together we put this document together to share the

## No Permanent Overrides

DevFeed: [No Permanent Overrides](<https://devfeed.tech/articles/no-permanent-overrides-27347.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/no-permanent-overrides>)

Author: Matt McKenna

Published: 2026-03-24T13:00:00Z

Content type: tutorial

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [Development](<https://devfeed.tech/topics/development.md>), [incident](<https://devfeed.tech/topics/incident.md>), [maintenance](<https://devfeed.tech/topics/maintenance.md>), [audit](<https://devfeed.tech/topics/audit.md>)

Tags: [audit](<https://devfeed.tech/tags/audit.md>), [automatic](<https://devfeed.tech/tags/automatic.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [feature](<https://devfeed.tech/tags/feature.md>), [feature-flags](<https://devfeed.tech/tags/feature-flags.md>), [guide](<https://devfeed.tech/tags/guide.md>), [incident](<https://devfeed.tech/tags/incident.md>), [maintenance](<https://devfeed.tech/tags/maintenance.md>), [override](<https://devfeed.tech/tags/override.md>), [scheduled](<https://devfeed.tech/tags/scheduled.md>), [software-development](<https://devfeed.tech/tags/software-development.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>)

### AI overview

This guide explains how feature flag overrides applied during incident response can accidentally become permanent, causing drift between production and staging, fragmented user experiences, and maintenance debt. It recommends scheduling automatic expiration when applying an override so users re-enter the rollout path after the underlying fix is deployed.

### Source excerpt

I originally wrote this guide while working at Square to help my teams address a recurring problem: feature flag overrides applied during incident response were quietly becoming permanent, creating dr

## How to Make Software Demos More Effective by Focusing on User Stories

DevFeed: [How to Make Software Demos More Effective by Focusing on User Stories](<https://devfeed.tech/articles/demo-why-not-what-27338.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/demo-why-not-what>)

Author: Matt McKenna

Published: 2026-03-23T13:00:00Z

Content type: tutorial

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [Demo](<https://devfeed.tech/topics/demo.md>)

Tags: [demo](<https://devfeed.tech/tags/demo.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [mobile-development](<https://devfeed.tech/tags/mobile-development.md>), [technical](<https://devfeed.tech/tags/technical.md>)

### AI overview

This article presents a framework for making software demos more effective by explaining why a feature matters, grounding it in a user story, showing a clear happy path, highlighting the moment of value, and closing with the outcome.

### Source excerpt

Intro This year at Square we started shipping aggressively. Powered by a completed migration, new feature roadmaps, and AI adoption, we shifted into a build, demo, iterate, ship cycle. My team was sho

## Introducing Dejavu: Recomposition Testing for Jetpack Compose

DevFeed: [Introducing Dejavu: Recomposition Testing for Jetpack Compose](<https://devfeed.tech/articles/introducing-dejavu-recomposition-testing-for-jetpack-compose-27344.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/introducing-dejavu>)

Author: Matt McKenna

Published: 2026-03-09T19:26:54Z

Content type: release

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [AI Agent](<https://devfeed.tech/topics/ai-agent.md>)

Tags: [ai-agent](<https://devfeed.tech/tags/ai-agent.md>), [android](<https://devfeed.tech/tags/android.md>), [compose](<https://devfeed.tech/tags/compose.md>), [diagnostics](<https://devfeed.tech/tags/diagnostics.md>), [error-messages](<https://devfeed.tech/tags/error-messages.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [recomposition](<https://devfeed.tech/tags/recomposition.md>), [testing](<https://devfeed.tech/tags/testing.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

The article introduces Dejavu, a testing tool for Jetpack Compose that turns recomposition behavior into test assertions. It describes asserting expected recomposition counts, receiving diagnostic information on failures, and using CompositionTracer without production-code instrumentation, a compiler plugin, bytecode manipulation, or a Gradle plugin.

### Source excerpt

Where This Idea Came From At Square, most of the app is built on Workflow. There is an internal testing framework that lets you assert exactly how many render passes are triggered for a given interact

## Cook Together, Clean Together, Build Together

DevFeed: [Cook Together, Clean Together, Build Together](<https://devfeed.tech/articles/cook-together-clean-together-build-together-27337.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/cook-together-clean-together-build-together>)

Author: Matt McKenna

Published: 2026-03-03T17:56:48Z

Content type: opinion

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [Development](<https://devfeed.tech/topics/development.md>), [AI Agent](<https://devfeed.tech/topics/ai-agent.md>), [coding](<https://devfeed.tech/topics/coding.md>), [Software](<https://devfeed.tech/topics/software.md>)

Tags: [agent](<https://devfeed.tech/tags/agent.md>), [agents](<https://devfeed.tech/tags/agents.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-agent](<https://devfeed.tech/tags/ai-agent.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [development](<https://devfeed.tech/tags/development.md>), [software](<https://devfeed.tech/tags/software.md>), [team](<https://devfeed.tech/tags/team.md>)

### AI overview

This opinion argues that human collaboration remains essential in software development alongside AI agents. While AI agents can improve productivity and help make software, teams of people provide friendship, mentorship, diverse lived experiences, and challenges to assumptions that a single person working with multiple agents cannot replicate.

### Source excerpt

Ask anyone who worked at Block/Square what they loved most and I guarantee you the first thing they'll say is "its the people". Square's mission of economic empowerment and growing by helping others g

## Custom Claude Code Status Lines for an Android Development Workflow

DevFeed: [Custom Claude Code Status Lines for an Android Development Workflow](<https://devfeed.tech/articles/claude-status-lines-are-the-new-terminal-prompt-27336.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/claude-status-lines-are-the-new-terminal-prompt>)

Author: Matt McKenna

Published: 2026-01-05T21:50:14Z

Content type: tutorial

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [Claude Code](<https://devfeed.tech/topics/claude-code.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Android](<https://devfeed.tech/topics/android.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [android](<https://devfeed.tech/tags/android.md>), [claude-ai](<https://devfeed.tech/tags/claude-ai.md>), [claude-code](<https://devfeed.tech/tags/claude-code.md>), [ios](<https://devfeed.tech/tags/ios.md>), [llm](<https://devfeed.tech/tags/llm.md>), [mcp](<https://devfeed.tech/tags/mcp.md>), [mobile-development](<https://devfeed.tech/tags/mobile-development.md>), [terminal](<https://devfeed.tech/tags/terminal.md>)

### AI overview

The article describes a custom Claude Code status line for an Android development workflow. It explains how visible details such as the working directory, model, context-window use, changed-line count, cost, branch, MCP connection status, and connected devices help the author manage sessions and development work.

### Source excerpt

If you've spent time tweaking your shell prompt or configuring Starship, you know the feeling, there's something nice about having the right information visible when you need it. Claude Code supports custom status lines, so I put one together for my ...

## Managing Resource Conflicts Among Multiple Local AI Coding Agents

DevFeed: [Managing Resource Conflicts Among Multiple Local AI Coding Agents](<https://devfeed.tech/articles/agents-keep-fighting-over-my-cpu-27334.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/agents-keep-fighting-over-my-cpu>)

Author: Matt McKenna

Published: 2025-12-18T16:39:11Z

Content type: article

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [ai-coding](<https://devfeed.tech/topics/ai-coding.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Development](<https://devfeed.tech/topics/development.md>), [Android](<https://devfeed.tech/topics/android.md>), [Claude Code](<https://devfeed.tech/topics/claude-code.md>), [cursor](<https://devfeed.tech/topics/cursor.md>)

Tags: [agents](<https://devfeed.tech/tags/agents.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [ai-coding](<https://devfeed.tech/tags/ai-coding.md>), [android](<https://devfeed.tech/tags/android.md>), [claude-code](<https://devfeed.tech/tags/claude-code.md>), [cli](<https://devfeed.tech/tags/cli.md>), [cursor](<https://devfeed.tech/tags/cursor.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [llm](<https://devfeed.tech/tags/llm.md>), [mcp](<https://devfeed.tech/tags/mcp.md>), [model-context-protocol](<https://devfeed.tech/tags/model-context-protocol.md>)

### AI overview

The article describes running multiple local AI coding agents on an Android development laptop and the resulting conflicts when they simultaneously run resource-intensive Gradle builds or deploy to the same emulator. It discusses queueing commands and the problem of shell timeouts in tools such as Claude Code and Cursor.

### Source excerpt

I prefer running two or three AI agents locally rather than offloading to remote agents. The feedback loop is faster, I can see what's happening, use the tools I like, and context switching between tasks is easier when everything is on my machine. My...

## A Framework for Assessing Software Tolerance When Using AI Agents

DevFeed: [A Framework for Assessing Software Tolerance When Using AI Agents](<https://devfeed.tech/articles/a-framework-for-engineering-variance-with-ai-agents-27351.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/the-piston-and-the-cup-holder>)

Author: Matt McKenna

Published: 2025-12-04T13:15:03Z

Content type: opinion

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>), [Framework](<https://devfeed.tech/topics/framework.md>), [Software](<https://devfeed.tech/topics/software.md>)

Tags: [agents](<https://devfeed.tech/tags/agents.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [code](<https://devfeed.tech/tags/code.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [llm](<https://devfeed.tech/tags/llm.md>), [software-development](<https://devfeed.tech/tags/software-development.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>), [tool](<https://devfeed.tech/tags/tool.md>), [variance](<https://devfeed.tech/tags/variance.md>)

### AI overview

This opinion article proposes evaluating software components by their tolerance for logical error and change before using AI tools. It argues that probabilistic AI is better suited to high-tolerance work, while low-tolerance areas such as payments, encryption, mathematics, and idempotency require binary correctness.

### Source excerpt

The Piston and the Cup Holder In mechanical engineering, "tolerance" is the permissible limit of variation in a physical dimension. It is the acknowledgement that the world isn't perfect, and designs needs to account for that. A plastic cup holder in...

## Using an AI Agent to Investigate Mobile Regressions with Git Diffs

DevFeed: [Using an AI Agent to Investigate Mobile Regressions with Git Diffs](<https://devfeed.tech/articles/git-bisect-for-mobile-is-dead-27340.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/git-bisect-for-mobile-is-dead>)

Author: Matt McKenna

Published: 2025-10-29T11:00:22Z

Content type: opinion

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [Git](<https://devfeed.tech/topics/git.md>), [AI Agent](<https://devfeed.tech/topics/ai-agent.md>), [debugging](<https://devfeed.tech/topics/debugging.md>), [Language models](<https://devfeed.tech/topics/language-models.md>)

Tags: [agent](<https://devfeed.tech/tags/agent.md>), [agentic-ai](<https://devfeed.tech/tags/agentic-ai.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-agent](<https://devfeed.tech/tags/ai-agent.md>), [android](<https://devfeed.tech/tags/android.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [git](<https://devfeed.tech/tags/git.md>), [ios](<https://devfeed.tech/tags/ios.md>), [mobile-development](<https://devfeed.tech/tags/mobile-development.md>), [regression](<https://devfeed.tech/tags/regression.md>)

### AI overview

The article argues that AI agents can help investigate difficult mobile regressions by analyzing the diff between a known-good and known-bad commit. This can reduce the need for repeated builds required by git bisect, while still requiring developers to test and confirm suspected causes.

### Source excerpt

I love git bisect If you don't know it, git bisect is basically a binary search for bugs. You have an issue that did not exist before, so you grab two commit hashes, one good and one bad, and build, repro, build, repro until you find the exact commit...

## Practical Ways to Use AI in a Mobile Development Workflow

DevFeed: [Practical Ways to Use AI in a Mobile Development Workflow](<https://devfeed.tech/articles/microdosing-ai-for-mobile-dev-27346.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/microdosing-ai-for-mobile-dev>)

Author: Matt McKenna

Published: 2025-10-27T11:00:20Z

Content type: article

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [Mobile](<https://devfeed.tech/topics/mobile.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Development](<https://devfeed.tech/topics/development.md>), [AI Agent](<https://devfeed.tech/topics/ai-agent.md>), [Android](<https://devfeed.tech/topics/android.md>), [Code review](<https://devfeed.tech/topics/code-review.md>), [CI/CD](<https://devfeed.tech/topics/cicd.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [modules](<https://devfeed.tech/topics/modules.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-agent](<https://devfeed.tech/tags/ai-agent.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [android](<https://devfeed.tech/tags/android.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [ci-cd](<https://devfeed.tech/tags/ci-cd.md>), [code-review](<https://devfeed.tech/tags/code-review.md>), [compose](<https://devfeed.tech/tags/compose.md>), [dev](<https://devfeed.tech/tags/dev.md>), [development](<https://devfeed.tech/tags/development.md>), [gemini](<https://devfeed.tech/tags/gemini.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [modules](<https://devfeed.tech/tags/modules.md>), [readability](<https://devfeed.tech/tags/readability.md>)

### AI overview

A developer describes practical uses of AI in mobile development, including locating UI strings from screenshots, performing preliminary code reviews, identifying unused resources, and generating regular expressions for file searches. The article presents AI as a tool for workflow support rather than code replacement.

### Source excerpt

I've been experimenting with small, practical ways AI can fit into my daily mobile development. Not to write code for me, but to accelerate the "in-between" steps of my workflow. These little uses aren't super flashy. They just smooth out some pain p...

## Kotlin type aliases versus functional interfaces for debuggable, distinct handler types

DevFeed: [Kotlin type aliases versus functional interfaces for debuggable, distinct handler types](<https://devfeed.tech/articles/the-case-of-the-missing-handler-27350.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/the-case-of-the-missing-handler>)

Author: Matt McKenna

Published: 2025-08-28T04:00:22Z

Content type: tutorial

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [interfaces](<https://devfeed.tech/topics/interfaces.md>), [debugging](<https://devfeed.tech/topics/debugging.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [code](<https://devfeed.tech/tags/code.md>), [debugger](<https://devfeed.tech/tags/debugger.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [function](<https://devfeed.tech/tags/function.md>), [generic](<https://devfeed.tech/tags/generic.md>), [interface](<https://devfeed.tech/tags/interface.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>)

### AI overview

This Kotlin article explains that a type alias for a function type does not create a distinct type, so its name can disappear from debugging and stack traces. It recommends functional interfaces when type identity, discoverability, distinct callbacks, and simple testing fakes are important.

### Source excerpt

Our story begins with a clean line of Kotlin: typealias Handler = (result: Result) -> Unit It looks innocent. Give a function type a name and tidy up the signatures, great! Then a bug hits. The Handler is gone in the debugger and in stack traces onl...

## Stop Calling AI a "Junior Engineer"

DevFeed: [Stop Calling AI a "Junior Engineer"](<https://devfeed.tech/articles/stop-calling-ai-a-junior-engineer-27349.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/stop-calling-ai-a-junior-engineer>)

Author: Matt McKenna

Published: 2025-07-29T17:59:05Z

Content type: opinion

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [Language models](<https://devfeed.tech/topics/language-models.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [feelings](<https://devfeed.tech/tags/feelings.md>), [junior](<https://devfeed.tech/tags/junior.md>), [llm](<https://devfeed.tech/tags/llm.md>), [llms](<https://devfeed.tech/tags/llms.md>), [mentorship](<https://devfeed.tech/tags/mentorship.md>), [software-development](<https://devfeed.tech/tags/software-development.md>)

### AI overview

This opinion argues that describing AI as a "junior engineer" is an unfair and misleading analogy. It contrasts human junior engineers' ability to learn, develop judgment, understand context, and grow through mentorship with the limitations the author attributes to language models.

### Source excerpt

There's a common shorthand in tech circles: "Treat your AI like a junior engineer." It's meant to set expectations that you need to give it clear tasks, review its work, don't let it push to prod, etc, etc. But the analogy doesn't sit right with me. ...

## Ready Layer One: Intro to the Model Context Protocol

DevFeed: [Ready Layer One: Intro to the Model Context Protocol](<https://devfeed.tech/articles/ready-layer-one-intro-to-the-model-context-protocol-27348.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/ready-layer-one-intro-to-the-model-context-protocol>)

Author: Matt McKenna

Published: 2025-07-23T15:17:12Z

Content type: tutorial

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [Model Context Protocol (MCP)](<https://devfeed.tech/topics/model-context-protocol-mcp.md>), [adb](<https://devfeed.tech/topics/adb.md>), [Android](<https://devfeed.tech/topics/android.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [SDK](<https://devfeed.tech/topics/sdk.md>)

Tags: [adb](<https://devfeed.tech/tags/adb.md>), [agent](<https://devfeed.tech/tags/agent.md>), [ai](<https://devfeed.tech/tags/ai.md>), [android](<https://devfeed.tech/tags/android.md>), [code](<https://devfeed.tech/tags/code.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [llm](<https://devfeed.tech/tags/llm.md>), [mcp](<https://devfeed.tech/tags/mcp.md>), [mcp-server](<https://devfeed.tech/tags/mcp-server.md>), [model-context-protocol](<https://devfeed.tech/tags/model-context-protocol.md>), [permissions](<https://devfeed.tech/tags/permissions.md>), [sdk](<https://devfeed.tech/tags/sdk.md>), [tool](<https://devfeed.tech/tags/tool.md>)

### AI overview

A video introduction to the Model Context Protocol using the Kotlin SDK, with a demonstration of an AI agent controlling Android devices through ADB. It also covers building an ADB tool and automating device-permission tasks.

### Source excerpt

Discover how the Model Context Protocol (MCP) connects AI to the real world. We'll explore the Model Context Protocol using the Kotlin SDK letting an Agent control Android devices with ADB! We'll live code a new ADB tool and demo how AI Agents and th...

## GitHub Merge Strategies: A Visual Explanation

DevFeed: [GitHub Merge Strategies: A Visual Explanation](<https://devfeed.tech/articles/github-merge-strategies-a-visual-explanation-27341.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/github-merge-strategies-a-visual-explanation>)

Author: Matt McKenna

Published: 2025-03-01T12:00:36Z

Content type: tutorial

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [GitHub](<https://devfeed.tech/topics/github.md>), [Pull Request](<https://devfeed.tech/topics/pull-request.md>), [Git](<https://devfeed.tech/topics/git.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [commit](<https://devfeed.tech/tags/commit.md>), [comparison](<https://devfeed.tech/tags/comparison.md>), [git](<https://devfeed.tech/tags/git.md>), [github](<https://devfeed.tech/tags/github.md>), [pull-request](<https://devfeed.tech/tags/pull-request.md>)

### AI overview

This article visually explains three GitHub pull request merge strategies: merge commits preserve the full branch history and add a merge commit, squash merges combine the branch into one commit, and rebase merges retain individual commits while creating a linear history and new commit hashes.

### Source excerpt

Discussion started up at work this week about the different merge strategies available in GitHub. I looked around online to see if I could find a good article to send to share a quick snapshot of the differences represented visually and didn't find a...

## Just Enough Optimization

DevFeed: [Just Enough Optimization](<https://devfeed.tech/articles/just-enough-optimization-27345.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/just-enough-optimization>)

Author: Matt McKenna

Published: 2025-02-04T18:37:32Z

Content type: opinion

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [Optimization](<https://devfeed.tech/topics/optimization.md>), [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>)

Tags: [general-advice](<https://devfeed.tech/tags/general-advice.md>), [general-programming](<https://devfeed.tech/tags/general-programming.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [performance](<https://devfeed.tech/tags/performance.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>)

### AI overview

The article argues that effective optimization often means removing unnecessary work rather than introducing complex algorithms or caching. It recommends solving current user and business problems, releasing useful software, and using feedback to guide future improvements instead of optimizing prematurely for hypothetical scale, bugs, or needs.

### Source excerpt

One of the most effective ways to improve software performance isn't complex algorithms or fancy caching techniques. Often, it's simply removing unnecessary work. If a piece of code doesn't need to run, it won't consume any resources. This principle ...

## Why Engineers Should Replace "Easy" and "Hard" with More Specific Language

DevFeed: [Why Engineers Should Replace "Easy" and "Hard" with More Specific Language](<https://devfeed.tech/articles/hardly-easy-27342.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/hardly-easy>)

Author: Matt McKenna

Published: 2025-01-29T12:00:32Z

Content type: opinion

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [context](<https://devfeed.tech/topics/context.md>), [bug](<https://devfeed.tech/topics/bug.md>)

Tags: [bug](<https://devfeed.tech/tags/bug.md>), [context](<https://devfeed.tech/tags/context.md>), [feelings](<https://devfeed.tech/tags/feelings.md>), [general-advice](<https://devfeed.tech/tags/general-advice.md>), [general-programming](<https://devfeed.tech/tags/general-programming.md>), [inclusive](<https://devfeed.tech/tags/inclusive.md>), [scope](<https://devfeed.tech/tags/scope.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>), [team](<https://devfeed.tech/tags/team.md>)

### AI overview

The article argues that engineers should avoid describing tasks as merely "easy" or "hard." More specific terms such as "small in scope," "straightforward," or "demanding" provide useful context and can help teams communicate more inclusively.

### Source excerpt

Words like "easy" and "hard" can be surprisingly exclusive. Telling someone a task is easy can make them feel ashamed or inadequate if they struggle, while simply labeling something hard fails to provide the context engineers need to understand the t...

## A Curious Case of Mistaken Identity: How Lambdas Break Data Class Hashing

DevFeed: [A Curious Case of Mistaken Identity: How Lambdas Break Data Class Hashing](<https://devfeed.tech/articles/a-curious-case-of-mistaken-identity-how-lambdas-break-data-class-hashing-27333.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/a-curious-case-of-mistaken-identity>)

Author: Matt McKenna

Published: 2024-11-14T21:44:31Z

Content type: tutorial

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [hashing](<https://devfeed.tech/topics/hashing.md>), [hash](<https://devfeed.tech/topics/hash.md>), [consistency](<https://devfeed.tech/topics/consistency.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [behavior](<https://devfeed.tech/tags/behavior.md>), [class](<https://devfeed.tech/tags/class.md>), [data-class](<https://devfeed.tech/tags/data-class.md>), [hashcode](<https://devfeed.tech/tags/hashcode.md>), [hashing](<https://devfeed.tech/tags/hashing.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [maintenance](<https://devfeed.tech/tags/maintenance.md>)

### AI overview

This Kotlin article explains why data class instances containing lambdas may compare as unequal and produce different hash-based behavior. Each lambda instance has a distinct identity, so the article recommends excluding the callback from equality and hashCode calculations, while noting the resulting maintenance cost.

### Source excerpt

Introduction: The Scene of the Crime It was a dark and stormy night. My hands were flying across the keys when suddenly the codebase began to exhibit strange behavior. Hashes, which once returned the same values for identical objects, suddenly became...

## Hue-manize Your Android Apps: Develop for Color Blindness

DevFeed: [Hue-manize Your Android Apps: Develop for Color Blindness](<https://devfeed.tech/articles/hue-manize-your-android-apps-develop-for-color-blindness-27343.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/hue-manize-your-android-apps-develop-for-color-blindness>)

Author: Matt McKenna

Published: 2024-10-17T04:00:00Z

Content type: article

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [android-apps](<https://devfeed.tech/topics/android-apps.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-apps](<https://devfeed.tech/tags/android-apps.md>), [apps](<https://devfeed.tech/tags/apps.md>), [conference-sessions](<https://devfeed.tech/tags/conference-sessions.md>), [develop](<https://devfeed.tech/tags/develop.md>), [droidcon](<https://devfeed.tech/tags/droidcon.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

The article discusses how Android apps appear to people with color blindness or low vision and describes the impact of inaccessible apps on daily life.

### Source excerpt

Have you ever wondered how your Android app appears to someone with color blindness or low vision? We will share firsthand how inaccessible apps impact daily life. https://player.vimeo.com/video/1017418233?autopause=0&autoplay=0&color=00adef&portrait...

## Designing for Disconnection: The Mental Model of Offline Apps

DevFeed: [Designing for Disconnection: The Mental Model of Offline Apps](<https://devfeed.tech/articles/designing-for-disconnection-the-mental-model-of-offline-apps-27339.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/designing-for-disconnection-the-mental-model-of-offline-apps>)

Author: Matt McKenna

Published: 2023-10-06T04:00:00Z

Content type: article

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [App](<https://devfeed.tech/topics/app.md>), [Android](<https://devfeed.tech/topics/android.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [apps](<https://devfeed.tech/tags/apps.md>), [articles](<https://devfeed.tech/tags/articles.md>), [conference-sessions](<https://devfeed.tech/tags/conference-sessions.md>), [developers](<https://devfeed.tech/tags/developers.md>), [droidcon](<https://devfeed.tech/tags/droidcon.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [offline](<https://devfeed.tech/tags/offline.md>)

### AI overview

The article discusses designing Android apps for offline conditions, focusing on how developers should think about empty and error states when users have unreliable network access.

### Source excerpt

In today's interconnected world we developers rely on our users to have strong networks for the best app experience. Empty states and error states perforate our designs and view systems. https://player.vimeo.com/video/869512170?autopause=0&autoplay=0...

## Behind the Screen: How People Use Android Across Devices

DevFeed: [Behind the Screen: How People Use Android Across Devices](<https://devfeed.tech/articles/behind-the-screen-the-humans-who-use-our-code-27335.md>)

Original publisher: [Read original article](<https://blog.mmckenna.me/behind-the-screen-the-humans-who-use-our-code>)

Author: Matt McKenna

Published: 2022-11-15T05:00:00Z

Content type: article

Language: en

Sources: [Matt McKenna](<https://devfeed.tech/sources/matt-mckenna.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Operating system](<https://devfeed.tech/topics/operating-system.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [car](<https://devfeed.tech/tags/car.md>), [compose](<https://devfeed.tech/tags/compose.md>), [conference-sessions](<https://devfeed.tech/tags/conference-sessions.md>), [devices](<https://devfeed.tech/tags/devices.md>), [droidcon](<https://devfeed.tech/tags/droidcon.md>), [fitness](<https://devfeed.tech/tags/fitness.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>)

### AI overview

The article discusses Android's widespread use across user-facing devices, including car displays, airplane entertainment systems, fitness gear, and point-of-sale systems.

### Source excerpt

Android has been around for over 10 years, and has now become the most used operating system in the entire world. It is the go to operating system for all kinds of user facing devices. From car displays and airplane entertainment systems, to fitness ...