After finishing my bachelor’s degree in computer science, I got a job as a consultant. In about one year, I worked at two very different projects. In the first project, we were 5 developers working on a case management system. The second project was devops driven, with between 20 and 30 developers working on an integration platform.
Project 1
tools
- Jira for issue management
- Confluence for documentation
- Gitlab for version control
- IDE - Intellij IDEA
project management
To ensure code quality we had a QA checklist, an excerpt:
- Are the tests green?
- Is the code properly formatted
- Does every public method and class have javadoc?
- Is there logic in the web-layer?
- semantic html
- not all divs
- Are generated files checked in?
As “everyone” else, we worked in “sprints” and had retrospectives. Status meetings were once per week.
Workflow
- Every developer worked on the same branch, not a feature branch, but more like a project branch
git pull --rebase
mandatory to avoid merge commits
- Each developer worked on an issue related to user stories
- Write code, write tests, set task to QA(quality assurance) when done
- get feedback from QA
- As a comment on the jira task
technology
Backend
- Java 8
- Spring framework
- Mostly SQL server, one Postgres database
- ActiveMQ as message broker
- mix of SOAP and REST
- Liquibase for schema management
- Solr as search platform
frontend
- Jquery
- KnockoutJS
- JSP, java server pages
- tagx and jspx files
- gulp
- less, compiled to css
- some ES6 with babel
- Mix of single and non-single page applications.
Since SQL server does not work on a mac, a SQL server docker container was used. This was the first thing I actually fixed on the project, before, mac users had to run SQL server in a windows VM.
deployment process
- Applications ran on windows servers
- Windows users could use a powershell script to deploy from their local machine
- Mac users had to transfer artifacts over remote desktop(shared folder) and login to server and execute a deploy script
- artifacts were war-files
project 2
tools
Same as project 1, except Github enterprise for version control.
project management
This project was devops driven. Developers were in addition to writing new code, responsible for deploying and monitoring the applications.
teams
- infrastructure, where I worked
- puppet, network and critical applications etc.
- Katalog
- directory service related, worked much with Apache directory studio
- Platform
- Worked on setting up Kubernetes and other bleeding edge tech
- Application and integration
problems
- the tasks ended up in a “stack”, since new tasks always arrived, some tasks were never started with
- a large backlog
Workflow
- Feature branches and merge into master via pull requests
- QA through code review on github
technology
- Java 7
- Spring framework
- application container - Jetty
- databases - Oracle DB
- message broker - ActiveMQ
- monitoring software - Nagios
- ELK stack
- indexing - elasticsearch
- log aggregation - log stash / filebeat
- log GUI - Kibana
- Configuration management
- Puppet, requires software installed on nodes
- Ansible, agentless
- binary repository managers - Artifactory and nexus
- F5 / Big-ip for load balancing, firewall and more
- Docker
scripts
There were a lot of scripts for automating tasks, examples:
- deployment
- posting messages to message queue
- finding out who is responsible for a component
- tailing logs
- deleting components
- checking component status and restarting components
It worked like git
and many other tools with subcommands. base_command sub1 sub2 --options
.
deployment
old method
Custom bash/python script. One problem with this approach was that to be able to deploy, every developer had to have a lot of dependencies installed on their machine.
new method
deploy via ansible playbook and a python flask app.