The subjects of the personal software process and agile software process are much deeper than I initially thought. There are more agile frameworks than I was aware of and many different ways that people implement those frameworks. For instance, Scrum is a set of principles that can be interpreted in many different ways, and Extreme Programming is the same. Even after reading a few papers, I have not come to a point where I feel I understand enough that I can jump in.
My research has pointed me towards a few articles and books that I intend to start going through as time permits. As I read and learn more from those books and other places, I will incorporate them into the plan described below. Below is a list of the reading material I have identified.
Although there is a lot more to learn, I have decided to implement a few things while I am learning. Test-driven development is easy to implement immediately, and I find that a full set of tests is very empowering while programming. I plan to mimic a daily stand up/scrum meeting by writing a short entry in a logbook after a day of work on a project. When I plan my projects, I will write user stories, and then break those stories into smaller chunks. The actual work will be organized into sprints like in Scrum, and I will write a blog post at the end and at the start of the sprint.
The first step in my process will be to create all the user stories that I want to develop and then break them into chunks, which I call ‘small stories’. All the ‘small stories’ and ‘large stories’ will be given a priority and an estimated time. I will then choose a selection of ‘small stories’ to be completed in the next month, and that will be my sprint. The estimated time and priority will guide me in choosing which ‘small stories’ to select. I will be dedicating 15 to 20 hours per week developing my projects, until I get a job, so that will be the box that estimated time would be put in. During the sprint, I will be recording how much time each ‘small story’ takes me to complete so that I can better estimate the new small stories.
The blog post before a sprint will serve as the planning phase of my process. I will outline what I want to get accomplished and how long I think it will take me. Hopefully, it will also serve as a log that will guide me in the future. The blog post after the sprint will serve as a retrospective. I will reflect on what went right, what went wrong, and whether I completed my goals. If I did not achieve my goals, I would figure out what prevented me and how to ensure it does not happen again. Both of the described blog posts are for my own consumption, but I will be posting them on my personal website anyways.
Test-driven development is a must for me. I tend to make a lot of silly mistakes in my code, and defining a couple of tests before I start coding gives me confidence that those mistakes will be caught before I commit the code. While tests will be added before I start writing the code, I will also add tests after if I find any other cases that need to be covered. Whenever I go to commit files, I will run my test suite before to check if everything is working properly.
To help me implement these steps, I have made a template folder for planning that can be found at this link: https://drive.google.com/drive/folders/1FFN5SuHHF3d4GHpuDTKsyxumX4Rjw_0a?usp=sharing. As I read and learn more, I will refine the templates and processes. In addition to everything previously stated, I plan to talk to my friends about my code more often in hopes that I can learn from them as well. Later I will post about my new method to develop code for my projects!