A lot of attention gets paid to the importance of workflow, especially in Development. But a tested and well-implemented workflow plan isn’t just process for process’s sake. A well-tuned workflow improves productivity, aligns team expectations and helps to define company culture. Improving your development workflow has the business impact of saving time and money by reducing wasted attention and keeping the focus on building new software.
In the last few years we’ve seen a crush of workflow software hit the market, and with the right tools you can better manage and automate the development process. A well-curated suite of tools helps teams to sharpen and track communication, manage clear expectations and responsibilities, and allow any one team member to pick up where someone else has left off. We rely heavily on tools like Slack, Basecamp, Zeplin, and Pivotal Tracker to make sure Design and Development are always in communication and able to understand where the project stands.
We’re always observing, tracking and implementing ways to improve development workflow. Whether you’re starting fresh on building a workflow plan, or adapting to accommodate a new project, there are always ways to improve and new things to consider.
Within software projects, there are inevitably problems that are difficult to predict ahead of time. The more sophisticated the project, the more unknowns there will be. Research and development is necessary to resolve those unknowns. This phase should be done up front so the resolutions are clear, rather than later as part of the development process when this could cause major delays.
We often work with clients on an initial R&D phase to answer any technical questions, especially when working with new technologies. We can then move forward quickly, with everyone feeling confident about technical decisions that have been made.
Many development teams are turning to Agile project methodology to organize goals for their product teams, which allows them to be more flexible in making changes to the process over time. A main component of Agile is the Sprint, which makes the work of a large-scale project more manageable by dividing it into smaller tasks, usually tackle-able inside of two weeks. Breaking tasks down to fit into two-week cycles makes it easier to prioritize and plan, rather than trying to stick to a long-term plan even as priorities change.
Estimating time requirements for software development is extremely challenging, as it’s next to impossible to predict when or how a ticket will cause project delays. Developers tend to estimate less time than is required, which often leads to projects going over time and budget. When working with short sprints the impact of unforeseen hiccups can easily be contained and managed.
At Yeti, we start each sprint by prioritizing the user stories (project tasks) to work on. Once the user stories are chosen, then we begin the collaboration between design and development to build out the feature or improvements.
As teams change, either with new hires or moving responsibilities, it is important to bring new members up to speed as quickly as possible. This reduces gaps in productivity and means sprints can keep rolling forward.
Copywriters, for example, use proofreading and editing as process tools to ensure that what they write is as close to flawless as possible. Developers have code reviews. Code reviews can be automated, done by peers, or both. The goal is to identify bugs early, ensure that coding standards are maintained, and generally keep the codebase healthy. Code reviews also provide a venue for providing valuable feedback to junior developers.
At Yeti, all code is peer-reviewed by at least one other developer. The reviews take place after the code and tests have been written and committed to source control. Ultimately the code a developer is writing, needs to be crafted not just for the machine running it, but also the future developer who is going to have to read it and make a change to it.
Continuous Integration and Continuous Deployment are recent practices that involve shipping tested code to users as early as possible. Continuous Integration requires developers to merge tested code into the main codebase immediately. Continuous Deployment involves pushing that new codebase to users once it is ready. By integrating code early, bugs and other issues can be discovered and addressed when fixing them is easier and cheaper. Automation is a big part of both processes, particularly testing, to ensure time isn’t wasted manually building, integrating and deploying code.
At Yeti, we merge code into a development branch once the code review is complete and all tests are passed with our CI tool. This development branch is tested manually against the acceptance criteria and provided designs. If all tests are passed, then it is merged into a staging branch. This staging branch is then deployed for a sprint review at the end of the cycle.
Agile makes it clear what is being worked on. Process and style guides make it clear how those tasks should be executed. Each part of the development and design process is a decision that needs to be made. Documenting key decisions in guides saves teams from having to take the time to duplicate that decision-making process in the future. Teams can execute quickly, focusing on building out the new features.
Without guides, you’ll see inconsistencies in the user interface and code standards. These inconsistencies lead to problems down the line within the user experience, when bugs are hard and expensive to fix. Process and style guides remove this risk from the project scope.
Getting development environments set up can also cause delays, especially when working with new team members. Larger companies that have multiple products and multiple teams run into this problem regularly when developers switch teams. It can take days from when a new developer starts until they are able to write their first line of code and even longer before that makes its way into production.
This setup process can, and should, take minutes instead of days. Utilizing virtual machines for the development environment and automated scripts to install the appropriate software and tools make a traditionally cumbersome process a lean one.
Virtual machine tools, such as Vagrant, help setup ready-to-go development environments that can be installed on the developer’s machine. This allows developers to have a fully working version of the system on their computer within minutes.
Applying proper attention, detail, and adaptability to your workflow doesn’t just benefit the success of the specific project. It’s crucial to the overall product, your company culture and your ability to innovate.
At our last Django Meetup Group event, Jayden Windle, the lead engineer at Jetpack, an on demand delivery company, talks building APIs with Django and GraphQL. Watch the video to learn more.
At the last meeting of the San Francisco Django Meetup Group, Wes Kendall gave a talk on how to make a bulletproof Django application by testing it with pytest. Check out his talk here!
Part of the Yeti Lunch and Learn series - our amazing developer, Resdan, gives a presentation on creating a reusable component library. Enjoy the video!