How to Customize Your Development Workflow Using Personalized Development Environment

Agoda Engineering
Agoda Engineering & Design
11 min readApr 18, 2024

by Sirisak Lueangsaksri

A Personalized Development Environment, or PDE, is a tailored approach to software development that places a high value on customization. By selecting from a diverse array of tools and plugins, developers can create an environment that perfectly matches their coding preferences and style.

Traditional development environments often lack the flexibility needed to accommodate the varied preferences and work styles of individual developers. At Agoda, where we have hundreds of engineers from around the globe, we can see each engineer has their own setups and work styles to suit their needs. PDEs revolutionize how we think about development environments, promoting tool flexibility and integration.

In this article, we explore various aspects of PDEs, from understanding the basic concept and its core values to practical guidance on getting started. Whether you’re new to the concept of PDE or already familiar with its benefits, this guide aims to provide valuable insights for everyone.

Understanding PDEs

The concept of a Personalized Development Environment (PDE) was introduced by TJ Devries, a core Neovim contributor. Devries uses the term PDE to address the question, ‘Why would you use Neovim?’, though the relevance of this question extends to most text editors and Integrated Development Environments (IDEs). For more insights, you can also watch his video explaining the term and answering the question, ‘Why would Neovim be a good candidate for building a PDE?’.

Typically, developers are familiar with ‘Text Editor’ and ‘IDE’ (Integrated Development Environment). Text editors are simple tools meant primarily for editing plain text files, whereas IDEs integrate text editors with additional development tools like version control systems, debuggers, test runners, and build systems to facilitate more complex software development tasks.

Unlike traditional setups, a PDE emphasizes the compositions and extensibilities of tools to tailor every aspect of the software development environment to individual needs. This allows developers to streamline their workflows and focus on what truly matters, enhancing productivity and efficiency. At Agoda, one of our core values is to move fast and be efficient. We leverage the flexibility of PDEs to speed up our processes, enabling our teams to achieve more with less by aligning their tools with their specific work preferences and needs.

PDE is not about what tool to use. PDE is the concept of creating your personal working environment.

Core Values in PDE

As PDE focuses on the customization and integration of diverse tools, you will be required to make numerous decisions, ranging from each individual user interface element to how each key-binding is mapped. Additionally, selecting a foundational tool is crucial as it determines the overall look and functionality of your PDE.

Murilo Pereira, a software engineer at Argo AI, formulated a framework of core values to assist in these decision-making processes. These core values serve as guidelines to prioritize features based on their relative importance; choosing between two valuable attributes depends on which aligns best with your fundamental principles and preferences.

As we explore the various options available in the “Foundations” section later, you’ll discover that each choice comes with its specific set of values and necessary trade-offs. These values are put here as a reference to help you make informed decisions, allowing you to select tools that best align with your preferred working style.

Agoda’s core value for being a scientist, doing an experiment and measure is a perfect way to describe the process to explore how each of these foundations or base tools suit your working styles. This value is crucial as you explore different foundational tools and base systems to find what best suits your workflow. It’s akin to test-driving a car before making a purchase; by experimenting with different tools, you gain firsthand experience of their functionality and how they mesh with your needs, enabling a more tailored and effective setup.

Characteristics of PDE

PDE can be likened to assembling a custom-built PC. Many of the considerations overlap, as both involve selecting components that best meet individual needs. Similarly, using an IDE can be compared to opting for an all-in-one PC, where everything is pre-configured and integrated for immediate use.

Assembly

PDE/Custom-built PC: Required
IDE/All-in-one PC: Fully assembled

Since PDE focuses on personalization, you will have numerous decisions to make regarding appearances, functionalities, and behaviors. Many find this process enjoyable as it offers opportunities to explore new tools and workflows. For those seeking quicker setups, numerous presets or distributions are available that might suit your working style, although using these means adapting to someone else’s workflow instead of tailoring the environment to your own preferences.

Tailored to Needs

PDE/Custom-built PC: Yes
IDE/All-in-one PC: Depends

Your preferences significantly influence the number and type of tools you incorporate into your PDE. Typically, an IDE comes equipped with a suite of standard tools such as a text editor, debugger, test runner, build system, version control, and others. If you don’t use all these tools, you may find yourself frequently switching between different workflows for each task, which not only consumes time but also requires hardware resources that are required to keep those tools running.

On the other hand, PDE includes only the tools you select, tailored specifically to your needs. This self-curated approach means your PDE consumes fewer hardware resources and streamlines your workflow, keeping everything directly relevant to your specific development activities.

Upgradability/Future-proof

PDE/Custom-built PC: Highly flexible
IDE/All-in-one PC: Depends

Many all-in-one PC manufacturers now offer fewer upgrade options. If you require a more powerful CPU or greater storage capacity, you might find yourself needing to trade up or purchase a new machine. Similarly, the adaptability of an IDE often depends on the popularity of specific workflows. For instance, if you’re using git for version control today and switch to a different system tomorrow, you may have to wait for the IDE developers to update their software to support the new tool. In contrast, a PDE allows you to integrate new tools at your convenience without waiting for external updates.

Integration

PDE: Through provided supports
Custom-built PC: Through drivers
IDE: Fully integrated and support
All-in-one PC: Fully integrated

Incorporating more tools into your PDE can increase the maintenance cost required to keep it functioning optimally. Some tools might seamlessly integrate with your workflow, while others may need specific configurations to operate effectively. This is akin to custom-built PCs, which require specific drivers for each component to function together, though not all components might be fully supported, potentially limiting functionality.

On the other hand, IDEs and all-in-one PCs typically offer a well-maintained and integrated set of tools that provide a seamless user experience without the need for extensive customization or maintenance.

Customization

PDE: Through open-source-software
Custom-built PC: Through custom hardware
IDE/All-in-one PC: Depends

The customization capabilities of a PDE typically equip you with many of the tools you need. However, specific challenges may require tailored solutions. Fortunately, PDEs enable you to integrate your own tools into the workflow, providing an opportunity to share your creative solutions with others through open-source software. Your unique approaches could inspire new ideas and influence how we approach problems differently.

Benefits of PDE

The advantages of a Personalized Development Environment include tailored user experiences, optimized hardware utilization, and enhanced portability. For example, my personal setup runs smoothly on a Raspberry Pi Zero (a box with green LED on the right), with an iPad serving as a remote terminal and my favorite Thai Milk Tea (Cha Nom) beside it.

Another good example we had at Agoda is the ability to integrate existing tools into our workflows. A lot of our internal tooling has been integrated with AI power. This integration spans from automated code reviews to responding to internal queries on Slack. These tools are widely used across our collaborative platforms, allowing us to incorporate them directly into our individual PDEs. For instance, we developed an internal tool that integrates GenAI into the command line, similar to GitHub Copilot in the CLI. This tool is capable of executing commands, answering queries, and processing files to extract or transform data, all from a single interface.

Setting up a PDE does require effort and the returns on this investment depend heavily on the time and energy you are willing to dedicate. Building a PDE from scratch is time-consuming but it offers profound learning opportunities about the underlying mechanisms of the tools we use daily.

Furthermore, if you encounter a functionality gap in the tools you use within your PDE, you can directly contribute to their development. Whether it’s submitting a bug report, suggesting a new feature, or creating a pull request, these actions not only help improve the tool but also deepen your understanding of its internal workings and the collaborative process behind its development. This hands-on involvement can provide insights into technical testing and the strategic decisions that shape software, offering a unique perspective that is rarely visible in more conventional setups.

Foundations

There are numerous tools available to help you begin building your own PDE. Here, we’ve highlighted just a few foundational tools that can serve as a starting point. Additionally, you can consult the Values table referenced earlier to better understand what each tool offers and to determine which ones align best with your specific needs.

Visual Studio Code

You may already be familiar with Visual Studio Code, which is an excellent platform to start building your PDE. It offers thousands of extensions to customize your setup and even allows you to create your own. With its best-in-class language server protocol integration, you can enjoy powerful code completions and helpful syntax analysis. However, keep in mind that its graphical user interface may limit how much you can customize its appearance to your liking.

Pros and Cons of VS Code

Pros:

  • Ample Customization Options: Offers extensive capabilities for personalizing the environment.
  • Extensibility through Extensions: Easily enhanced with a wide range of available extensions.
  • Robust Language Integration: Features strong support for numerous programming languages.

Cons:

  • Dependence on Electron: Requires a GUI, which can be resource intensive.
  • Dependency on Extensions for Some Functions: Certain functionalities can only be achieved through specific extensions.

Distributions

Emacs

Emacs is renowned for its versatility, capable of transforming into nearly any tool you might need — from an email client and music player to a Slack client — using Emacs Lisp (Elisp). It also has Org-mode, which is widely known for its powerful feature for task management. However, Emacs is also known as ‘a great operating system, lacking only a decent editor,’ primarily because many of its key bindings begin with the ‘Control’ key; this causes a pinky finger fatigue symptom known as ‘Emacs pinky.’

Pros and Cons of Emacs

Pros:

  • Fully Customizable Environment: Users can tailor every aspect of Emacs to fit their preferences.
  • Extensible through Elisp: Enhance functionality or add new features using Emacs Lisp.
  • Org-mode: Offers powerful features for task management and organization.
  • Available as both GUI and TUI: Provides flexibility in how it is used and accessed.

Cons:

  • Complex Key Bindings: Often criticized for its challenging key bindings that can lead to ‘Emacs pinky’. Evil mode can be used as a partial solution to this.
  • Single-threaded: Limits performance and can affect responsiveness during complex operations.

Distributions

Neovim/Vim

With its widespread key bindings and availability, Vim, along with its fork Neovim, is ubiquitous, running on everything from Linux servers to personal Macs. This makes it an excellent foundational tool for a PDE. Once you master the Vim key bindings, you’ll unlock a highly efficient text editing experience that operates almost as quickly as you can think. With its powerful API, you can build a custom workflow right inside your text editor, enabling you to do more in just a few keystrokes.

Pros:

  • Extensive Customization Options: Allows for deep customization to tailor the editor to your specific needs.
  • Extensibility: Can be enhanced and modified through Lua or Vimscript, offering flexibility in functionality.
  • Ubiquity: Widely available across different platforms, making it accessible for various uses.

Cons:

  • Primarily TUI (Text User Interface): Mainly operates in a text-based interface, which might not be preferable for all users.
  • GUI Layers Available but Limited: While graphical user interfaces exist, they largely depend on the underlying TUI, which may not offer a seamless graphical experience.
  • Performance Issues with Large Files: Can struggle to efficiently handle very large files, potentially slowing down performance.

Distributions

Getting Started with PDE

Several options are available to help you get started with Personalized Development Environments (PDE). One effective approach is to select a base tool from one of the distributions previously discussed. However, be aware that distributions often come with numerous plugins and extensions, which can be overwhelming if your goal is to heavily customize your PDE. In such cases, it might be beneficial to explore the tool’s documentation or adjust the application settings, which can provide further customization opportunities.

If you are planning to use or are already using Neovim, kickstart.nvim is a great place to start customizing your own PDE, accompanied by this video from TJ Devries himself. Alternatively, this demo configuration demonstrates how you can customize a base tool to your favorite work styles by attempting to give Neovim a VSCode-like experience. Or, if you feel adventurous, you can browse through my personal dotfiles (more details about dotfiles here), where I share all the configurations and settings for my own personal PDE setup.

Conclusion

PDE is simply one option among many that you might consider for enhancing your development process. If your current workflow is effective, there’s no urgent need to adopt a PDE. Instead, focus on understanding your specific needs and challenges rather than immediately changing tools. It’s crucial not to adopt any solutions impulsively, whether they are widely used or not, without assessing how they address your unique requirements.

Once you have a clear understanding of your needs, evaluate the available tools that align with your preferences. Select only what is essential. Applying the “You Aren’t Gonna Need It” (YAGNI) principle allows you to offload unnecessary features to more specialized tools. Embracing the “Keep It Simple, Stupid” (KISS) principle can significantly reduce complexity and may also decrease the size of your PDE.

To give you an example, if you rarely do version control right in your text editor, do not integrate it into your text editor. You might find that you have more options that are not only more powerful but might as well better suit your workflow.

It is the ability to solve the problems YOUR way.

--

--

Agoda Engineering
Agoda Engineering & Design

Learn more about how we build products at Agoda and what is being done under the hood to provide users with a seamless experience at agoda.com.