Consulting Services

What are you trying to achieve? Your organizational goals and constraints, your users’ needs and expectations, the capabilities of your tools and development processes—all of these feed into the design choices you face.

  • Slow code can be a costly bottleneck or drive away users—but in other situations it might not matter.
  • Software quality depends on the nature of your product, its place in the development lifecycle, and which part of the product you’re working on. For an overview, you might enjoy a talk I gave at PyCon 2017.
  • Architecture and development processes that make sense for large organizations aren’t appropriate for small organizations, and vice versa.

I’m here to help you achieve your goals, by designing software that works for your particular circumstances and situation. You can learn more about me here.

From science to software engineering

Scientists and Data Scientists develop software differently than software engineers—and for good reasons. But eventually you need to bridge the gap, and take algorithms and Jupyter notebooks and turn them into production-ready software: scalable, tested, deployable.

As an example, I have taken some half-finished gene sequencing algorithms involving very large data volumes, and built a working, correct data processing pipeline.

Face similar problems? Get in touch.

Performance optimization

Are your server costs too high, because your code is too slow? From reducing computation cost to increasing parallelism to reducing memory usage, I can help lower your resource needs and cut your costs.

Is your application too slow? Get in touch.

Test suite and build system improvements

Test suite too slow? Docker builds take forever? Do you lack the bandwidth to both work on features and fix your development bottlenecks?

I can help make your test suite run faster, speed up your Docker builds, and make your team more productive.

Interested? Get in touch.

Eliot support contracts

Eliot is an open source causal logging library for Python. Unlike most logging libraries—which give you a stream of disjointed and unconnected pieces of information—Eliot gives you a causal trace of your program’s execution.

Eliot can help you:

  • Debug logic errors far more quickly than traditional logging.
  • Pinpoint performance problems, not just by function, but by inputs as well.
  • Trace your program’s execution across multiple processes, making it ideal for small-scale distributed systems and scientific computing.

If you’re interested in a support contract for Eliot, please get in touch.