Partners

Become a Partner

What to know about becoming a Typesafe Certified System Integrator (SI)

Thanks for your interest in becoming a certified SI with Typesafe. In order to provide the best possible experience for our technology users across the globe, we’ve created this “SI Capabilities Checklist” to give you an idea of the expertise and capabilities our customers need from our partners. Please review it, and get in touch with us using the form below.

Capabilities Checklist for Potential System Integrators

Scala Capabilities

  • Object-Oriented concepts (packages, classes, inheritance, case classes, stackable traits, the Cake Pattern and what is good and bad about it, etc)
  • Functional Programming concepts (Referentially transparent, immutable, expression-oriented, inputs/outputs, strictness versus laziness)
  • Have you defined your own types that implement combinators (data sanitation)
  • Explain how for-comprehensions are desugared
  • Pattern matching
    • Bonus question: how is a pattern match that uses an extractor desugared
  • Implicits (arguments, classes, conversions)
    • Typeclasses
    • The Enhance Your Library pattern
  • Collections
    • Describe one collection in depth
    • Structural sharing
    • Performance characteristics
  • Type Theory (terms/types, variance, type bounds)
    • The Scala type system
    • Self types
    • Path-dependent types
    • Type recursion
  • Macros
    • Black box versus white box macros
    • The Macro Paradise project
    • Quasiquotes
  • Asynchrony
    • Understand Asynchrony and non-blocking, concurrent and parallel
    • Futures and Promises, the Async library
    • ManagedBlocking
    • Executors and thread pools,
    • Parallel collections and Blitz
    • Amdahl's Law
  • Error handling (Try, scala.util.control._, UncaughtExceptionHandler)
  • Testing
    • JUnit/TestNG
    • ScalaCheck
    • ScalaTest
    • specs2
    • JMH
    • Volume (Gatling, Bees with Machine Guns, wrk2)
  • Scala.js
  • Static analysis/toolchain (linter, code coverage, security, style enforcement)
  • JVM tuning (Garbage Collection strategies, region sizing and GC tuning, JVM flags, Java Microbenchmarking Harness, HDRHistogram)
  • Thread safety (StampLock and new Java 8 constructs, reentrant locks, read/write locks, volatile fields and memory barriers)
  • sbt (native packager, multiple sub-projects, have they written plugins?)

Akka Capabilities

  • Scala API
  • Java API
  • Actor basics (create actors, send messages, routing strategies)
  • Supervision and lifecycle (directives, deciders, hooks)
  • Futures/Promises in actors
  • Agents
  • Spray & Akka HTTP (Spray Can, the Magnet Pattern, directives, routing DSL)
  • CQRS/ES
    • EventSourced
    • Akka Persistence
    • Eventuate
    • Serialization strategies
    • Storage backends
  • Data Replication
  • Serialization
  • Akka IO
  • Akka Streams
  • Remoting
  • Clustering
    • Routing Strategies
    • PubSub pattern
    • Distributed Workers pattern
    • Singleton vs Sharding
  • Akka Camel
  • Testing
    • Akka TestKit (Probes, TestActorRef)
    • HTTP TestKit
    • Multi-JVM tests
  • Tuning (know various Dispatchers and when to use them, isolation of thread pools, batching through the throughput setting)
  • Monitoring

Play Framework Capabilities

  • Scala
  • Java
  • Websockets
  • Templating (Twirl, others?)
  • Routing/reverse routing/filters
    • Implementing in Scala
    • Configuring in Scala and Java
  • ORM
    • Anorm
    • eBean
    • Slick
    • JPA/Hibernate
  • Security (authentication, authorization, SSL, libraries for storing passwords like bcrypt/scrypt)
  • sbt (understands multi-project setup, has written plugins
  • sbt-web (Know the capabilities of sbt-web, what plugins exist, how to configure them, have written an sbt-web plugin)
    • Asset fingerprinting
    • Asset pipeline
  • Forms/Data Binding
    • Scala json API
    • Scala form API
    • Java json API (jackson)
    • Java form API (spring-data)
  • Client-side development (similar to sbt-web, but more about knowing the general approaches to client side development, what tech exists, various approaches to optimising client side apps such as fingerprinting,concatenation, minification, CDNs, etc)
  • Plugins (Have written a Play plugin, where plugins fit into the Play lifecycle, etc)
  • Asynchronous programming
    • Futures/Promises
    • Iteratees
    • Integrating with Akka
  • Action composition
    • In Scala, action builders etc
    • In Java, via annotations
  • i18n/localization
    • messages
    • number/date formats
  • Tuning (Coda Hale Metrics, Bees with Machine Guns/Gatling, latency measurement)
  • Monitoring

Big Data Capabilities

  • Hadoop/MR (they understand the legacy big data technologies and have used them)
  • Search
    • SOLR/Lucene
    • ElasticSearch
  • Kafka
  • Scalding/Summingbird
  • Spark
    • S3/HDFS
    • Standalone mode/YARN/Mesos
    • Streaming
    • GraphX
    • MLlib
  • Data science
  • Machine learning

Deployment Capabilities

  • Cloud
    • AWS (S3, EBS, ...)
    • Rackspace
    • SoftLayer
  • Continuous Integration (CI)
  • Continuous Delivery / Deployment (CD)
  • Autoscaling (e.g. Monitis combined with Nagios or New Relic)
  • Configuration Management (Puppet/Chef/Ansible)
  • Virtualization (Vagrant/VirtualBox)
  • PAAS (CloudFoundry, Stackato, Azure, OpenShift)
  • Containers (Docker, Rocket)
  • Deployment management (ConductR, Marathon/Chronos, Kubernetes)
  • Mesos/DCOS

Ready to get in touch?

Just tell us a little bit about yourself by completing the form below and we’ll get back to you as soon as possible.