Introducing Stash Software™

Diagnosing the Problem of Today’s Pipeline

A typical production pipeline environment in VFX, animation and games is far more dynamic and fast phased than ever before. Technical directors and software engineers work very hard to catch up with the demand created by tight schedules, limited budget and ever growing expectations.

Building blocks of a production pipeline must be well architected, flexible and efficient in order to save money and time, while allowing team members working as productive as possible to deliver best possible product. After all, every single step, including modelling, animation, compositing and any other aspect of a production is done on top of a pipeline. Please remember, when I say pipeline I don’t only refer to tools, plug-ins, and applications that we provide in a production environment but also I refer how we develop and deliver them.

We could see two major type of approaches implemented by the studios when we take a look at how pipelines work nowadays. Namely;

  • Configuration file based system
  • Package based system

Configuration File Based System

This system is managed based on series of configuration files, which are hard-coded in their nature. Thus, if a change needs to be made, such as creating a development environment or releasing a new version of a tool, including changing/editing environments, these configuration files need to be edited manually. This system is clanky, labour intensive and not flexible enough to answer the needs of such dynamic production environment in any way. Due to the architecture of the of the system, you do not have multiple development or testing environments either. Therefore, you need to work on one task a a time.

I personally heard technical directors complaining that, editing these files and releasing new version of a tool might easily take up to 10 minutes every single time. If a technical director releases 3 fixes a day, which is far less compare to today’s expectations and practices, in a team where 15 technical directors work, this would add up to 7.5 hours of precious development time being wasted every single day on a task, which should be automated. Certainly, this is neither desirable situation in today’s production environment, nor is it something employers would like to make their employees to go through.

Package Based System

In this system you use packages in your local path to develop tools. However, the local path is not an environment and packages from it do not get used directly, which is a major drawback since you have to build and install the packages you work on, then you have to resolve an environment to be able to use them. Because of this very reason, changes you make are not reflected in real-time, and you have to repeat these steps over and over again for every single change you make in your code. Things could get even more cumbersome when you need to work with a DCC such as Maya, which almost always the case. Now you have to launch the DCC you work on as an another step on top of previous ones every single time you make a change in your code. In some cases creating symlinks may help, however not all ceases work with symlinks either. The system also requires manual labour and additional knowledge of CMake to setup a build process since it is based on it.

Neither approaches give you enough flexibility, such as having more than one development environment for dedicated tasks and switching among them, nor did they offer comprehensive API so you could take advantage of automating virtually everything in a production pipeline as far as packaging, developing, testing and releasing tasks go. 

I worked at studios where either one of these two solutions were implemented. Working with them wasn’t a great experience and bothered technical directors and software engineers a lot since they want to spend their precious time more productively on developing tools, plug-ins, scripts and applications instead of dealing with chores, which could have been and should have been solved and automated all along.

Introducing Stash Software™

Stash Software™ has been designed and developed in a way that addresses the problems I mentioned above while providing unprecedented flexibility and productivity. It does so by removing any clutter out of the way of developers and users a like. There is no hard coded configuration files to deal with for environments or building and installing packages every time you make a change in your code. Notable features of Stash Software™ are;

Dedicated Environments

Stash Software™ has purpose built dedicated flexible environments, which allow you to develop, test and release code without impacting or interfering ongoing productions. Thanks to these dedicated environments, you can develop anything without re-initializing environments. 

Dynamic Initialization

Dedicated environments in Stash Software™ are initialized dynamically, on demand, on the fly. There is no hard coded configuration files, no chores to deal with. You can jump one environment to another on the fly, whenever you need it. This gives you enormous amount of flexibility and boosts your productivity.

Multiple Development and Testing Environments

You can have multiple development and testing environments simultaneously in Stash Software™ where you can initialize the one you need. Therefore, you can have a dedicated environment for a dedicated task, which speeds you up in your work.

No Build and Installation Required

You do not build and install packages in Stash Software™ to use them, they just work from their respective environments! Thanks to dedicated environments, all changes are reflected in real-time too!

Powerful Packaging System

Stash Software™ offers simple yet powerful packaging system along with its API, which you can fully customize based on the requirements of your pipeline. Packages and their folder structure along with the built-in files are created automatically by provided API and commands. 

Release Tools

Stash Software™ allows you to customize all aspects of feature-rich built-in release tools via its powerful API, which you can use in order to introduce your own coding standards for your development practices to make sure that only production ready code gets released.

Built-In Packages

Stash Software™ comes with many built-in packages. These packages are designed and developed to answer specific needs, which make Stash Ecosystem™ well organized framework to work with.

Working with Applications

Stash Software™ has powerful app system where you can launch applications such as Maya, Nuke, etc. and customize the environment based on them for even more flexible production environment.

Highly Customizable

Stash Software™ offers highly customizable features including settings and callbacks, which are provided as Python modules so you can take advantage of Stash Software™’s flexible approach to production pipeline development.

Native Python Capabilities

Even though Stash Software™ is written in C++, it offers native Python capabilities since Python interpreter is embedded in Stash Software™ itself. Thus, you can use Python programming language whenever you need to customize Stash Software™ or its packages instead of dealing with hard coded configuration files such as yaml, toml, xml, etc.

Built-in Documentation

Stash Software™ has built-in documentation system based on Doxygen. So you document your source code and Stash Software™ takes care of creating documentation from start to finish.

Batteries Included

Stash Software™ provides Python, PySide and Doxygen out of the box to empower you in your development work.

Comprehensive APIs

You can utilize the API classes, that come with the built-in packages to boost your productivity of your development work since they are built that in mind.

Built-in Unit Testing

You write unit tests and let Stash Software™ run and report them before you release any package to make sure that your code is production ready. You can also use the provided commands and API to run the unit tests for any package whenever you want.

Collaboration Made Easy

Collaboration with other technical directors and software developers in your team is extremely easy since Stash Software™’s environment architecture is built from scratch for this very purpose.

Auto-Completion

Stash Software™ commands come with built-in auto-complete flags and flag values, which are awesome! Therefore, interacting with Stash Ecosystem™ in command line is a breeze.

Cross Platform

Stash Software™ is a cross-platform application that supports Linux, Mac and Windows operating systems. Thus, all your needs in terms of supporting all major platforms in your production pipeline are covered out of the box.

Detailed Documentation

Stash Ecosystem™ provides comprehensive documentation both for users and developers. Documentation for users are provided in this Confluence site. API documentation, which generated by using Doxygen is also provided so software developers and technical directors can leverage it in their development work.

Quick Overview Video

Please take a look at the quick overview video to get a sense of Stash Software™.

Contact

https://blog.safakoner.com
https://twitter.com/safakoner

About the author

As a seasoned software engineer, I've navigated through various roles across multiple departments, taking on diverse responsibilities ranging from team leadership to senior supervisory roles.

My approach to problem-solving is anything but conventional, and it's what sets me apart. I have a knack for enhancing the software development process, making it not only more productive and reliable but also an enjoyable journey for all involved. My track record includes delivering software products on time and within budget while consistently achieving remarkable increases in productivity.

If you're looking to fortify and streamline your development pipeline, I invite you to reach out to me without hesitation. Together, we can make your operations more robust and efficient, leaving a trail of satisfied stakeholders in our wake.

Contact Me
https://www.safakoner.com
https://twitter.com/safakoner
https://github.com/safakoner
Example API Reference