Category Archives: Week 1

Is Agile Still Effective?

I came across an article titled “‘It’s time to question agile’s cult following’: Doubts cast on method’s future, with 65% of projects more likely to fail” that discusses the effectiveness of agile. Agile is a popular software development methodology, but this article suggests that it may be time to try other methods. It talks about how projects using agile are more often unsuccessful. For example, it states that research shows “agile software projects are 268% more likely to go wrong than those employing other methods.” It also cites other research that suggests projects using agile fail more often, decrease productivity, and adds unneeded stress to those working on the project. On top of that, the article suggests agile is inefficient. According to more cited research, major companies are starting to get rid of the use of agile in their software development.

This article is incredibly relevant to the subjects discussed in my Software Process Management class this past week. We went over software development methodologies, specifically agile. I wanted to read up on something relevant and educating. When I had come across this article, it caught my eye. when we had discussed agile in class, it had seem like the best option of the methods presented. However, this article suggested that, perhaps, agile isn’t the best method out there. In fact, it suggested that it shouldn’t be used. I was intrigued as to why it would be considered ineffective.

This article opened a door of questions about agile and software development methodologies. However, I did not feel as if they were all answered. I was shocked to see the amount of research and data that suggests agile is ineffective. I only recently learned about agile, and it seemed as though it would create a well-designed product through constant communication and reflection on the project. While reading the article, I became curious what other methods would be better to use than agile, but the article did not answer that question. I believe if you are going to critique something, you should offer a solution as well. One thing I personally liked about the article was all of the research data cited. I am a big numbers guy, so being able to see numbers to communicate the purpose of the content was nice to see. I am curious to learn more about other methodologies. I think this article was a good mind opener for me, and it reminded me that everything has room for improvement.

Article URL: https://www.itpro.com/software/development/its-time-to-question-agiles-cult-following-experts-cast-doubt-on-methods-future-with-65-of-projects-more-likely-to-fail

From the blog CS@Worcester – Auger CS by Joseph Auger and used with permission of the author. All other rights reserved by the author.

Modern Software Management: Key Principles and Personal Insights

In today’s digital world, good software management is critical for delivering high-quality products that meet user expectations and business goals. Modern software management refers to practices that help the software development processes. I decided on a source that highlights the key principles of modern software management, offering keen insights into how these practices enhance software delivery. While also having good project outcomes. This blog post summarizes these principles, explains their importance, and all while I’ll be providing personal reflections on how they align with my learning in my current course

The resource I selected talks about various aspects of software management, focusing on principles like Agile methodologies, Continuous Integration and Delivery (CI/CD), DevOps collaboration, user-centric design, lean software development, quality assurance, and data-driven decision-making. 

  • Agile Methodologies: Emphasize flexibility and collaboration, allowing teams to respond to changing project requirements efficiently. Not A tool, Not A method, 
  • CI/CD: Streamlines software delivery through automated testing and integration, improving the reliability and speed of releases.
  • DevOps: Promotes collaboration between development and operations teams, reducing silos and enhancing overall efficiency.
  • User-Centric Design: Prioritizes customer/user needs by using feedback and ensuring the software meets real-world requirements.
  • Lean Software Development: The main goal is to eliminate waste, continuous improvement, and maximize value throughout the development process.
  • Quality Assurance: Ensures the delivery of high-quality software through complicated testing and monitoring.
  • Scalability and Flexibility: Encourages designing systems that can scale and adapt to changing needs, ensuring long-term viability.
  • Data-Driven Decision Making: Uses metrics and insights to make informed decisions and drive continuous improvement.

I chose this resource because it provides a comprehensive overview of the key principles of modern software management, which happens to be the whole point of my class. These principles are directly applicable to the course material, which focuses on effective project management strategies and best practices for software development. Understanding these principles and getting an early understanding will help me in 0the future of this course. 

Personal Reflection and Application

Reading this resource helped me learn several key concepts from my coursework, particularly the importance of Agile methodologies and CI/CD in promoting flexibility and efficiency considering we had worked on it today. For instance, I learned how Agile’s iterative approach allows teams to remain adaptable, responding to feedback and shifting priorities without losing momentum. This makes sense to my personal experiences in group projects, where collaboration and frequent feedback were crucial for successful outcomes.

The resource also highlighted the value of user-centric design. A concept I deeply appreciate. As a programmer so far I feel, it’s easy to focus on technical requirements and overlook user experience. I realized all the projects I have worked on so far have been not user-friendly and you would have to know some competence in code to run them. 

Conclusion

The principles discussed in the resource have given me good exposure to help my understanding of modern software management. By getting the gist of  Agile methodologies, CI/CD, DevOps, and user-centric design in future classes, when we start talking about them, I will already be able to follow along and have a little foundation. 

Sources:

https://www.hakunamatatatech.com/our-resources/blog/principles-of-modern-software-management/

From the blog CS@Worcester – Zacharys Computer Science Blog by Zachary Kimball and used with permission of the author. All other rights reserved by the author.

Steps Of Software Development Process

The other day I read a blog post/article that outlines the software development process that was emphasizing the key steps such as, requirement analysis, planning, design, implementation, testing, and maintenance. The post goes deeper into each step and also gives you tips on the steps. It also highlights the significance of clear goals and choosing the right development methodologies, and ongoing quality assurances. I selected this blog/article because this was something we talked about in class the other day and it looked interesting to read about. Not knowing that there was way more to the software development process than those steps that have to be taken. In the article there are some things that I found very interesting in the reading, talking about how they cant stress enough that team collaboration and adaptability should be changing throughout the project’s process/lifecycle. Another thing that also had me interested was it talks about the maintenance cycle but it goes deeper and talks about 4 different types of maintenance like corrective maintenance, preventative maintenance, perfective maintenance, adaptive maintenance. Honestly it resonated with me because I thought it was interesting and it made me think about how in the future when I got to the maintenance part of my projects that I’m going to look closely at the type of maintenance I’m going to need at that moment. In the future, I’ll try to foster better team collaboration and remain open to change, which will also improve the overall quality of my work. By applying the insights from this article, I feel more equipped to navigate the complexities of software development, from initial planning to long-term maintenance and enhancement. The post also caused me to reconsider testing’s function—not just as a one-time event, but as a continuous, vital part of the entire process. The long-term viability and dependability of the software are guaranteed by continuous testing. I intend to adopt this repeated testing and feedback mentality going forward because it is important for lowering errors and raising overall quality. Additionally, the emphasis on teamwork and open communication brought attention to the importance of these qualities, which I think will be crucial to the success of any project I work on. I also came to understand that, compared to just going on to the next phase, each one offers a chance to make improvements to the final product. By putting these ideas into practice, I will be able to improve my results going forward and maintain my ability to adapt and provide answers that are consistently of the best possible quality.

https://relevant.software/blog/software-development-process/

From the blog CS@Worcester – A Bostonians Blogs by Abdulhafeedh Sotunbo and used with permission of the author. All other rights reserved by the author.

A Reflection on Software Documentation Standards with Bob DuCharme

This week I have taken a look at Bob Ducharme, a senior technical writer at Ontotext, a company that produces data management software, and his personal blog. In this entry, Ducharme details various points surrounding the importance of documentation standards, or guidelines for efficient documentation, and provides a brief dive into documenting Application Programming Interfaces. His main stance on documentation is that it should always align with the specific company’s product vision, this is to ensure that user ease is prioritized especially when it comes to understanding a product, as good documentation can be a great form of marketing. Ducharme then provides tools and tips for documentation, Jupyter Notebook is recommended as well as keeping things short, readable, and proportional, especially code samples. He also warns to avoid documentation presented in multiple top-level sections. This is a common practice amongst companies nowadays but it makes for a more difficult navigation experience for users. Ducharme then went on to write about the documentation of APIs. His top points were that documentation is critical when working with some programming languages due to their functions and libraries that lend insight into a product’s internal workings. He provides more advice for documentation tools as he recommends Swagger, Sphinx, Pydoc, and Doxygen because they can take the comments found in the code and turn them into formatted documentation with the aid of a tech writer clarifying the necessary parameters needed for documentation standards to be met. 

I selected this particular post for many reasons, the first and main reason being that I always appreciate when an author creates a sense of personalness. I find a piece more readable and attention-grasping when it avoids a strict formal tone and has a story-like quality. Ducharme even included a hand-drawn diagram that really added that personal touch. To add to the readability factor, Ducharme formatted his post into bulleted sections, breaking things up more concisely and providing an easier and more engaging read. I also could immediately trust the information I was reading as within the first paragraph Ducharme lies down a line of credibility by mentioning he is an accredited enough figure that he has been asked to be interviewed on podcasts to speak on this specific topic. He is also a senior writer in the field, providing his own experiences from his career. Another huge factor is all of the great advice provided about proper documentation standards and the inclusion of different resources to reach efficient documentation.

I feel Ducharme supplied really important advice on documentation standards that I will take with me into the future and apply myself. I have clear sense of what makes efficient documentation and that complex sectioning is not always necessary and keeping things user-orientated, thus simple and readable is the route to go. Ducharme gave a very thorough description of documenting API, allowing his expertise on that topic to shine through. His explanation was very educational and I definitely see myself using Swagger, Sphinx, Pydoc, or Doxygen for assistance in formatting comments properly. Also in future practice in my career space if working as a developer I will know how to properly work with tech writers who are trying to achieve documentation standards. For example, when providing a type of parameter I will be sure to indicate what the typical high and low values will be and the effects they will have so the tech writer can make the necessary correct alterations. Overall, if looking for a refreshing insight into achieving documentation standards with the inclusion of the best formatting standards and helpful tools to achieve them I would highly recommend giving Bob Ducharme’s blog a read ( https://www.bobdc.com/blog/techwritingadvice/ ).

From the blog CS@Worcester – CS Journal by Alivia Glynn and used with permission of the author. All other rights reserved by the author.

I Learned Something New

I was reading about the top four symptoms of bad code, and it reminded me of the classwork I did earlier today. At that time my group and I were learning about the Waterfall Methodology and the Agile Methodology.

But first, the article’s link is this: Top 4 Symptoms of Bad Code – Excella. To summarize, it lists rigidity, fragility, immobility and viscosity as symptoms of bad code. Rigidity makes code difficult to change and causes non rigid problems to stay unfixed. Fragility is when software breaks when it is changed. To simplify, it causes the common issue of when one bug is fixed and multiple spawn in its place. Immobility is when software can’t be reused which leads to code having to be duplicated. Viscosity is when the developer is hesitant to change their code. This can result in wasted time and energy.

Back to what I was saying earlier, this article made me think about how the symptoms of bad code would affect the development process under Waterfall Methodology and the Agile Methodology. Under the Waterfall Methodology, rigidity and fragility would delay the verification and maintenance process. Rigidity makes code hard to edit which would make the steps where a person would have to edit code especially difficult. Fragility would cause time to be wasted or worse, it could delay the whole project. Immobility would delay the implementation process since time that could have been spent somewhere else is being used to duplicate a piece of code. Viscosity has the potential to affect the deployment stage since it could allow a program with bugs to be sent to the customer. Think about how some video games tend to be published with bugs. If only one or a few developers suffer from viscosity, then it would only delay the verification and maintenance process.

Since the Agile Methodology is more fast paced any delay would be more significant. Rigidity, fragility, immobility and viscosity would all call delays or a rushed project that may not meet up to the customer’s expectation. Viscosity would allow problems to fall through the cracks. Immobility would waste precious time. Fragility would take away attention from coding and push it toward constant bug fixing. Rigidity would extend the time it takes to fix bugs.

Overall, I believe this article achieved two things: teaching me something and allowed me to make a connection to what I learned earlier. I liked that it was short, to the point, and easy to understand. I will use this information to recognize when I fall into this pitfalls and course correct in school and my future career.

From the blog CS@Worcester – My Journey through Comp Sci by Joanna Presume and used with permission of the author. All other rights reserved by the author.

‘Your First Language’ Pattern

  The ‘Your First Language’ pattern from chapter two consists of the idea that you are just starting out and only have a basic understanding of one or maybe even two languages. The problem which is presented is that you as an apprentice believe that your job depends on being able to produce the same quality of work in a specific language that the others around you can even if they may have more experience using said language or that getting any job will depend on your knowledge of one particular language. Then the solution presented it to decide on a ‘first language’ which you will dedicate to familiarize yourself with and when trying to solve a problem you will use this language and further your understanding of its inner workings. Then if an employer requires you to use a specific language you approach it by taking small steps at first and then exponentially grow your steps as you gain more knowledge in order to efficiently learn another language. This pattern encourages you to seek help from experienced friends in order to quickly progress through a problem as long as you do not grow a reliance on them for all the answers. 

  I have a great appreciation for this pattern as I feel it is something that many students and or apprentices may struggle with. Initial thoughts on a first language can be intimidating and heavily influenced by the schooling you go through if any or even others opinions online if you do not pursue technical training initially. You put a lot of consideration into a choice like this and it is important but this pattern highlights the thought that many people may have that they must fully master a language in order to be ‘employable’ in that said language when realistically even people that are considered to be ‘masters’ of a specific language are still learning. What really matters is that you take the steps in your first language and learn from the experience so that you can adjust the steps to learn other languages in the future as your first language is basically your jumpstart in the world of programming languages.

From the blog CS@Worcester – Dylan Brown Computer Science by dylanbrowncs and used with permission of the author. All other rights reserved by the author.

The White Belt – Ignorance and the Journey of Learning

In a nutshell, “The White Belt” encourages us to embrace our ignorance and adopt a beginner’s mindset. It’s like entering a martial arts dojo for the first time – a white belt symbolizes a blank canvas, ready to absorb the knowledge and skills the journey offers.

Summary of The White Belt:

  1. Ignorance is Okay: The pattern emphasizes that it’s perfectly fine not to know everything. Acknowledging our ignorance is the first step towards real learning.
  2. Focus on Learning: Instead of trying to be a jack-of-all-trades, the pattern advises us to focus on learning one thing well. Mastering a single concept or technology sets the foundation for broader expertise.
  3. Practice, Practice, Practice: Hands-on experience is key. Whether it’s coding exercises or real-world applications, practice is the bridge between theory and mastery.
  4. Seek Feedback: Actively seek feedback from experienced developers. Constructive criticism is the secret sauce for improvement.
  5. Expose Your Ignorance: Don’t be afraid to admit what you don’t know. Being open about your limitations opens the door to learning from others.

My Reaction:

What struck me most about “The White Belt” is its emphasis on humility and curiosity. In a world where the pressure to know everything can be overwhelming, this pattern grants permission to be a novice. It made me reflect on how, as a student entering the vast field of software development, it’s okay not to have all the answers.

The call to focus on learning one thing well was a game-changer for me. In a world filled with shiny new technologies, I now appreciate the value of depth over breadth. It’s like building a strong foundation before constructing the skyscraper of knowledge.

This pattern has reshaped my perspective on learning. It’s not just about accumulating information but immersing oneself in the process. Admitting my ignorance, seeking feedback, and practicing relentlessly are now my guiding principles.

In conclusion, “The White Belt” is not just a pattern; it’s a mindset. It has ignited a spark within me, encouraging me to embrace the journey of learning with open arms and a white belt.

From the blog CS@Worcester – Hieu Tran Blog by Trung Hiếu and used with permission of the author. All other rights reserved by the author.

expose your ignorance (apprenticeship patterns)

Essentially, be willing to admit that you have gaps in your knowledge when you do, and be able to ask those around you for help when you really need it. The authors make a point to mention that this is relatively difficult for many people because of the self-imposed expectation of being omni-competent (that is, always competent) and when you aren’t competent, considering it a failure. This is definitely a difficult mindset to get past, but it is necessary for growth. Otherwise you remain stagnant in the things that you know and never challenge yourself.

This pattern is good. It’s true that in order to learn things, we often have to turn to those who have more experience and learn from them. It also gives a good way of asking productive questions rather than the common (and not very useful at all) “how do I make this work?” I find that in order to really understand what’s going on, you have to go to the root of the thing you’re having an issue with and work up from there. Otherwise, for example, you’re just writing code and you don’t even know what it really does, just that it works. This is one of the main reasons I get bothered whenever anyone has asked me to just show them my code in the past, not only does it not really help them learn anything most of them time, there’s a good chance the code I wrote ends up being copied directly. I don’t really care about getting credit for the stuff I wrote all that much, but it’s moreso about the precedent it sets.

Another interesting thing about this pattern is the idea of being willing to step out of your comfort zone to other fields and technology to better your versatiliy. I think this is truly important, especially when working in the tech sphere. Things change very quickly, and to not adapt means to remain with legacy components which are less efficient and less secure as a whole. This stagnation spreads to everything in the ‘system’ so to speak, and the results affect everyone who holds a stake in what your group does.

From the blog CS@Worcester – V's CompSCi Blog by V and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Introductions

  The introduction chapter for the Apprenticeship patterns book gives a definition and understanding of not only the term ‘software craftsmanship’ but it also explains the stages of ones development within the software development career path. These stages can be attributed too many other careers but the apprenticeship patterns contained in this text are meant to help guide an apprentice software engineer to become a journeyman and later a master.

  Chapter Two ‘Emptying the Cup’ contains apprenticeship patterns which are meant to help when initially taking on an apprenticeship and the learning curve you will face when having to “relearn” how to do a task that you may already do in one way in order to learn another way to complete the task. This is very important as you must be open to learning different ways to do things even if a different way may be less efficient.

  Chapter Three ‘Walking The long Road’ refers to the everlasting cycle of learning that is ahead of an apprentice and the importance of learning new techniques and strategies continuously in order to increase your skill and understanding which will remain important even after exiting the apprentice ‘phase’ of your career.

  Chapter Four ‘Accurate Self-Assessment’ is meant to make you realize that you have not finished your “walk on the long road” and encourage you to realize and learn from flaws in your own work or seek mentorship from your more experienced counterparts.

  Chapter Five ‘Perpetual Learning’ contains patterns that you are meant to use for your entire career regarding both learning an communication but they are vital to success early in your journey due to the emphasis on expanding upon your own abilities and your knowledge in order to expand your career.

  Chapter Six ‘Construct Your Curriculum’ refers to the necessity of continued learning once again and the need for an apprentice to be responsible and dedicate some of their own time to the expansion of knowledge even though the reading and research required will not be ‘assigned’ but it is still important and necessary when it comes to your own development and success.

  All Six of the chapters included in the Apprenticeship Patterns book are very important for your own development and the development of your career. Many of these patterns are things that can be disregarded by people while learning but it is important to remember you started somewhere and it is up to you to ensure you develop well professionally and you utilize your counterparts as mentors and examples.

  My thoughts on the reading are that I believe many people including myself forget the significance of looking as different perspectives. The different patterns in this reading provide a whole new perspective in which I agree with the majority of the content and find it rather though provoking. In my opinion chapters four and six would be the most important because truly nobody can assess you more accurately than yourself in order too better yourself and constructing a curriculum is something that can in a sense guarantee your continued learning throughout your life as you assign things to yourself and hold yourself accountable.

From the blog CS@Worcester – Dylan Brown Computer Science by dylanbrowncs and used with permission of the author. All other rights reserved by the author.

Nurture Your Passion

In this week’s blog post, I will be discussing the “Nurture Your Passion” pattern discussed in chapter 3 of “Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman” by Dave Hoover and Adewale Oshineye. This week, I chose this topic for my blog post because I often worry about losing my passion for software development. This pattern discussed in the book has helped a lot with this particular anxiety.

The first part of this pattern mentions some everyday work environment issues that can break down your passion for your work. “You might be faced with demoralizing corporate hierarchies, project death marches, abusive managers, or cynical colleagues.” While I have worried about the inevitability of dealing with corporate hierarchies and toxic coworkers, I haven’t considered a work environment called a “project death march.” This initial part of the section did not alleviate my anxieties. However, as this section continues, my concerns are inflamed and relieved.

The authors described project death marches as the most damaging of the hostile conditions mentioned, and as they go into detail as to what a project death march entails, I agree with them. “It saps your time and energy, preventing you from taking any significant actions to protect your passion as more important issues like personal health and strained relations at home demand your attention.” This isn’t very good, mainly because it affects your passion, health, and relationships with your loved ones. Thankfully, the authors mention some ways to mitigate the harm done by this and other toxic traits a work environment may suffer from.

One of these examples is setting boundaries for what you are willing to put up with in a work environment. “This might mean you leave work while the rest of the team stays late, that you walk out of a meeting that has become abusive, steer a cynical conversation toward constructive topics, or refuse to distribute code that doesn’t meet your minimum standards.” While I certainly don’t have the confidence to stand up and leave a meeting or not stay late with my coworkers, I feel that I can steer conversations to a more positive topic and only distribute code that meets my standards. Reading this section also made me realize that I need to work on my confidence in standing up for myself and not be afraid to take a break and come back to something with fresh eyes.

From the blog CS@Worcester – P. McManus Worcester State CS Blog by patrickmcmanus1 and used with permission of the author. All other rights reserved by the author.