Services
How we work.
These cover almost everything we do. Most projects begin as one of them and change shape over the years.
Full project delivery
We take a system from the first client interview through infrastructure design, technical documentation, programming, testing, deployment and user training. One team stays accountable for the whole path, so there is no handover where responsibility goes missing.
- Interview
- Infrastructure
- Documentation
- Programming
- Testing
- Deployment
- Training
Testing runs through the whole path: unit, integration and end-to-end suites, with load testing before go-live. Once a system is live we monitor it, so a degradation is usually found before anyone reports it.
The team stays with the system after release. Several of the systems we built this way have been in production for more than a decade, maintained by the engineers who designed them.
Engineers in your team
Developers who learn a client's domain and processes, then work inside the client's team on the client's working day. Engagements run for years, and the people on them do not rotate. This is the arrangement most of our longest-standing clients use.
We work from Skopje on Central European time, using the client's own repositories and tooling.
Customer-facing platforms
Systems a client's own customers use directly: booking, ticketing, investor and self-service portals. We build the interface, the services behind it and the database underneath as one piece.
The usual shape is an Angular or React interface over Spring Boot services and a PostgreSQL database, deployed with Docker and Kubernetes. Where a client already runs on Oracle or on its own infrastructure, we build against that.
Mobile applications
Native iOS and Android applications, built in Swift and Kotlin. They work against the same services as the web system, so a change to a business rule does not have to be made three times.
Where a case does not justify maintaining two native codebases we use Flutter, and we will say which of the two we think fits before any code is written.
Internal and regulated systems
ERP, distribution and reporting systems for processes that no off-the-shelf product covers. We take these through analysis, project management, development, implementation, training and support.
We have built systems of this kind for capital markets, pharmaceutical distribution, public transport and heavy industry. In those sectors audit trails, traceability and reporting are specified at the start, because they are reviewed from outside the company.
Legacy systems and integration
Connecting new software to systems that cannot be replaced, and replacing the ones that can. A project usually begins by establishing what the existing system actually does, since that behaviour is often undocumented and often the only remaining record of the process.
We have rewritten legacy billing and database systems, migrated their data, and built against third-party services we did not control.
Automation and AI
Taking manual steps out of processes that already work: scheduled data processing, document handling, and language models where people are currently reading something and typing it in somewhere else.
We build this into the system that already holds the data, mostly in Python. Where a model is involved we are specific about what it may decide and what stays under human review. These are regulated environments, and an unexplained output is not an answer.
Technology
What these systems run on.
The core has been Java since 2006. Nearly everything around it has been replaced at least once. We choose tools a client can still hire for in ten years, and we keep them current.
Application core
Where the business rules and transactions live.
- Java
- Spring Boot
- Spring Security
- Hibernate / JPA
- Keycloak
Web interfaces
What people use to do the work at a desk.
- Angular
- PrimeNG
- React
- TypeScript
Mobile
Native where it matters, cross-platform where it does not.
- Swift
- Kotlin
- Flutter
Data
Transactional schemas, reporting, and migrations off legacy databases.
- PostgreSQL
- Oracle
- MySQL
- Redis
Messaging and search
The traffic between services, and finding things in a lot of records.
- Kafka
- RabbitMQ
- Elasticsearch
Testing
Unit, integration and load, run on every commit.
- JUnit
- Mockito
- Testcontainers
- JMeter
- k6
Build and deploy
How a release reaches production.
- Docker
- Kubernetes
- Jenkins
- GitLab CI
- GitHub Actions
Monitoring
How we know a system is healthy without being told.
- Prometheus
- Grafana
- Zabbix
We deploy into whatever a client already runs: AWS, Azure, Google Cloud or their own datacentre. Node.js appears where a project calls for it.
Start with the problem.
Describe what is going wrong or what is missing, rather than the solution you have in mind. We will come back with how we would approach it.
Or write to contact@artemisoft.mk · +389 2 3229 622