A Project Manager’s Guide to Time Management

Tech Culture

by Doug Melvin As a professional and consulting services firm within the ever shifting technology industry, Kenzan is trusted to consistently deliver high quality products and services. We take this expectation seriously and use the most progressive tools and approaches to ensure we meet those standards. Kenzan’s Project Management/Business Analyst (PM/BA) team is critical to…

by Doug Melvin

As a professional and consulting services firm within the ever shifting technology industry, Kenzan is trusted to consistently deliver high quality products and services. We take this expectation seriously and use the most progressive tools and approaches to ensure we meet those standards. Kenzan’s Project Management/Business Analyst (PM/BA) team is critical to our success as they support and guide the development teams through each project.

Working between multiple internal and client teams, our PM/BA’s plan, consult, organize, communicate and manage a vast amount of resources and information each day. To make sure projects are meeting deadlines and teams are communicating effectively, time management and prioritization are key.

Luckily, there are some techniques that can help keep the days running smoothly.

The Eisenhower Matrix
While navigating multiple projects, the Eisenhower Matrix  helps project manager organize their days while juggling unexpected tasks. Based on the criterion of importance and urgency, PM/BA’s sort their tasks and complete, delay or delegate  by categorizing them into one of the below four quadrants:

Time management means prioritizing your tasks
Source: http://www.businessinsider.com/dwight-eisenhower-nailed-a-major-insight-about-productivity-2014-4

The simple framework of the matrix allows for easy visualization without  complicated tools; a whiteboard or corkboard will do just fine. or those interested in a more portable method, Trello published a great blog post on how to use their tool to apply the Eisenhower matrix. If you’re familiar with Agile, an Information Radiator can also be used to visualize and sort tasks.
EisenhowerRegardless of how you draw the matrix, getting all the information out of your head and organized in one place makes decision-making less arduous and your work day more productive.

The Pomodoro Technique
Instead of racing to a deadline or fighting the lure of procrastination, the Pomodoro Technique is a simple time management system that breaks the work day into intervals with short breaks designed to eliminate burn-out and fight distractions.

Created in the late 1980’s by Francesco Cirillo, the approach divides each day into 25 minute work-periods — or Pomodoros — that are surrounded by short and long breaks. Short breaks are 5 minutes; long breaks are 25 minutes and are allowed only after four Pomodoros have been completed. Work should be done consistently through each Pomodoro and should stop only at break times. In a professional setting where email and IM’s are constant, it’s important not to use the break times for checking email. Instead, short breaks are good times to get up, get a glass of water or a snack. Long breaks are well spent getting some fresh air, getting lunch or just going out for a cup of coffee.

There are even some tools to help keep you on track. This Google Chrome extension blocks websites until it’s time for a break.

Time management with the Pomodoro Technique
The Pomodoro Technique was named after the Italian word for tomato. It’s creator, Francesco Cirillo, was inspired by his kitchen timer, shaped like a tomato.

For our project managers whose goal is ensuring development teams meet deadlines and complete deliverables, the Pomodoro Technique is  especially helpful for creating accurate project timelines by estimating the number of Pomodoros it will take to complete a task.

While these methods can work on their own, the true magic of the Pomodoro Technique and the Eisenhower Matrix become apparent when the two systems work in conjunction. Using the Eisenhower method for decision-making and the Pomodoro Technique for execution leads to  a more efficient and productive workday, while maintaining quality and consistency throughout every project.


Doug Melvin is a Senior Project Manager and Business Analyst for Kenzan based out of our Denver offices. When he isn’t working, he does his best to keep his puppy out of trouble and experiments with different programming languages. At Kenzan, Doug is responsible for ensuring that development teams deliver on time and on specification, with the resources they need, and assisting with the management of Kenzan’s Atlassian suite. His background in Computer Science originally brought him to Kenzan and has enabled him to support, and interact with, the highly technically-focused platform and development projects that Kenzan engages in.

Introduction to Pivotal’s Cloud Foundry

Uncategorized

Just a few weeks ago, ahead of their Spring One Conference, Pivotal launched the Partner Ready Program, designed to help businesses accelerate their digital transformation into the cloud. Kenzan is proud to have been named as an Advanced Partner in support of the Pivotal Cloud Foundry. As partners, some of our developers were given access…

Just a few weeks ago, ahead of their Spring One Conference, Pivotal launched the Partner Ready Program, designed to help businesses accelerate their digital transformation into the cloud. Kenzan is proud to have been named as an Advanced Partner in support of the Pivotal Cloud Foundry. As partners, some of our developers were given access to a deep well of knowledge around the cloud foundry as they work to understand all its capabilities.

Nicholas Eden-Walker, a Technical Architect based in our Rhode Island office was part of Pivotal’s partner immersion training where he learned what you can do with the enterprise-grade cloud foundry.

Lucky for us, he shared a little bit of what he learned in one of Kenzan’s weekly lunch & learns. We’re paying it forward by sharing his presentation below:

 

Confessions of a Tech Recruiter

Tech Culture, ,

By Isaac Lavoie We’ve all been there before. You’ve combed through job listings and found one that seems to be perfect. You submit your resume and land that first phone interview. After hanging up the phone you feel good about how it went, send a thank you note and wait, hoping for that elusive second…

By Isaac Lavoie

We’ve all been there before. You’ve combed through job listings and found one that seems to be perfect. You submit your resume and land that first phone interview. After hanging up the phone you feel good about how it went, send a thank you note and wait, hoping for that elusive second interview with the hiring manager. But it never comes. You meet the technical requirements, you have the education and experience, so what went wrong?

Being a talent acquisition coordinator (read, recruiter) for a technology company, I can tell you that it takes more than technical skills and a computer science degree to make it to the next round of interviews. It’s my job to not only make sure you fit the technical bill, but that you fit the cultural one too.

As tech companies shift to adopt more collaborative development methodologies and organizations restructure to foster more connected workplaces, it’s never been more important for hiring managers to ask the question, “Are you the kind of person we want at our company?”

This is often the first hurdle an applicant needs to clear in their interview process. The trouble is, no one ever asks the question out loud. Instead, a mix of technical traits and personality traits are used to arrive at the answer. Where many applicants fall short is understanding how best to present their non-technical assets in our deeply technical field.

While the mix of technical and personality traits may shift for any given opening, some of the easiest ones to bring to an interview don’t take any training at all.  Ask yourself these questions as the answers can easily influence the hiring manager’s decision to move someone forward in the interview process.

Do you have the Drive? This is the precursor to all that follows. How have you been guiding your own career? Can you answer the questions: Why do you do this work? How do you hope to grow? You should have the answers — not only for the interview, but for every day interactions and career planning.

Do you have Initiative? You’re an active participant in our communities such as GitHub, meetups, and specialized user groups. Show the employer that you have a passion, that you are curious, hungry for more and eager to expand your skills.

Do you have Enthusiasm?  This is shown not only through your presence when interviewing, but also in your work history and community engagement . You never know which conversation will lead to a job offer, so bring your A-Game to everything you do.

Are you Honest? If your resume reads 4 years in Apache Spark (insert new hot tech here) and it’s only been around since 2014, you definitely will not be getting an interview. If your code is pulled from someone else’s public github… well you know.

Are you OpenShow openness to criticism and new ideas. Embracing other ways of solving problems or challenges is a key indicator for how you work with others. No (wo)man is an island, and, no one wants to work with someone who is right all the time. Exchanging ideas is how we learn and get better. 

Are you Humble? Too much boasting about a success or making excuses about a failure can turn off a recruiter quickly. Being humble shows that you can learn and help others to learn. In this case, humble pie really does taste good.

Do you have a solid foundation? No AngularJS without solid Javascript, friends. With a plethora of bootcamps, online trainings and more out there, the pressure to list hot tech on your application is on. But beware, it’s easy to poke holes in someone’s facade (testing, code samples, anyone?)

You don’t even have to have a technical degree to prove you have a solid base. Hiring managers know that there are many valuable routes into technical work: school, work experience and natural curiosity all matter. As a job seeker you should display a mastery of core concepts before you highlight the technology du jour.

With the tech industry booming and more and more jobs opening everyday, you need to show that you are  not only the right technical solution for a company, but also the kind of person a company wants to be part of its team.

So why not turn this all on its head? Next time you’re in an interview, ask the company what it thinks about community or team work? This is a conversation that tech recruiters want to have. Perhaps if you bring your A-Game, they will have to bring theirs as well.


Isaac Lavoie is the Talent Acquisition Coordinator for Kenzan and is based out of our Rhode Island offices. Though most of his time is spent riding around on his bicycle, he is also responsible for supporting the Kenzan HR team and for bringing new Kenzanites on board. With a background in the environmental education, mechanics, and group consensus building, Isaac is well suited to introduce applicants to the dynamic organization we call home.

Redesigning the Tech Hiring Landscape

Tech Culture

By Kevin McKenna As huge advances in technology continue to push the boundaries of our digital experiences, companies across industries are looking for highly skilled employees to help them build the tools, products and services that power our lives. As a result, the demand for top talent is quickly outpacing the supply. The consensus in…

By Kevin McKenna

As huge advances in technology continue to push the boundaries of our digital experiences, companies across industries are looking for highly skilled employees to help them build the tools, products and services that power our lives. As a result, the demand for top talent is quickly outpacing the supply. The consensus in the technology sector is that we are in a talent drought. By 2020, the U.S. Department of Labor expects that there will be more than 1 million unfilled IT jobs as the demand for highly-skilled employees will far exceed the supply of computer science graduates.

At Kenzan, where we’ve hired 40 people over the last year, we believe that there is a vast pool of untapped talent that is ready to work, but often overlooked. These candidates have the skills and motivation to perform these jobs, but lack the one thing that will get them an interview: a four year computer science (or similar) degree from a college or university. Instead, these potential employees have acquired their skills through non-traditional means like industry-certified training programs, independent projects, coding boot camps, apprenticeships and high-quality online courses.

IMG_6553 (1)Last week in our Rhode Island office, we hosted High Tech Recruiting: Cultivating the Unconventional, an event aimed at exploring and expanding the tech hiring landscape in lil’ Rhody. Along with our co-host TechHireRIthe event brought together work-ready talent with employers and community partners. The goal here is to close the opportunity gap for many of these job seekers and to encourage hiring companies to look outside of traditional recruiting sources.  

Speaking to a packed room, Stefan Pryor, Rhode Island’s Secretary of Commerce, talked about the state’s initiatives to support these efforts in order to spur hiring and job growth. He also spoke to Rhode Island’s commitment to be the first state to bring a computer science curriculum to all schools, K-12.

IMG_6555 (1)
RI Commerce Secretary addresses job seekers, employers and tech trainers on Aug. 25th in Kenzan’s office.

Attendees also heard from organizations that are training, educating and developing these tech workers so that they enter the workforce with the same skills and competency as their degree-holding counterparts. LaunchCode, YearUp, General Assembly, Apprenticeship RI, TechForce and Computer Science Minors each led a discussion about the future of IT training, with both employers looking to recruit and candidates looking for a job.

The event sparked a conversation that will carry over into community partnerships as all of us — employers, job seekers, tech training services, industry leaders and government officials — work together to give those who have the skills the same chance to get the job.

Kevin McKenna is the Director of Operations for Kenzan and is based out of our Rhode Island offices. Though most of his time is spent running around with his dog, he is also responsible for supporting current Kenzan teams and for bringing new Kenzanites on board. With a background in the building trades and working with small teams on ambitious projects, Kevin is well suited to assist in providing a solid foundation for a dynamic organization.

Combining AWS Services to Analyze Data

Tech Skills

As we enter a new era in the Internet of Things, millions of devices are sending out streams of data. Analyzing this data can be a huge undertaking, but by combining AWS services, one can create a scalable dashboard.  We hosted another Lunch and Learn a few weeks ago, where Nicholas Sledgianowski and Charles Palczak…

As we enter a new era in the Internet of Things, millions of devices are sending out streams of data. Analyzing this data can be a huge undertaking, but by combining AWS services, one can create a scalable dashboard. 

We hosted another Lunch and Learn a few weeks ago, where Nicholas Sledgianowski and Charles Palczak gave an overview and demo, which you can find below. 

In order to create innovative, scalable and intelligent solutions for our clients, Kenzan believes that continued development is crucial. Learning from fellow Kenzanites is just way that our employees gain new skills, so each week we host a lunch and learn, for employees across all four of our offices to join in. 

Stay tuned for more videos from our Lunch & Learns.

The Code to Collaboration

Tech Culture

By Ming-Lien Linsley By 2020, it’s estimated that 20.5 billion things will be connected to the internet, making every day things like driving a car or going to the doctor, a digital experience. With each new advancement in technology, it’s easy to forget that the most valuable connections in our lives are the ones we…

By Ming-Lien Linsley

By 2020, it’s estimated that 20.5 billion things will be connected to the internet, making every day things like driving a car or going to the doctor, a digital experience. With each new advancement in technology, it’s easy to forget that the most valuable connections in our lives are the ones we have with other people and it’s those relationships that are the building blocks for everything from the cities we live in to the technology that drives our digital lives.

At Kenzan, those connections are the foundation of the work we do, as each project’s success is attributed not to individuals, but to the collaborative effort of Kenzan and partner teams working together, guided by a spirit of open communication, excellence and kindness.  These values have enabled longstanding, productive relationships between our partners and Kenzan, by way of open dialogue and collaboration among key stakeholders.

Looking beyond Kenzan, the tech sector is trying to break down the traditional silos that exist between teams in an effort to create more efficient environments where building, testing and releasing software can happen more frequently, rapidly and reliably. Methodologies in the software development cycle have shifted to embrace practices like DevOps and transform IT culture into one where communication and collaboration are the guiding principles of innovation and growth.

Print

However, the formula for creating an environment where effective teamwork flourishes isn’t as simple as knocking down cubicle walls and opening up office spaces. Instead, collaboration should be thought of as a goal, never a given, supported by a company’s culture and values. For organizations that are exploring a transition to DevOps practices, the first step is understanding that the most crucial change is not in tools and technology, but in the way employees work together.

Over the last 12 years, as Kenzan has grown from a small band of contractors to more than 150 employees across 4 offices, we’ve worked hard to maintain our culture of collaboration and learned a lot along the way. Some of our keys to collaborative and successful relationships include:

Listen First.
The groundwork to success is laid from the very first conversation where a common understanding of the scope and goals of a project is established. In order to ensure no team member is working in a silo, they first need to know the why of a project, before they can work on the how, so we host an all-hands kickoff meeting for everyone from the architect responsible for the first deliverable to the final Dev Test engineer so they can ask questions or raise concerns.

Plan, then take action.
It’s easy for a solo developer to jump into a project only concerned with his or her piece and failing to see where they fall in the bigger picture. By laying out a blueprint for the full development cycle, each team member sees how they fit in the grand plan and how they can provide a strategic solution, not just a service or a piece of code.

Establish a common language.
Oftentimes, architects, developers, testers, operations and other participants speak different professional languages and operate as separate entities, which leads to inconsistencies and confusion in the way a company’s products, services, technologies and even mission are talked about both internally, and to greater extent, externally. In order to keep things consistent at Kenzan, we created an all-company guide that highlights the who, what, and why of the company to make sure everyone is delivering the same message and working towards the same goal.

Invest in tools for collaboration.
As workplaces become more distributed and more employees work remotely, it’s important to make sure that they are empowered to do their best work wherever they are.
PrintThere are a slew of tools that facilitate chat, collaborative writing, video conferencing, ticketing systems, continuous integration and continuous delivery, that make it easy for employees to quickly get feedback, bounce ideas off each other, solve problems, track progress and share documents.  Examples of the tools we use include JIRA, Hipchat, Confluence, and BlueJeans.

But value in-person time.
Success in business is due in large part to building relationships. Despite the many advancements in the quality and variety of digital tools, there is still nothing like a face-to-face meeting. In fact, a study from UCLA found that up to 93% of communication effectiveness is determined by nonverbal cues, something you won’t get from digital communication. As a professional services firm, solid relationships with our clients are a crucial element to project success. Relationships start during the discovery phase when team members not only get to know the scope of a project, but also each other. During this time, a conversation over a conference line just doesn’t do the trick, so we send our teams onsite with clients or to our other offices to work hand-in-hand.

Establish trust.
The cornerstone of every successful collaboration is trust, which is established when teams embrace accountability, transparency, reliability and support as core principles. When these principles are embraced, everyone works together and no one person is responsible for success (or failure). Without them, all the tools, meetings and planning in the world will do nothing to improve collaboration.

Empower the team.
Micromanagement can be a poison to collaboration and is often an indicator that there is a lack of trust between employees and leadership. Giving employees autonomy means they aren’t burdened by bureaucracy, can freely approach management when they need help, and will be more open to feedback.

Encourage employee connection.
Leaders who are looking to increase collaboration among their employees should focus upon how the company’s culture fosters connections between people. By creating a work environment where relationships flourish, an environment that promotes trust, yields open feedback, and inspires innovation will emerge.  Whether it’s small changes around the office like a communal kitchen or bigger investments like sponsored company outings, encouraging positive employee relationships can mean big improvements in the way they work together.

The bottom line is that it doesn’t take a massive monetary investment to make small and meaningful changes that improve the way employees engage with each other. When employees feel connected to the company and their colleagues, no challenge is too big.

Ming Linsley is Kenzan’s EVP of program management and client solutions, based out of our Denver office. She works with teams across the organization, from our project managers and business analysts, to our engineers and architects. With over a decade and a half of experience in advertising, online marketing and client solutions, Ming ensures our client relationships are strong and growing.

Refactoring, Accessibility and Electron, Oh My!

Tech Skills

School may still be out for the summer, but at Kenzan, the learning continues. We’re big believers in skill development and there’s no better way to learn than from our fellow techies. So in late June, we sent some Kenzanite’s off to Dinosaur JS, a Javascript conference in Denver. They brought back some new skills…

School may still be out for the summer, but at Kenzan, the learning continues. We’re big believers in skill development and there’s no better way to learn than from our fellow techies. So in late June, we sent some Kenzanite’s off to Dinosaur JS, a Javascript conference in Denver.

They brought back some new skills that they shared with the rest of Kenzan during one of our Lunch and Learn programs.  Their entire presentation covering refactoring, accessibility and Electron was recorded.  Check it out below:

 

Denver Hack Night: All Fun and Game (Development)

News

After a bit of a hiatus, Kenzan held another hack night at our Denver office last Wednesday, May 25. This time out, Russell Perkins, from the Kenzan DevOps team, and David Zuluaga, a Kenzan front end developer, discussed a video game they are developing that uses the Unity engine for a number of gaming systems…

After a bit of a hiatus, Kenzan held another hack night at our Denver office last Wednesday, May 25. This time out, Russell Perkins, from the Kenzan DevOps team, and David Zuluaga, a Kenzan front end developer, discussed a video game they are developing that uses the Unity engine for a number of gaming systems including the Oculus Rift. They also gave a broad overview of the game engine market, explained why Unity is such a great choice (it’s relatively easy to use and it’s free!) and shared a point of view about why so few gaming companies are successful at creating their own engines.

Chris Pruyne, another Kenzan front end developer, gave an overview of his project: the embedding of a brand-new LED screen and a super-tiny Raspberry Pi Zero into an original 1989 Gameboy DMG body. With those electronics, some soldering, dremeling and case modification that will enable the dremeled out holes to contain X and Y buttons on the original controller board, Chris will be able to play most video games on gameboy, NES, SNES and several Sega systems.  He will be able to play just about any of those games with a controller by simply adding a few USB ports.

Doug Melvin, a Kenzan PMBA, brought a Raspberry Pi project, using a slightly larger model to embed a computer, screen and more, in a repurposed external hard drive case. With bluetooth, wifi, ethernet and a number of USB ports, this Raspberry Pi is capable of running myriad operating systems. In addition to this hardware project, Doug presented a python project he has been working on that will manage conference room usage in the office.

Stay tuned for information about our next Denver Hack Night, and if you’re in the New England area, our Rhode Island hosts their own too, so be sure to RSVP.

Open the Door to Spinnaker with Terraform

Tech Skills

As Kenzan works with our clients to implement scalable and reliable systems in the cloud, we’ve often turned to the NetflixOSS stack for the myriad of tools and libraries it offers. A major component of our implementations has been Asgard, an instrumental tool that allows for the efficient automated deployment of applications. While Asgard has…

As Kenzan works with our clients to implement scalable and reliable systems in the cloud, we’ve often turned to the NetflixOSS stack for the myriad of tools and libraries it offers. A major component of our implementations has been Asgard, an instrumental tool that allows for the efficient automated deployment of applications. While Asgard has been a significant factor in the success of our implementations of the Netflix OSS stack, especially with its support for naming conventions, immutable infrastructure, application awareness and red-black deployments, it has been showing its age and has shortcomings in several areas, including a weak API and support that is limited to AWS.

Fortunately, Netflix has been working on a successor project to Asgard: Spinnaker (http://spinnaker.io/). Spinnaker represents the evolution of both Asgard and Mimir, another Netflix internal project which focuses on pipelines. Spinnaker takes a very different approach from Asgard, focusing much more narrowly on deployments, while offering a rich set of tools for creating pipelines to manage deployments across environments. In addition to being strongly API driven, another huge part of Spinnaker is the implementation of multiple back-end cloud drivers for different infrastructure providers. Spinnaker launched with support for AWS and GCP with follow up support coming from Azure and Pivotal.

When Kenzan first heard about Spinnaker, we jumped at the chance to work with it and also knew we wanted to contribute to this open source project. One tangible Kenzan contribution to the Spinnaker release was in the area of usability. Typically, projects like Spinnaker are released in such a way that they require significant effort just to install and start up, let alone do anything useful with. Our contribution for launch was to work with the Google team and, building on work they had already done, to come up with a straightforward, os-native install process for Spinnaker. Beyond this, we published, and continue to maintain a public image for Spinnaker on AWS.

Shortly after launch, we contributed to the documentation with a tutorial showing a complete continuous-delivery setup with simple sample application (http://spinnaker.io/documentation/hello-spinnaker.html). The tutorial goes through the complete process of setting up Jenkins, an Apt repository for baking, Spinnaker, jobs and pipelines to give a feel for what Spinnaker can really do when it is set up and integrated with a real project in Jenkins.

However, the tutorial is quite lengthy and there are a fair number of moving parts that are needed to get set up. This is understandable, since Spinnaker is a complex product trying to orchestrate the often complex details of cloud infrastructure. This leaves a high barrier for entry for people who want to see Spinnaker as it should be: with pipelines and code deployment, rather than just deploying OS images.

So, we set out to improve and reduce the barrier to entry. That’s where Terrfaform comes in. A Hashicorp product, Terraform allows you to describe and manage infrastructure.  Using relative simple text configurations and back-ends for different cloud providers, it is possible to easily set up infrastructure from scratch. We decided to use Terraform to create an example Spinnaker install that gives a complete build-to-deploy experience with minimal set-up on the part of the user. The project (at https://github.com/kenzanlabs/spinnaker-terraform) takes advantage of Terraform to offer versions on both AWS and GCP. After running through the instructions, you get the following:

  • Networking and security
  • Bastion host
  • Jenkins
  • Local Apt repo
  • Spinnaker
  • Jenkins Jobs
  • Spinnaker Pipeline

spin_terra

Since it is an automated set-up, the configuration is slightly different from the tutorial since there isn’t a fork of the sample app. It would be very easy to modify the installation to match the tutorial after it is set up.

We’ll be adding more example pipelines to this demo to provide real-world, continuous delivery scenarios, including multiple pipelines with triggers and testing.
——
You love technology, and so do we. Join the team that’s helping to Make Next Possible.

Want to check out some of the other work we’ve been doing? Visit our page on GitHub: https://github.com/kenzanlabs

 

To ES∞ and Beyond: Bulletproof Front-End JavaScript

Tech Skills

While there is a plethora of amazing open source tools out there, recent advances in the EMCAScript language specification (ES6/ES2015) have brought amazing power and expressiveness to the web for JavaScript. Language features like import, module loading, and classes have made writing JavaScript cleaner, more consistent, and less reliant on opinionated tooling, thus making code written…

While there is a plethora of amazing open source tools out there, recent advances in the EMCAScript language specification (ES6/ES2015) have brought amazing power and expressiveness to the web for JavaScript. Language features like import, module loading, and classes have made writing JavaScript cleaner, more consistent, and less reliant on opinionated tooling, thus making code written today in ES6 immune to churn and less likely to become “legacy,” even after a few years. While these claims are bold, they are, in fact, very realistic, well-reasoned, and do not prevent teams from using their preferred build tools or any of the popular frameworks/libraries available.

The main concepts covered are:

  • Language Specification – Embrace ES6 or, ideally, Typescript
  • Dependency Management – Consume your dependencies in a universal format, be it from NPM or Github, while still being standards compliant
  • Module Loading – Load not only your JavaScript, but also your CSS, in accordance with standards compliance.

ES6 and TypeScript
ES6/ES2015 is the current iteration of JavaScript, which brings with it a number of useful features like classes, import/export statements, fat arrow, and improved support for variable scoping. This is a direct acknowledgment by the standards committee to support the needs and experience of developers, as our JavaScript applications have gotten bigger and more complex over the past few years. However, there is also a need to incorporate tried and true conventions from mature, strictly typed languages like Java, where concrete types and values can be caught before the code even reaches the browser.

While an excellent tool like Babel will make sure that one can write the ECMAScript of tomorrow today, TypeScript will do the same but will also support interfaces, member/method privacy, and member/argument types. As applications grow and become more “distributed” (component libraries/micro ui’s), and client side data management, consistency, and durability becomes more mission critical, TypeScript will ensure continuity and compile time feedback to developers.

Below is an example of a React component written in ES6. Inline comments added here to highlight key language features:

'use strict';

//we can import all our dependencies explicitly per module / component
import React from 'react';
 
//we can even load our CSS!
import './user-details.css!';

import { GithubStore } from '../../stores/github/github-store';

//here we use ES6 classes and merely extend the React library.  This is the only usage of React in this entire file
//we now align our components with a concrete language feature.  Our components are just classes at the end of the day

class UserDetails extends React.Component {

  //no longer we have init, activate or IIFE to kick off our component.  There is now consistent standard provided by the language
  constructor() {
    super();

    this.state = {
      avatar: '',
      name: ''
    };

    this.getUserDetails();
  }

  getUserDetails() {
    let store = new GithubStore();

    store.getUserDetails().then(response => {
      this.setState(response.data);
    });
  }

  render() {
    return (
      <div className="user-details">
        <img className="user-avatar img-responsive" src={this.state.avatar}/>
        <h1><span className="user-name">{this.state.name}</span></h1>      </div>
    )
  }

}

//ES6 way to expose our class for others to consume
export default UserDetails;

Below are some TypeScript code samples, based on the Angular 2 Tour of Heroes guide. Inline comments added here to highlight key language features.

//we now have support for strictly typed language features like interfaces
export interface Hero {
  id: number;
  name: string;
}
 
//an example of an Angular 2 Component
import { Component, OnInit } from 'angular2/core';

import { Router } from 'angular2/router';

import { Hero } from './hero.interface';
import { HeroDetailComponent } from './hero-detail.component';
import { HeroService } from './hero.service';

//here we are using ES7 decorators (supported in TypeScript) to annotate our component

@Component({
  selector: 'heroes-list',
  templateUrl: 'src/components/heroes/heroes-list.component.html',
  styleUrls:  ['src/components/heroes/heroes-list.component.css'],
  directives: [HeroDetailComponent]

})

export class HeroesComponent implements OnInit {

  //with TypeScript, we are able to enforce member types, as defined by our Hero interface
  heroes: Hero[];

  selectedHero: Hero;

  //with TypeScript, we are able to enforce privacy and argument types

  constructor(private router: Router, private heroService: HeroService) {

  }

 getHeroes() {

    this.heroService.getHeroes().then(heroes => this.heroes = heroes);

  }

  ngOnInit() {

    this.getHeroes();

  }

  onSelect(hero: Hero) { this.selectedHero = hero; }

  gotoDetail() {

    this.router.navigate(['HeroDetail', {
      id: this.selectedHero.id 
    }]);
  }
}


Dependency Management
Dependency management for JavaScript applications have conventionally been managed through Bower, and more recently through just NPM itself alone. Either way, package management has relied on ultimately delivering all static assets (concatenated or not) to be included via  <script> and <link> tags in an HTML file.  But!  No more!  JSPM was specifically developed to support SystemJS (covered in the next section) as the de facto package manager for client side JavaScript.  It can:

  1. Install a package / module / library / etc from NPM or Github.
  2. Save a single configration file (js) that captures the entire dependency graph for an application, such that all dependencies can easily be loaded in the browser with just a single JS file in a <script> tag.
  3. Bundle all dependencies to be loaded into the browser; either for development or production (minified and concatenated).

Module Loading
Module loading and dependency management, although separate concerns, often go hand-in-hand in the build process and the runtime of an application.  Though it didn’t make the final cut of the current ES6 spec, a module loader specification called System, which can be polyfilled today using SystemJS will be coming in ES7.  This allows us to greatly reduce the overhead in our code by allowing us to use ES6 import today with all our client side static assets, in addition to be able to load all our third-party vendor dependencies and the underlying dependency graph needed to support them all with a single <script> include.

Although there are tools like Webpack or Browserify which aim to encapsulate the entire build and packaging lifecycle of an application, they are not specifically built around ES6 like SystemJS is. For that reason, the choice to use SystemJS over Webpack or Browserify is specifically because of its primary motivation to support ES6 / ES7 and forgoing any sort of “vendor lock-in”.  Both SystemJS and JSPM are also authored by the same developer, Guy Bedford.

Below is an example of what the index.html of a SPA looks like when using SystemJS / JSPM.  Inline comments added here to highlight certain features.

<!DOCTYPE html>

<html lang="en">
 <head>
    <title>Github Dashboard</title>    <base href="/">
    <meta charset="utf-8">
    <meta name="description" content="Github Dashboard"/>
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>

    <!-- single line to import the System polyfill -->

    <script src="./jspm_packages/system.js"></script>

    <!-- import our vendor dependencies, as generated for us by JSPM-->

    <script src="./config.js"></script>

    <!-- kick off our application, and that's it! -->
    <script>
      System.import('src/bootstrap.js');

    </script>

  </head>

  <body>

<div class="container-fluid">

       <div class="col-md-*">
        <section id="content"></section>
      </div>

    </div>

</body>


</
html>

Rounding Things Out
As mentioned, this guide is opinionated only as it relates to future-proofing of how one writes and maintains their JavaScript in order to be as accommodating to standards and specifications as possible. Intentionally left out of this article are two key layers of the stack:

  1. Build / task runners
  2. UI library / frameworks

While there is no opinion on these, there are of recommendations and considerations.  For your build it is recommended to use Gulp via Keystone, as it is fast, composable, and has a robust ecosystem of plugins and can be installed and managed with NPM.  For the UI, any library or framework that plays nicely with the underlying stack here, like ReactAngular 2, or Aurelia will work as long as it is the right one for your application’s needs. What matters is that whatever you substitute, the only requirement should be that it plays well with ES6 and SystemJS / JSPM, so as to make the next few years of your JavaScript development as frictionless as possible.

So putting it all together, here is our stack of the future, today!

frontend-stack

This post was written by Owen Buckley, a software engineer based out of Kenzan’s Rhode Island office.