The Software Craftsman, Chapter 9 & 10

For this week, I read Chapter 9 Recruitment and Chapter 10 Interviewing Software Craftsmen, from the book title The Software Craftsman by Sandro Mancuso. Chapter 9 takes a look at the picking process of hiring the best developers. Best developer’s identification is that developer must be passion for the craft. Chapter 10 explains the interviewing process that works both ways, the interviewer (who represents the company) and the interviewee (potential hiring candidate) looks for compatibility with each other. The interviewer checks whether the candidate is best fit for the company and the interviewee try to find out whether the company is best fit for him/her.

Chapter 9 explains in detail on attracting software craftsmen to a company. It also walks the reader on a journey on how to craft a job description. I feel like this chapter is the best read for anyone who would like to recruit or looking for the best developer for his/her company or organization. After reading this chapter, I would recommend this sole chapter reading to anyone who carries out the recruiting or hiring process at a company or organization. I believe the author did a fantastic job on covering and perfecting attracting and putting out description for a target and ideal candidate for a job.

In chapter 10, author covers the interviewing part of the hiring process. One emphasis of the author that I liked was when the author explains asking questions in the interview. According to the author, interview should not be only the company asking questions from the potential candidate, but rather the question process should be from both sides. If the candidate is a craftsman, then he/she must have questions for the company too. This way the company and candidate will insures that they both are best fit for each other.

This was very informative read especially on the job description and interviewing.

The Software Craftsman, Chapter 7 & 8

For this week, I read Chapter 7 Technical Practice and Chapter 8 The Long Road, from the book title The Software Craftsman by Sandro Mancuso. Chapter 7 explains adoption of extreme programming (XP) like Test-Driven Development (TDD), pair programming, refactoring, simple design, and continuous integration. Chapter 8 explains how to approach job choice and what it takes to have a job/career where you would be happy.

In chapter 7, the author describes and explains all aspects of extreme programming. For example, Test-Driven Development (TDD), pair programming, refactoring, simple design, and continuous integration etc. The best thing that I learn from this chapter was when the author states “Being pragmatic is one of the best quality that a software craftsman can have.” This explains that professionals are not limited to following certain practices and processes where they would always receive optimum results. But rather, as professionals we need to keep looking and searching for ways of doing our jobs better and satisfying the needs of our customers. Whatever it takes, at the end of the day what matters are happy clients. We should follow any practice that we believe will give us this result and we should be accountable for whatever decision we make and always take responsibility for the outcomes.

In chapter 8, I like when the author breaks down job choice base on three criteria: autonomy, mastery, and purpose. Craftsman must look and consider these three things before choosing a job. I believe that this is a good criteria to have, but to be able to choose based on these criteria, individual needs to overcome a lot of obstacle and challenges. You need tremendous focus and determination in order to excel and expand your knowledge and skills.

The Software Craftsman, Chapter 5 & 6

For this week, I read Chapter 5: Heroes, Goodwill, and Professionalism and Chapter 6: Working Software, from the book title The Software Craftsman by Sandro Mancuso. Chapter 5 explains the need and urgency of when and how to say “No”? Chapter 6 explains the effects of technical debts on companies and stabilization of existing code, and improving it.

In chapter 5, author explains one of the hardest thing to say in general which is saying “No”. As a professional, one must have the courage to say “No” when he/she does not think that his/her client or boss is not being reasonable or does not understand the scope of what he/she is demanding. As a professional it is our duty to stand up for ourselves and make people around us aware of the entire situation as transparently as we can. Always, be clear and careful at your decision and commitments. Be sure what you have been asked and what you are committing is achievable. I believe saying “No” is one of the hardest thing about being a professional and I hope that I don’t have to be the first one to say “No” as I am stepping into the real world. I wish that I see my senior say it first then I will follow.

Chapter 6 was my favorite chapter because it talks about a topic most software developers and companies ignore to pay attention to once they complete a job or project. I believe for any successful software company or business needs to constantly work on its old code and try to make it better in order to increase its adaptability. Companies need to hire craftsmen to refactor its existing code. I like how the author puts in the book, “rather than construction, programming is more like gardening.” this quote explains that rather than keep producing new code every time, it is more efficient to make existing code better so it is more adaptable. It can save companies time, money, and maintenance in the long run.

The Software Craftsman, Chapter 3 & 4

For this week, I read Chapter 3 Software Craftsmanship and Chapter 4 The Software Craftsmanship Attitude, from the book title The Software Craftsman by Sandro Mancuso. Chapter 3 describes what Software Craftsmanship is? Chapter 4 put emphasis on the importance on how to keep learning and develop yourself over time?

In chapter 3, author defines a software craftsmanship. One of the definition that I liked was when the author stated that “Software Craftsmanship is about professionalism in software development.” This definition explains what software craftsmanship or field craftsmanship should be all about. Software Craftsman must care about his/her clients and help them achieve whatever they want to achieve, always try to make himself/herself better at his/her craft, learn from other in the field, share his knowledge and best-of-all mentor less-experience individuals in the field.

In chapter 4, author put focus on learning by yourself and make the right and wise decision for yourself. Just like in The Clean Coder book this author also suggests that you should never rely on your employer to give you all the training and resources in order to improve your knowledge and skills. You should take charge and responsibility for your own learning, and develop your skills by yourself over time. Author offers many useful strategies to improve and keep yourself up-to-date with the changing industry. I personally like all these suggestions from The Clean Coder book and have implemented some already.

Both chapters were very enlightening in order to be successful in the software industry. I have already plead to follow all these suggestions from the previous book.

Sprint 6: Reflection FantasticFive

Sprint 6 was the last sprint of the class so we came together as a team and try to work together this sprint. We picked APTS-306 issue and later, APTS-340 issue from the Backlog.

APTS-306 description was not clear so asked for more clarification. Here is the description of APTS-306 issue:

“Users are requesting if “Patient Newly Enrolled in Second Line” indicator can be added under list of indicators used in clinic dashboard and data analytics”

We contacted the assigned AMPATH developer to the issue on JIRA (Robai). She got back to us with a little explanation, but referred us to AMPATH developer (Brain) that was in-charge of that part of the project. Brain took about a week to respond and in his respond told us that APTS-306 has been handled by APTS-238 issue, APTS-238 issue was already solved.

We did not have much time to work on another issue, but still we searched Backlog for an easy fix issue. Sudarshan picked APTS-340 issue to be a good issue to be consider in the remaining time. Here is the description of the APTS-340 issue:

“When adding “HIV” treatment program when user selects “date enrolled” and “date completed” it throws the following error “date enrolled or date completed should not be in future””

APTS-340 issue was a bug that needed to fixed. Sudarshan asked for more details on the issue from AMPATH team. We got a respond and were told that this bug has been already handled by another issue.

Throughout Sprint 6, we attempted two issues: APTS-306 and APTS-340. Unfortunately, both issues were already solved by other issues.

Take away from Sprint 6 was that we worked as a team. We communicated and collaborated highly through Slack and in-person to work on these issues. Now, we feel much more comfortable working and trusting each other. I believe the reason is that through the process of working together in this class we found out a lot about each other’s personalities. Each other strengths and weaknesses. I feel like working in a team is much more challenging than working individually. I learned that responsibility on individual in working in a team is much higher than working on your own because when you are assigned a task in a team, your team counts on you to deliver that task in time. If you cannot deliver that task then entire team’s delivery process delays which does not only make you look bad, but the entire team is a victim of that judgment. This was a good lesson learn for getting into the real-world.

I just want to say that it was a pleasure working with all my team members and getting to know them. Best of luck guys!!!

Sprint 5: Reflection FantasticFive

Team members decided to pick our individual issues and if some members want to work together on an issue that is fine. Sudarshan worked on NGPOC-184 issue, Tan worked on APTS-225 issue, and me and Angelito picked APTS-305 issue from the Backlog to work on. Towards the end of Sprint 5, we picked APTS-214 issue while waiting for AMPATH developers’ response on APTS-305 issue.

In the beginning of Sprint 5, I had lots of work due in my other classes. During Sprint 5, I needed to turn in lots of assignments and had to take three exams. I had managed to focus on this class while taking care of my other classes. Me and Angelito picked APTS-305 issue from the Backlog to work on. In the process, Sudarshan also helped us. The issue description was:

“ users suggested having an additional column of order type in  lab orders under Data Analytics ” Patient Requiring Viral Load Test” The additional column to display  order type e.g Viral Load,  DNA PCR and CD4”

So, we thought it is just a simple touch to the code. All we had to do was make a column with a name “Patient Requiring Viral Load Test”. We made the column and were done in just 15 minutes, but the simplicity of the issues was too good to be true. So, we decided to confirm it from the AMPATH team. While Angelito communicated with the AMAPTH developer; Sudarshan and I went on and picked another issue (APTS-214) from the Backlog.

APTS-214 issue description was:

“Currently user does not get any message to be sure that the locator map has been saved successfully and also the user can clear any existing map without a warning message that the changes made is not revertible.”

We needed some help on this issue. So, Sudarshan asked for more explanation on APTS-214 issue from AMPATH team.

We had a respond back on the APTS-305 issue from the AMPATH developer and she said that there was another ticket (APTS-229) issued on this same issue, and it has been solved by APTS-229 ticket. We had to dropped this issue.

Also, we had a respond for APTS-214 issue too. AMPATH team suggested that this issue needed to be taken care in another sprint. For now, we need to hold-on on this issue. We had to discard APTS-214 issue too.

In Sprint 5, we attempted four issues: NGPOC-184, APTS-225, APTS-305, and APTS-214. Sudarshan successfully pushed NGPOC-184 issue to the AMPATH repository and was accepted after some obstacles. Tan is working hard on APTS-225 issue. Me, Angelito, and Sudarshan worked on issues: APTS-305 and APTS-214, but we had to dropped both of the issues because one was already solved and the other was too early to implement or work on.

Sprint 5 turned out to be a pretty good sprint for our team because first, we got to solved the NGPOC-184 issue. Second, we acted more like a team than individuals working at the same table. Third, our communication had gotten so much better than the beginning of the semester. I believe our team is really “gelling” together. I am proud of all my team members. Go FantasticFive!!!

The Software Craftsman, Chapter 1 & 2

For this week, I read Chapter 1 Software Development in the Twenty-First Century and Chapter 2 Agile, from the book title The Software Craftsman by Sandro Mancuso. Chapter 1 explains how the software developers have evolved over the years and what it means to be a developer of the 21st century. It also focuses on the measurement of seniority in the field. Chapter 2 flashes light on delivery of software projects technique known as Agile. Author explains the meaning, purpose, adoption, ups and downs of what it means to be Agile. Author also mentions his contribution, suggestions and experience with Agile system.

One of the interesting fact that I noticed in chapter 1 was how the definition of seniority in the computer programming world has changed. In the beginning era of the author in the field, seniority was measured based on your understanding and writing of complicated code. If no one understood your code; you were automatically considered a senior. In the 21st century, seniority is not measured just by writing good code and be familiar with a language or framework. In the modern era, with seniority comes more responsibilities. Modern developers are expected to participate in all aspects of software development and business. Developers responsibilities includes speaking to customers to find and help them with their needs and wants, watching out for the best interest of the business, taking part in designing, producing, testing, and deploying software process, estimate time and costs, presenting to clients, and many other places that will result in greater customer satisfaction and successful company/business. In simple words, developer is no longer a person sitting in a cubicle and writing code with no involvement in other business activities.

In chapter 2, author goes through the software delivery technique known as Agile. Author makes it very transparent since the beginning of the chapter that Agile is not just one thing, but rather, it is a combination of methodologies and techniques. To understand the full motive of Agile, I personally liked how the book explained the two main groups of Agile. First, process-oriented discipline, which focuses on how the teams and organizations should work, collaborate, and organize. The purpose of process-oriented discipline is to keep focus on what is important and valuable to the business. Second, technical-oriented discipline, which focuses on the challenges of developing, growing, maintaining, and delivering the product/software. The purpose of technical-oriented discipline is to focus on the quality of the product/software. These two groups explained the agenda of why a business would adapt to Agile from their previous practices.


The Clean Coder, Chapter 13 & 14

I read two chapters that are very important for starting a professional career in the software industry. Chapter 13 Teams and Projects, explained the importance of gelled teams for successful projects and to some degree for successful businesses. Chapter 14 Mentoring, Apprenticeship, and Craftsmanship, elaborates on the need for teaching, training, supervising, and reviewing new computer programmers coming into the software industry.

In chapter 13, the author talks about a very important aspect of working in a team that is known as “gelled team”. In my academic career, I have personally experience both gelled and un-gelled teams. I strongly agree with the author that gelling is important for teams to work together, collaborate and communicate. Once team is gelled then they can plan better, they can solve problem together, and get things done together on time. I worked in a team where all the team members got along very well and understood each other. The result was that we worked together, supported each other, covered for each other and in some cases demanded from each other which resulted in quality work and on time delivery. In another group, all the team members did not bond together ever since the formation of the team. It resulted in disparity, miscommunication and unfinished work which badly reflected on the entire team.

In chapter 14, the author covers a topic that every rookie in any field is desperately searching for. I personally believe that a person learns a great deal from his mentor. That is why finding a good mentor that will teach you and makes a craftsman out of you is very hard. I believe to find a good mentor one must be a great apprentice first. Apprentice must be honest, hard-working and full of positive energy. Apprentice also needs to be respectful to gain his mentor’s trust and confidence. Only a great apprentice can become a great mentor and a great mentor can become a great craftsman.

Sprint 4: Reflection FanstasticFive

Our team continued working on NGPOC-184 issue. We changed up how the team should pick and solve issues.

Throughout Sprint4, I spent most of my time researching and trying to solve NGPOC-184 issue. I also tried to help one of the team member to connect to AMPATH test2 server. I received very helpful and informative links from Sudarshan regarding NGPOC-184 issue, but I still couldn’t come up with a solution for the issue. Although, Sudarshan was successful in solving the issue by himself with the help of AMPATH developer.

To increase our contribution to the AMPATH project, as a team, we decided to pick individual issues and try to solve it individually or with the help of chosen team members. Since Sudarshan contributed immensely to NGPOC-184 issue, he kept working on that issue. We tried looking for other issues, but they were all assigned. Couple days before Sprint4 ended, Dr. Wurst was waiting on get more issues from AMPATH team. Tan picked APTS-225 and is willing to let me work with him on this issue.

Sprint4 went by very quickly. We had small change of plans towards the end of the sprint, but everything else went great.

Sprint 3: Reflection FanstasticFive

During Sprint3 I kept learning more and more about Angular2 because I still don’t have strong hold on the language. I got couple of tasks done successfully: I accepted invitation from Jira and successfully connected to AMPATH test2 server. Our group also picked NGPOC-184 issue, started researching and tried to solve it.

I watched couple of videos on Angular2 which extended my knowledge on Angualr2. I also started looking at the ng2-amrs code and tried to understand and navigate through the code. I spent most of the time on learning about Angular2 and navigating through the existing code. Our team started working on NGPOC-184 issue. We spent some time on figuring out when, where and how to approach the issue.  Sudarshan found an informative blog that pushed us to the right direction.

I do not know if it was the issue or it is just our team, but we still need to work on our communication. Most of the NGPOC-184 issue was handled by Sudarshan. The rest of team members spent most of the time on researching and trying to help. I remember Sudarshan saying that this issue is a one-man issue. So, it might have been the issue, but I’m looking forward to more collaboration with my team members.