Sat, 17 Apr, 2021

Nine Days at Deerwalk

By Avishek Neupane

Bus rides, handshakes, mentors, friends, Nepali peak names and cutting edge technology. These six words sum up my nine day internship at Deerwalk - a healthcare analytics and software development company focused on delivering Big Data solutions to the healthcare industry. My nine day internship was divided into three day observation of three divisions- Product Management (PM), Quality Assurance (QA) and Development (DV) within the Everest product. My expectation from this short experience was to get an understanding of different groups within a software development firm. Further, I was interested in the workflow between these different divisions and how the product evolves from a specification document to a high quality, well tested software application used in the US healthcare industry. My first day, I was introduced with Prabhat Dai - product manager for Everest and Yala. Everest, is a suite of tools designed to help clinical users like Nurses to coordinate care of their members. Whereas, Yala is a member facing portal that helps users to manage their health. Besides Everest and Yala, Deerwalk have other products like Makalu, Namche, Fishtail, etc. After a brief introduction, Prabhat Dai explained the role of a PM (Product Manager) and the workflow process between different teams within the Everest product. According to the books, the PM usually is the liaison between the clients and the technical team, however, at Deerwalk, PM serves as a liaison between product owner and the technical team. The product owner based in the US acts as an intermediary between clients in the US and the PMs. A big part of a PM’s job is to plan the three week sprints. The product owner assigns tasks to the PM. The PM depending on the priority and the resources available categorizes tasks to be worked on in a particular sprint by the relevant technical group. The team leaders of the technical groups then assign programmer(s) to work on the task. From the initial specification to until the software is ready for release, product management is pivotal in smoothing the software development workflow. He also explained to me that Deerwalk follows a semi-agile software development methodology. They operate in a three week sprint schedule. The first two are dedicated to development whereas the final one is dedicated to testing and bug fixing. Teams do a daily stand-up where they share the state of the current tasks being executed. Tasks are assigned using a tool called Deermine - an in-house built ticketing system based on the open source Redmine project. However, unlike a pure Agile methodology tool, Deermine currently does not have velocity tracking and points assignment for tasks. Git is used as the version control system. Version control process is based off of a well adopted Git workflow style explained here. Different branches like master, develop, feature, qa, hotfix and release are in use to facilitate code version, releases, development and bug-fixes. Most of the teams in Deerwalk are divided according to products. A staff can be a member of many teams. However, there are certain teams such as the data analytics that stretch across all products. After spending three days observing the PM process, I made a switch to Quality Assurance (QA).  I was introduced to Awanish Dai, who heads the QA department. He explained to me that the QA team at Deerwalk follows the principles of ‘FIT FOR PURPOSE’ - the product must meet its purpose and ‘RIGHT FIRST TIME’ - bug free software made the first time. “Let’s let this version roll out and we will fix errors in the next version isn’t the mindset we have here”, he said. The QA process involves a set of administrative and procedural activities that ensure quality of the product. I previously thought that QA came after the developers finished their tasks, however, it turns out that QA encompasses the entire software development process - requirements definition, software design, coding, source code control, code reviews, change management, configuration management, testing, release management, and product integration. Testers at Deerwalk work together with developers during the Requirement Analysis phase to discuss the requirements and how to test them. Then the testers plan test cases and write them up whereas the developers start coding. Writing tests may involve creating automated testing scripts. Once the developer commits the code into the QA branch, testing and reporting begins with the test data prepared by the data team. If all the tests are passed, the code goes through stress and performance test. Finally, it is also tested in the production like environment to ensure that it does not fail when pushed into production. After testing, the release team ships the tested code to the end user. Besides the QA process, I also understood the difference between QC (Quality Control) and Quality Assurance (QA). QA is process oriented whereas QC is product oriented. QC involves tasks such as user testing to ensure that the new code does what it’s supposed to. Whereas, QA just assures that a certain process is being followed so that there is a higher chance of a quality result. One of the major responsibilities of QA is to improve this process to produce higher quality software. Now, it was time for my final rotation. It was with the development team for Everest. This rotation was exciting because I will be working as a software developer in the near future. For this rotation, I was introduced to Suresh Dai who leads the development team for Everest. He explained to me the Git workflow process and gave me a demo of Deermine and how he uses it to keep updated on his team’s tasks. Most developers in Deerwalk are full-stack developers .i.e. they work on both the back end and the front end. However, there are some developers that completely focus on the back end or front end only. New developers are mentored by experienced developers to ensure that they get accustomed to the existing codebase, coding conventions and best practices. Even though there isn’t a big emphasis on pair programming, some relevant tasks are solved working in groups in a workstation. Developers do write unit tests though the culture of test driven development (TDD) is not yet widely adopted in all projects. Suresh Dai hopes it will eventually be adopted in the near future. After nine working days at Deerwalk, I think I have a better understanding of how a software is developed and the different processes involved from when a feature is requested to when a feature is shipped. Besides learning about the process workflow I also got to know about the software development tools and platforms such as Groovy on Grails, Spock, Elastic Search, Cascading, Hadoop, MySQL and Amazon EC2. However, it isn’t just the technology or the product that makes a company great, it’s the people. My learning experience at Deerwalk was made even more enjoyable by Happy Deerwalkers all around. There was also an internal website developed for fantasy World Cup. Even though I started late to sign up for an account, it was really enjoyable to listen to the discussions and notice the excitement among my colleagues. Moreover, in a culture where we find a lot of English named companies and products, Deerwalk's products, which mostly get used in the US, are named after Nepali peaks. I also got to reconnect with my old college friend Simoli and spend lunch and snack times with her friends from Kathmandu University. The bus service facility was very convenient. Finally, to top it off, the food in the canteen was really tasty. Overall, my time at Deerwalk has truly exceeded my expectations. I am not only leaving with knowledge about how a software company functions but also with a lot of experiences, conversations and memories. All of these will definitely help me out as I start working full-time in the near future. [Avishek Neupane interned at Deerwalk Services from June 18 to June 30, 2014.  He is currently a Software Development Engineer at Amazon.com.]