The first release of any my dev cycle feels like garbage. Whether it’s integrating a new api or library to building on an idea that’s not all the way flushed out, I often find my first iteration of a project gets thrown out.
This post describes some of the reasons why my first attempt on a proof of concept application isn’t a masterpiece.
Unfamiliarity
Being unfamiliar with tools and new libraries has forced me to read more documentation and learn more about deploying multiple types of applications. This unfamiliarity has ultimately made me look at projects in a new way.
The unfamiliarity with libraries has made my applications delicate rather than hardened, and I often find myself searching deep in github issues on projects attempting to fix mangled together parts of an application. By the time I am in production, most of the tools are mangled together and on the edge of breaking.
Library Versions featuring Brokenness
I often stay very up to date on library versions and pull most source code from repositories right off of github. With all these dependencies on other applications being tossed around, I sometimes find myself and my applications in a broken state because of dependency issues.
The most recent time I ran into an issue was upgrading a ruby project and running into some backwards compatability problems with methods. Methods were deleted that my application used and I essentially downgraded back to the older version to get the application back on track.
Perfection
I have a high standard for production applications, and I prefer to have most of my application tested before tossing it into the wild. It also helps to have a web app with decent views, so I tend to spend a lot more time working on frontend pieces than I would prefer.
This often holds the processes of releases up as I like to ensure the application works before I push it out the door.
Pipelines
I was bad about pipelines in the past and didn’t truly value them for what they do and how much time they save compared to scp
-ing code to a machine and praying a deploy works and the libraries are the same. Looking ahead to containres, I now see the value in containerized releases. I am able to push my application to a container and run it on any machine. (Containers of today are the Java of Yesterday - Write Once, Run Anywhere)