I’ve been thinking a lot about how I develop projects and what makes my projects uniquely mine. As of November 2023, I have four sites that I am actively working on: Binary Moon, Brush Ninja, Ninja Puzzles, and WPBriefs. Despite working mostly in the evenings and being a one-person team, I manage to update all these sites every week (often multiple times). How do I do it? Let me share my approach with you.
Release Early, Release Often
Perfect is the enemy of good
My strategy is to release early and release often. This means adopting an iterative development process where I continuously refine and improve my projects. Rather than waiting until everything is perfect before releasing it. I believe in getting something out there as soon as possible. This allows me to gather feedback from users and make useful adjustments along the way; as opposed to guessing what would be useful and spending a long time making something people don’t want.
In addition to iterative development, I keep everything as minimal as possible. Not only in terms of functionality but also from a technical standpoint. Why? Because I want development to be quick and easy. By stripping away unnecessary complexities, I can focus on delivering value efficiently.
My website designs tend to be almost brutal. I use ElementalCSS for all my projects and try to steer clear of fancy animations and other unnecessary bells and whistles.
Automation is Key
Automation plays a vital role in my workflow. Whenever possible, I automate repetitive tasks so that they don’t consume unnecessary time and effort. For instance, I build small local tools that help speed up various processes. These tools act as shortcuts, enabling me to complete work more rapidly without compromising quality.
For example I have created my own code for generating related posts. Because I have a consistent tech stack I can use exactly the same code for all my sites, and any improvements I make will automatically propogate across all projects.
Consistency is essential when working on multiple projects simultaneously. One example of this is that I name things consistently across different projects. One example is that all of my projects have a deployment script called
deploy.sh. By standardizing aspects of my workflow, I don’t have to remember how to do similar tasks across projects. In this instance deploying a project is the same regardless of which project I am working on.
Stick to What Works
Using the same boring technology stack across all projects has proven beneficial for me. It saves time by allowing me to leverage my existing knowledge and experience. It allows me to reuse code easily. Additionally, it ensures consistency in the codebase, making maintenance and updates more straightforward.
My documentation comprises lots of code comments. I make sure all functions/ methods have docblocks and there are comments throughout the codebase. This ensures I can jump between projects and get up to speed quickly.
Harnessing the Power of AI
Modern tools like AI offer incredible potential for boosting productivity. While I don’t rely on AI to do the work for me, I use it to my advantage by leveraging its capabilities to find shortcuts and speed up certain tasks.
By embracing technology, I can complete the boring work more quickly and focus on the things I enjoy while still maintaining control over the creative process.
With these strategies in mind, I’ve crafted a manifesto for progressive software development:
A Manifesto for Progressive Software Development
- Start Small, Improve Fast: Deliver the basic user experience first, then make quick improvements.
- Share Resources Wisely: Use resources smartly across projects for efficiency and consistency.
- Focus on Users: Puts users first, align design and features to their needs.
- Be Unique, Not Trendy: Prioritize familiar tools over short-lived trends for speed and efficiency.
- Always Learn: Keep growing personally and professionally.
- Keep It Simple: Opt for simple design, features, and language to boost user understanding.
- Document with Purpose: Create clear and strategic documentation for smooth collaboration and onboarding.
By adhering to these principles, I believe I can create software that is efficient, user-friendly, and adaptable to the ever-changing needs of my users.