When I started learning how to code in my teens without a doubt I was quite unorganized. My first real project was a game demo, A 3D hack a slash adventure game, in which I chose to create all the assets. As a know nothing teen I must confess I didn’t get far. But that experience gave me a life long lesson that I have stuck to for over two decades now, and that is, stay organized.
The Clutter
When I started the game demo I had created a folder within the Documents folder to hold all my assets and code. At a certain point I became quite obsessed with creating as many 3d models as possible for every permutation of clothes and monsters. It wasn’t that difficult to do because early on I had decided that all enemies would be humanoid. With the differentiation being whether they were human, werewolf lizard man, etc. That folder I had created quickly filled up with models of different clothing options, hair styles, genders. I had several hundred models in the one folder and selecting the correct model to work on at a given time could sometimes take up to a minute. I had also failed to name the models in a manner that would differentiating the files easier.
The more I created the more tedious it became. Eventually it was too much. I needed a solution and it was quite easy. I started creating sub-folders. The concept is so easy I was annoyed with myself that I didn’t start out the project with that in mind. Each folder was separated by species then gender the clothing. Hair and other cosmetics were keep all in the same folder.
Far from being anal. I began to keep all my media organized in this fashion. All my music in a folder that was further organized by album with the name of the artist as the first string so that all the albums would group together. Television series in another folder with sub-folders for each series and further sub-folders for each season. I’m sure you get the picture.
When starting my professional career I maintained the same principles. It only felt natural by that point. But it came as a surprise to find that the majority of my colleagues had very little in the way of organizational skills. Even among the most experienced.
The Order
It is not my intention to be judgemental. Seeing a desktop cluttered with files folders without any discernable pattern along with a Downloads folder crammed with obsolete files does not invoke a compulsive drive within. For me it is a matter of practicality. I have witnessed first hand where a developer or engineer has struggled to find the repo folder on their local and found it easier to inspect the code on GitHub. In other instance I have witnessed developers with so many tabs open in their browser that it was easier to open a new tab and navigate to the page we were just looking at than to identify the tab amongst the dozens.
It is not for me to tell you what the structure should be for organizing your work environment, but I do insist that a structure should be in places. An organized environment leads to an organized mind. With the amount of context switching that I do on a near daily basis, structure is a must. Being responsible for multiple projects on multiple scrum teams and they all believe there current problem is most pressing issue there can be. Having my work environment well organized allows me to almost immediately start engaging them with the problem, rather than me trying to find where the resources are that they wish to discuss.
The Principles
While I do emphasis that I do not intend to tell you how to structure your work environment, there are several principles I would like to share with you.
As a DevOps Engineer I predominantly work in bash. For this reason I do not ever use folder names that contain white spaces. The reason being that should a script ever require the use of the absolute file path, it will fail. Many companies choose to setup the work laptop so that the desktop is a folder on One Drive. Unfortunately the One Drive folder name contains a white space. So it is my recommendation that the desktop and any other sub-folder of One Drive not be used by DevOps Engineers or any one intending to run shell scripts.
With that out of the way. I set up a general folder for all my projects within the user folder. This folder is then treated as a sort of root directory. Starting from here I would suggest creating folders for each project or scrum that you are a part of. Within that folder is where I keep the repo folders. The underlying principle for this strategy is that when pulling all the repos from all the projects you are working on into one directory, there will come a time when you will have difficulties identifying the repos you are currently working on. It is best to maintain a folder structure which contains no more than 10 repos.
Any file that is no longer of use should be deleted. To ensure that no important files are lost, emptying the trash bin should only happen quarterly at the earliest. When the downloads folder gets to cluttered I would suggest making it a habit of removing files and folders from the trash bin you are confident can be permanently deleted. This way it is easier to to determine if the trash contains files you would rather hold on to.
For web browsing I believe it is best to use the organizational tools that are provided within the browser it self. Firefox has an extension that allows the containerization of tabs. Each tab container is colour coded. This is a great way of grouping tabs together in a easily recognizable manner. Edge has a built in grouping feature as well. Another strategy is having multiple browsers and using each for a specific task or group of services. I personally use all of these strategies, and I have rarely ever lost track of a tab.
Conclusion
This is probably my most preachy article to date. I have no intention of topping it. I won’t lie it does frustrate me to watch people waste time searching for things that could have easily been found had they been better organized. Again this is not out of compulsion but because I know how easy it is to loose your train of thought. That moment you wasted looking for the file could lead to the idea that you had for solving a problem vanishing for several minutes.
I do concede that my advice will not be beneficial for everyone. There will always be those people who accomplish more being in a mess. But I honestly doubt that description applies to the majority of us. However you choose to establish a structure to you workflow and environment. I hope my words have at least inspired you to do so.