Table of contents
- Optimize your development process by focusing on coherent coding standards and leveraging tools like linters and auto formatters for consistency.
- Automate your workflow with GitHub Actions and stay secure by never storing secrets in your repo.
- Streamline your workflow with Notion's versatile views and automate tasks to save time and boost productivity.
- We grouped all our recurring meetings into two mornings a week, freeing up the rest of the week for deep work and creativity.
Optimize your development process by focusing on coherent coding standards and leveraging tools like linters and auto formatters for consistency.
How optimal is your development process really, whether you're in a team or working solo? This video has tips that are going to make a massive difference. To show you what I mean, I'll go over the development process we use at Aron Codes. There are a lot of technical focus things you can and should do as a development team, such as defining code conventions and so on. I'll mention a few of those things, but I'll mainly cover organizational aspects of software development in this video. Not many people talk about this, but doing this right has a huge impact.
I've developed lots of products and tools over the last 10 years and have worked with many developers in different teams. The process we currently use at Aron Codes is based on that experience and has been improved a lot over the years. I feel it's now at a point where our approach works really well. We're a pretty small team, so what we do might not work for you. We're not using a standard agile method such as Scrum; in fact, we're probably doing lots of things wrong, but it works for us. We are optimizing for a very particular thing, and this choice has a huge impact on how we work together. In my opinion, many development teams can benefit from doing that.
Before I talk about this, I'd still like to quickly go over a few of the technical things you should do. The first and most important thing you have to do is make sure your coding style is coherent between team members. You're going to work together much more effectively, and your shared code is going to be much easier to read. Even if you're just working as an individual developer, it's useful to follow some sort of standard. That way, whenever you read back code that you wrote three or four months ago, it's going to be much easier for you to read and work on it because you follow the same standard as you always do. A good place to start is the Google Python Style Guide.
You can see if I open the table of contents, there are lots of things here about how to write Python code and do it in a consistent way. There are things ranging from how you should use exceptions, which is explained in this section, and lots of other things related to Python coding style, such as how to use whitespace. Also, there are many tools that you can use to improve your consistency automatically. For example, use a linter to detect issues in your code while you're writing it. If you're using VS Code, there is a built-in linter for Python. You can also use an auto-formatter such as Rough or Black to make sure that basic formatting rules have been applied to your code. Finally, use a standard configuration and setting in all your projects, and if you work in a team, you can share that between your team members.
Another thing that helps to improve consistency is doing regular code reviews. Always make sure you leave some room for refactoring and minor improvements in your schedule. I find a good allocation is to spend about 5 to 10% of your time per week on refactoring and making minor improvements. Then, another more technical thing is to make sure that you have a robust CI/CD pipeline. Make sure that you've built some tests and use a development architecture setup so you can test things before pushing them to production.
Automate your workflow with GitHub Actions and stay secure by never storing secrets in your repo.
At Iron Codes, we store all our code in Git and report stories on GitHub. This is also where we run our CI/CD pipelines. GitHub has something called GitHub Actions that we use for this purpose. We don't just use this for deployment; we also use it for other tasks. For example, in the examples repository that contains all our code examples, you will see some workflows. Specifically, there's a YML file that specifies that we should do formatting with Ruff whenever we push something to the main branch. This ensures that we automatically run a code auto formatter whenever we push something to main.
Another important aspect is to follow best practices for security. This includes not storing secrets in your repository, not storing unencrypted passwords in a database, and so on. Security is something that needs to be considered before, during, and after design and development, and it should be incorporated into your workflow. There are many other topics to discuss, such as versioning best practices, how to design a software system, how to properly make a pull request, and so on. If you'd like me to do a more in-depth video about these technical aspects, let me know in the comments.
At Iron Codes, for most organizational tasks, we use Notion. For example, we have written SOPs for many of the things we do in our company. Here is an example of an SOP we are currently writing that contains guidelines for software development. It includes sections about high-level design approaches and more low-level aspects like specifying components and thinking about data structures. These SOPs help us work consistently by keeping track of various tactical elements related to development and implementation.
In addition to these SOPs, we also use a Kanban board to track our progress on various projects. I personally appreciate the simplicity of Kanban as it provides a lot of flexibility. We don't just use Kanban boards for software development but for everything else we do as well. For instance, we use a Kanban board for all our YouTube videos. They go through various stages: a backlog for ideas, a research phase for background information, a writing phase for script creation, a review stage for edits and feedback, and then production.
Streamline your workflow with Notion's versatile views and automate tasks to save time and boost productivity.
The process begins with content that is ready to be published on YouTube. Once published, the card is moved to the appropriate section. Notion is particularly useful for this as it allows for different views, such as the production pipeline and a post-production view that tracks the stages from editing to publication prep to published. Other views like table view or calendar view can also be useful.
For managing multiple online courses, a Kanban board is used to track tasks. Feedback from course participants is regularly reviewed, and improvements are planned and implemented to ensure each course is up-to-date. Additionally, there is a Kanban board for company-wide projects, such as researching new platforms or conducting postmortems after course launches to identify areas for improvement.
Several ongoing development projects are also in progress. One such project is the Iron Codes automation tasks, which aims to automate processes like processing course sales and generating invoices. Another project involves building a simple portal for companies to purchase courses more easily. Smaller projects include Flick, a hobby project to improve video editing collaboration using Rust, and Brar, a library to generate captions and translations for YouTube and course videos, which will soon be open-sourced.
The most significant project currently is Learn Tail, an AI-based learning platform designed to help users practice more and learn faster. This platform features numerous quizzes on topics ranging from Python to data science, machine learning, software design, and architecture. Users can search for quizzes or have them generated on the fly using AI. Continuous improvements are made to the platform, and feedback is encouraged.
We grouped all our recurring meetings into two mornings a week, freeing up the rest of the week for deep work and creativity.
Recurring meetings are a staple in many organizations, encompassing daily standups, weekly marketing check-ins, and quarterly review meetings, among others. Additionally, there are one-off meetings such as brainstorming sessions about new company directions, preparing for sales campaigns, or discussing potential new software features. Personally, I don't enjoy meetings, so I've worked diligently to eliminate as many as possible. Furthermore, we implemented a scheduling optimization that has saved us a significant amount of time. Surprisingly, this method is straightforward and rarely discussed.
Before delving into the specifics of this optimization, let me outline some common practices we employ. Firstly, we minimize one-on-one meetings and favor asynchronous communication. We use Teams for chatting or write comments in Notion, our other primary tool. If you also prefer asynchronous communication, consider joining my free Discord server (link below or in the video description). We avoid the back-and-forth of planning meetings by simply scheduling them and ensuring everyone is available, which we can check in Teams. If a team member feels they don't need to attend or can't make it, they simply decline the invitation.
Secondly, we limit our recurring meetings because they can easily become overwhelming. For our Learn Till project, we use a monthly Sprint structure with a mid-Sprint progress check and an end-of-Sprint planning meeting. That's it—no daily standups. If we need to discuss something specific during the week, we use chat or comments in Notion, or if necessary, schedule a one-off meeting for detailed discussions. We maintain a carefully curated number of other recurring meetings, including weekly marketing meetings, bi-weekly Sprint meetings, monthly check-ins with team members, and quarterly strategy meetings.
To optimize all recurring meetings in our company, we made a significant change that has had a massive impact. Depending on your company's size, you might implement this fully or partially. We designated one person to be responsible for scheduling and maintaining all recurring meetings—that person is me. This approach ensures one person has an overview of all meetings and can make necessary adjustments. We grouped all our recurring meetings to avoid having them spread throughout the week. We designated Mondays and Thursday mornings as meeting times, so most of our recurring meetings occur during these two mornings. Even with this grouping, these mornings are not fully booked every week, leaving some empty space.
We have a rule that if someone needs to schedule a one-off meeting, they first try to book it on either Monday or Thursday morning. Since our schedules are synchronized, this is usually possible. If not, we use Monday and Thursday afternoons as a fallback. Importantly, the rest of the week is off-limits for meetings. This organization has massively cleaned up our schedule, allowing us to optimize for deep work. As a creative team, we need time for deep work to create engaging YouTube content and in-depth educational material. This structure fosters trust and responsibility within the team, reducing the need for frequent check-ins.
This approach has brought a sense of calmness to our company and provided maximum freedom for everyone to explore new ideas and work meaningfully. I hope this video has given you some ideas to improve your development process or implement in your team. I'd love to hear from you—how do you organize your work? Do you have any suggestions or tips to share? Let me know in the comments. This video mainly covered our development process organization. If you're interested in learning how we build, deploy, and host software, check out the next video. Thanks for watching, and see you next time!