** ⚠️ Warning:** This is a work in progress and it is everyone’s responsibility to contribute to this page. Figuring out the best use cases for Devin is an ongoing process, and we need your help to make it comprehensive. Please contact the Nomey team on Slack if you have any ideas or suggestions for use cases.

Plan Ahead

Getting Devin to outline his plan before he starts working on a task provides 2 key benefits;
  1. It allows you to see if he has understood the task correctly and bail early if he did not.
  2. He pre-fills his context with the information he needs to complete the task.

Code Reviews

Devin can review code to a much higher standard than he can write it (than most humans can write it tbh). As long as he is given clear instruction as to what metrics he is judging the code on, he can provide valuable feedback on code quality, style, and best practices. There is a playbook for this; !review. He will provide a comprehensive review of the code, including suggestions for improvement.

Easily defined changes

Devin is great at making changes to code that are well defined. The task itself can get quite complex, but you need to be able to write down the task in a way that is clear and unambiguous. If you can do that, Devin can usually handle it.

Horizontal changes

Devin is great at making changes that are horizontal in nature, such as replacing all instances of X with Y, or adding a toString method to all classes - these kinds of annoyingly time-consuming tasks are perfect for Devin. He could probably handle a lib update with breaking changes pretty good (though I haven’t tested this!).

Boilerplate

Devin can generate boilerplate code for you. This is useful for setting up a branch before your start. Describe what you need, get him to PR it, pull that PR and start working on it. This is especially useful for setting up new features, components, or systems that require a lot of boilerplate code.

Documentation

Devin can generate documentation for you. This is useful for generating API documentation, README files, Storybook stories, or any “Just describe what is already there” style documentation.

Test Cases

Devin can generate test cases for you. This is only useful for generating “it does what it says on the tin” style tests, like unit tests for CRUD. It is not so useful when a component or system has complex business logic, as he will not be able to understand the business logic and will not be able to write tests for it.

Repeated patterns

He is very good at identifying repeated patterns in the codebase and can implement things that follow that pattern, or identify where the pattern is not being followed.

Isolated classes (and sometimes systems!)

If you require a class or set of classes that are isolated from the rest of the codebase, Devin can be utilized to create these. Since he is not aware of the rest of the codebase, he can create classes that are self-contained and do not rely on any business logic or other classes. This is useful for creating utility classes, data structures, middleware systems, or any other closed-loop system that does not require knowledge of the rest of the codebase. You will need to provide a LOT of details about the class and its purpose, and may need to get him to submit a PR, then use the !review command to get him to identify the issues, then instruct him to fix them. This is a bit of a pain, but exemplifies the asynchronous nature of Devin. Can’t you just include the details of the !review command in the initial request? Nope. Not really. It just work better this way.

How other companies use Devin