Corporates demand the best in the least amount of time, which is so challenging to get through in the stipulated time frame, but thanks to 1000’s of the library, 3rd party vendors who help to get things in place or integrate to form an all-encompassing working system. This certainly needs a good team to work, and getting the work done in time is the need of the industry. With so many things in the bucket, knowing everything is becoming the need of a Nextgen developer. But fortunately, or unfortunately, developers come with a deep dive knowledge of specific technology or few technologies related to that. Now the connecting diversified APIs, workflows, libraries are much needed, knowing the fact we are in the 21st century most wheels are already built re-inventing is absolutely not needed. But the challenge is rolling the wheels one after which can complement each other is a need. Understanding the fact, a comprehensive system needs a heterogeneous tech stack. Corporates have gone a step ahead to outsource/hire a consultant who can connect all dots and form an excellent working model.
One of the greatest take away from the new application design is making sure to have a good workforce, on this verge companies have regulated to have training/upskilling their employees which guarantees to become an integral part of any organization’s growth. And one such factor when the organization decides to do training, few doors open either to go with formal or informal training. Let’s puts some lights good and bad about it.
- Informal training or virtual training is accessed from any corner of the world, on devices like computer, laptop, mobile, tablet, etc. and for informal training, there are numerous learning platforms available(to name few for collaborative work Microsoft Teams stands on the pinnacle, for delivering session software like Zoom, Cisco WebEx, Goto Meeting, RingCentral, Goto Webinar, join.Me, etc), and this would be the best bet for any company to do cost-saving and allow their employees to access to the material anywhere, any time and at this pandemic time, there is no other option for corporates to upskill there employees.
- Formal training is the most effective though, which is followed from ages, and have made an unerasable mark since there is human interaction and the learnability is measured, or it could be project-specific training, tailor-made, etc.
The two forms of training have their own advantages and disadvantages, this paper does not get into detailing of these. Rather address the organization’s need to solve the problem which can be made to live in a quick time, with the help of one or both or mix of both.
The paper can be considered hypothetically for any software application development nevertheless with the experience which I’ve gained working with numerous companies, to provide the solution to one of the top Indian banks wanted a solution to be built for one of the newly added business lines. Since the application platform was already existing there was no opportunity for my team to start anything from scratch rather understand the existing system and add new modules. The million-dollar question now is how can we do that. One of the first proposals which we had is the application can be built only with microservice architecture, as this gives the opportunity to add or remove part of the application on demand, and the application can be tested isolated. This will encourage to have a “Highly Cohesive, Loosely Coupled” system. For any project to be successful, the process plays a very important role, one such process which software companies choose is the Waterfall model, Agile, Prototype, etc. Since the timeline is one of the most challenging parts and involving stakeholders, the product owners, the business analyst was very much needed. And having the agile (dictionary meaning: able to move quickly and easily) way of working was unquestionably a choice for developers and company, and to track the agile development there are various tools available in the market, few choices are JIRA, Scoro, Trello, to name a few.
Any software is built with at least 1 programming language, and choosing the programming language is the most crucial part of the organization, one such choice we proposed to use in Java since it’s there from a long time and has got a great maturity, and with my experience working with enterprise organization, Java has become the safe play, since 100’s of API, tools, Workflows are built around it, and there is a rich programmers community on the social platform. Alas, there was no privilege to have, since the application was already built with Kotlin programming, in fact, the workforce was already trained with Kotlin, and getting a new programming language was real challenge.
After a week’s discussion with the teams, the company decided to onboard 100 developers by end of 2020, who should be ready to use and all participants of the training should know everything, but few with shallow dive and few with deep dive. And the segregation to be done on different departments like Development, QA, BA, UI, DevOps
Below are the single liner which was finally concluded with the company.
- The team uses Kotlin as the primary development language, and every participant who enters the floor should have a good understanding. For the language to learn Java is the pre-requisite (on the floor the team uses JDK 11)
- The application development shall be with SpringBoot. More on (https://spring.io/)
- The microservice architecture to be introduced with Kubernetes (https://kubernetes.io/)
- We can exclude servlets and JSP (As is encourages to have monolithic application development)
- Participants should know the usage of REST API
- The training shall have a TDD (Test Driven Development) – (https://junit.org/junit5/), DDD (Domain Driven Development) approach
- For mocking the services for TDD shall be MOCK-K (Mocking library for Kotlin) – (https://site.mockito.org/)
- One cloud service to be used, with the costing, availability, learnability we proposed AWS. (https://aws.amazon.com/)
- All the applications will be containerization with docker, and for orchestration need to use Kubernetes. (https://www.docker.com/)
- For storage MongoDB with replication (With replication factor of 1+2, for critical services 1+3, and there will be 1 slave with the delay of 12 Hrs) – (https://www.mongodb.com/)
- Kafka for messaging queue, because there is an integration with Springboot. – (https://kafka.apache.org/)
- All the training will be in a reactive approach, i.e., Springboot with reactive MongoDB.
- The logging/reporting to be on EFK (Elastic, FluentD, Kibana)
- For reactive approach spring with web flux to be used for the training which will ensure non-blocking
- Spring Netty to be used for deployment (Spring Boot automatically configures Reactor Netty as the default server).
- To management, Kubernetes application HELM is used (this is a mandatory tool) – (https://helm.sh/)
- Optional Prometheus, ISTIO (but giving the heads-up on these tools shall suffice) – (https://prometheus.io/), (https://istio.io/)
- For pipeline GO-CD – (https://www.gocd.org/)
- Code repo: BitBucket – (https://bitbucket.org/)
- Gradle – For build – (https://gradle.org/)
- Testing (QA)
- JDK 8 (but if we use JDK11, it should be okay)
- They work on the POM framework / POM Factory
- For automation the data is got from .json / mongod
- Framework with TestNG
- For Processing JSON to java (Jackson)
- For multi-browser testing Sauce lab
- For pipeline GO-CD
- Containers – Docker, Orchestration – Kubernetes
- Code repo: Bitbucket
- Gradle – to build
- Business Analyst
- All participants should have knowledge of Confluence and JIRA
- Out of all the participants, there should be about 3-4 who should have a good understanding of the Domain, assuming each batch shall have 20 participants.
- Code repo: Bitbucket
- There are multiple people whom the BA has to interact, Product Owner, Product specialist, the technical team (Technical Team Lead)
- Should take care of slicing the job, release planning, story points recorded (1,2,4,8)
- Each sprint is 15 days on the floor, but for training, it will be 1 week with smaller story points.
- Dockers to have a good level of understanding, and they should be exposed to Docker Compose.
- Kubernetes to have good understanding and all participants should know to get the audit report (of failover, load, etc)
- For pipeline GO-CD
- All participants should be exposed to Linux OS commands and writing shell scripting
- Networking and OS working (for talking between two containers in docker / Kubernetes)
- AWS will be the choice for all the deployment
- Configuration for the container one of these Terraform/Ansible/Puppet/Chef
- UI (User Interface)
- The team uses ReactJS as the library
- For Framework, NextJS is used, which is slowly picking up, and there is a lot of work done around it v/s the competitor like redux.
- React Hooks are used for state and other React features without writing a class
- The code coverage is JaCoCo, but in the next few months, the team is willing to have SonarQube. – (https://www.sonarqube.org/)
- Conceptually the application should have BFF, and the team believes to have XP programming style. As of now it is used by the UI team, eventually, other teams may incorporate based on the need and feedback.
- NodeJS is used in some part of the application, as they have some scripts which are stubbed.
- The IDE to be used preferably is VS Code
After knowing so many tools, API, programming language/s now its time to get the mindset of participants how is going to join me for this training the mindset for any participant is not to do a project-based, those were the old school style, be we would like to have a product developed by the end of the training. This makes us and the company to calculate the performance and just not the learning, measured with various models such as Krick Patrik Model, Kaufman model, etc.