This how-to gives a primer on methods to quickly set up collaborative software development environments, especially for running training, workshops, hack-a-thons, and innovative team events.
Software engineers no longer work in just a specific language or narrow skill set. Rather, the new breed of developers work an entire stack and framework, allowing them to participate in the entire life cycle of product engineering.
While this allows for much more well-rounded developers, it causes a challenge in terms of getting everyone’s applications, OS, dependencies, resources, and more all in sync.
Wouldn’t it be nice if you could just plug in a USB stick and have everyone start collaborating from minute 1?
Here’s a primer on how to do exactly that…
(By the way, we do not sell a product for this. It’s just a practice we use internally to solve a real life problem. We hope you can use this information to solve your own challenges. If you have any questions or want more specifics than you see here, just ask in the Comments section below or use one of the Contact Us forms across the site.)
Rapid, Scalable Software Development by Small Teams
Thanks to new application frameworks, updated design philosophies, and web-based architecture, it’s now possible for small teams to rapidly deploy enterprise-grade applications. These applications can leverage PaaS (Platform as a Service) to scale up and down to meet demand.
Small teams allow companies to operate much more efficiently, reduce silos and complexity, and bring ideas to market much more quickly.
Best-in-class companies may even take this paradigm to the extreme and host special offsite events to chug out a high volume of new ideas in short sessions.
We love this approach. We can get several groups of people together and issue a challenge. In a very short time, different teams come up with unique solutions that we can then present back as innovative value adds to our customers.
In this case, getting everyone on a standard base platform helps immensely. Time spent normalizing environments, syncing dependencies, and dealing with the administrative overhead not only kills time, but also creativity and that “get it done” mentality.
Software Engineering Training Events and Workshops
Similarly, if your company holds training events, workshops, or other events where you are assisting people you haven’t met improve their skill sets, you have a similar challenge.
Wouldn’t it be nice to plug in a USB stick and have everyone start with the same, connected development platform?
Rather, you’re likely setting up classroom computers the entire day beforehand (if you get access to them) or spending the first several hours of the class getting everyone’s computer up to speed with the right requisite applications and dependencies. This can be even tougher if you have mixed OSes across your participants.
We know this one well, as BETSOL regularly provides special training to campuses. We help software engineering students in their final year of school, helping them bridge what they’ve learned to real-world enterprise development processes and product life cycle management.
For example, we cover topics such as:
- Full-stack application development using contemporary frameworks
- How to deploy and maintain Generally Available applications
- Cloud engineering and PaaS
- Modern enterprise programming paradigms and constructs
- How to design RESTful web services
These are awesome topics that the students look forward to, but spending time configuring everyone’s computer to accomplish this just isn’t an option.
How to Quickly Set Up Software Engineering Environments
Having a lot of practice (and agitation) in this area, we’ve come up with some best practices and a simple USB flash drive method that’s a real stand out. It has eliminated our setup time at events, and most importantly…gets our software engineering teams working creatively on projects faster.
1. Put the entire environment on a bootable USB flash drive
We go with a simple bootable USB flash drive. When tuned properly, they run shockingly well. Since we take these into school labs, work environments, and even provide them to people with their own laptops, we chose a conservative route and used USB 2.0 as the base. We find the environment only requires around 24MBps, which is well under the 60MBps of the 2.0 standard.
The sticks are 16GB, which provides for a solid environment and 4GB that can be used for persistence. That is, the flash drives are able to save settings and files the user creates. The flash drives can be popped out of one computer and into the other, building upon progress seamlessly.
This creates a platform-independent approach to development that is much needed. These flash drives create a homogeneous environment that can be used by multiple people.
The base OS we use is Lubuntu (a lighter weight version of Ubuntu) Linux. We do tweak the install to run on lower spec machines by removing unnecessary applications and dependencies. You can also make numerous tweaks to optimize for performance.
2. Install and prep the framework
This is really where the job becomes custom. Based on the objective of your team, you will want to install different components. Here are the main considerations:
- The framework (such as Play or Spring)
- The source control (Git), to allow checking in and maintenance of code versions over the period of the even
- The integrated development environment (IntelliJ), which we further tweak to reduce footprint
- JDK (for Java)
- SSH server for remote login and collaboration
3. Promote collaboration and a cluster environment
Software engineering is no longer a single player game, and heck…it’s no fun to play alone anyway. You shouldn’t learn on an individual basis either.
With than in mind, we also want this USB stick model to connect everyone involved in the event. Partners can collaborate and help each other out.
And more importantly, since you’re dealing with limited resources, this allows you to pool machine resources. This allows you to load balance by sharing data servers and splitting applications.
An easy problem to solve is to get one person completely productive in a “singleton” environment, but relative productivity (which is usually the case in the industry) is a hard thing to achieve in such workshops. A collaborative spirit and setup not only distributes the resource utilization, but also gives each participant a sense of inclusiveness.
When you’re thinking big about collaborative development environments, think small. We’ve been pleasantly surprised by how much we can get out of pre-configured USB sticks. The performance is there. The overhead is not.
Our work teams can have highly intense, rapid development sessions. And our training classes get in to the fun stuff from moment one.
If you’re looking to maximize creativity, get your small teams together and get to work.