The Infi Test #
A quick check to see if you're roughly following The Infi Way. A sort of Joel Test.
- Are developers seeing real users?
- Is code being reviewed?
- Are you running automated builds with tests?
- Can you automatically deploy to production?
- Are repositories self-documenting?
- Does the team autonomously pick fitting technology?
- Does the team autonomously choose their own process?
- Is the process evaluated periodically?
- Is work refined before it's being done?
- Are outages noticed and handled proactively?
- Is knowledge actively shared within- and outside of the team?
- Are secrets managed correctly?
- Are there (proven) working, encrypted backups?
We aim for maximum score, though sometimes you still have to work towards it.
User-centric #
We work for the client of our client. They use software to achieve their goals, our goal is to help them with that.
How we like to do this:
- Direct contact with users
- Prototyping, iterate quickly
- Work user-centric
- Close collaboration with designers
- Work should deliver value
- Work from "why"
Concrete examples:
- User testing
- Google "Design Sprint"
By us:
- Blog (Dutch): Walking Skeletons
- Site: Our clients (and their users!)
Principles #
We work in a modern way, aiming for quality. "First time right" is also cheapest in the end.
How we like to do this:
- Modern version control
- Up to date tooling, frameworks, and libraries
- Automation where possible
- Strong test coverage
- Linting, code quality checks
- Pair programming
- Code reviews for (nearly) everything
Concrete examples:
- Git (flow chosen per project)
- Unit tests, integration tests, end-to-end tests
- Sonarqube, ESLint, etc.
- SOLID (of DAMP), YAGNI, KISS
- Domain-Driven Design
By us:
Code is the Source #
Source code is just that: the source. Self-documenting, so usable for any developer, our own or otherwise.
How we like to do this:
- Architecture in the source
- Clone & run repositories
- Continuous integration, continuous delivery
- DTAP
- Infrastructure as code
- Ad hoc scripts in source control
- Backup scripts in source control
- Monitoring and alerting defined in code
Concrete examples:
- Architecural Decision Records, C4 Model
- Ansible, Docker, Terraform
- GitLab (SAAS or self-hosted), GitHub
- GitLab CI, GitHub Actions, Azure Devops, CircleCI, Octopus
By us:
Used Technology #
We prefer using "the best tool for the job"; we're generalists who can quickly specialize when the need arises.
How we like to do this:
- We do custom-made software; aiding in buy-over-build where needed
- Hosting (usually) in the cloud
- Back-end in a modern stack
- Front-end normally with mature frameworks
- Mobile cross-platform, unless "native" really adds value
- Data storage fitting for the project
Concrete examples:
- Azure (via our Microsoft partnership), AWS, Google Cloud
- .NET Core, PHP (with a modern framework), or Node (with TypeScript)
- Vue, Angular, React
- TailwindCSS, Bootstrap
- ReactNative
- SQL, Document-storage, Service Buses, etc.
By us:
Process and Team #
Teams work autonomously, but usually pick an agile way of working. With a Product Owner from the customer.
How we like to do this:
- Team determines their own process
- Continuously improve the process
- Product Owner from the client
- Scrum master (can be a developer or project manager)
- Maintain a planning together
- All team members help with refinement
- Minimum of 2 people per team, split up from 6-7 upward
- Call in help from colleagues in other teams
- Regularly work together with the client at the same location
- Testers, designers, and other experts called in when needed
Concrete examples:
By us:
Craft #
Building custom software is a craft. We are happy (and proud!) to show what's going on behind the scenes.
How we like to do this:
- Active knowledge sharing
- Plenty of studying
- Invest in tooling
- Great hardware
- Experiment
- Monitoring and alerting
Concrete examples:
- Presentations (internally and externally)
- Study groups, self-study
- Visit conferences and meetups
- Kibana, Sentry, Zabbix, etc.
By us:
Foundations #
Some things speak for themselves: they are always part of the deal. Think Security, Performance, Backups, a critical note, plus the opportunity to be ourselves.
Those foundations include:
- Backups, including encrypted offsite backups
- Security in code, and a secure way of working
- Security audits when sensible (possibly via audits)
- Performance, for example via load testing
- Be critical of features, come up with alternatives
- Buy-over-build suggestions where that makes sense
- OS (Windows, OSX, Linux) as a personal choice per developer
- Open Source usage and contributions
- Meetups: host and organize
- Be ourselves: (Dutch manifesto) "Wij zijn mensen."
Concrete examples:
- OWASP
- Password managers, 2FA, GPG, SSH
- Locust, OctoPerf, JMeter
- Auth0, Stripe, SendGrid, Contentful, Lokalise, etc.
- Always lock your laptop!
By us:
- Manifesto (Dutch) Het Infi Manifest
- Blog: SPA Necromancy
- Blog: Launching FOSS