The Assign It To Me Blog


Avoiding The Shelfware Trap

Steven Ng on June 28, 2017

Estimated time to read: 4 minutes

My Graveyard of Organizers

How often have you bought something that was supposed to revolution some pain point that never came into fruition? I definitely have. My best worst example is personal organizers.

Most of my life, I've wanted something to help me organize my life from a time management perspective. I'm no spring chicken, so let's say I've been searching for such a solution since being a freshman in high school (1984) and didn't get the problem completely solved until 2008. That is a total of 24 years before I finally found the ideal solution. If you add up all the money I've spent on personal organizers, electronic or not, we're talking several thousands of dollars, and that's not adjusting for the current value of money.

In the 80s, it was coil bound agendas (and a Sharp Wizard for a short period of time). By the time I was in university in the early 90s, it was more expensive Dayrunners and Filofaxes. As I began my career, I started with an Apple Newton. Then I tried WindowsCE, Palm Pilots (and their Handspring offshoots), a REX organizer, Windows Mobile phones, etc. Nothing stuck around after the honeymoon period until 2008.

Old Habits Die Hard

The reason why none of these tools (many of which had significant cost) stuck with me is that they involved some habit changes, weren't convenient, or both. Back in the paper days, you had to carry a pen and the organizer. And the good organizers weren't very pocketable. The top end Filofaxes back in the day were the size of a textbook. Inconvenient wasn't even the beginning of it.

Things got a little better as technology got better. My first Apple Newton was pretty big, but smaller than a Filofax. The handwriting recognition was quite abysmal, and the data was for all intents stuck in the device. Things got better with WindowsCE and Palm, as they offered better syncing, but you had limited application support on your computers. You didn't really have a lot of flexibility.

With the early smartphones, like Windows Mobile (that includes the Palm Treos and Blackberries), things got a lot better. You got syncing with Microsoft Exchange (often for extra cost), so your calendar was at least in Outlook's calendar. The user interfaces on those devices, however, still made data entry a little slow.

What Happened

The world basically had to change for me to be able to stick with a personal organizer solution. Two things happened.

First, the cloud. Google introduced Gmail and Google Calendar and made the API open and free. You had access to your calendar and email from any device with a modern web browser, and you had access to native applications that used the API. There was now a lot of choice in how you could access your personal organizer.

The second thing that happened was the iPhone. I get that it was introduced in 2007, but that model wasn't available in Canada. When the first iPhone (the 3G) became available in Canada in 2008, I picked one up. And it was glorious. After more than a dozen failed solutions, I finally found something that stuck.

The reason why it stuck? Habits and convenience. While I still hate onscreen keyboards, it doesn't take much to input data into the phone. And because my phone is pocketable, I always keep my phone with me. And because I'm using the cloud for storage, I don't have to rely on just my phone for accessing or inputting data to organize my life.

When the smartphone industry matured, it didn't really matter what device you used, and I've since switched to Android, but I'm still managing my life using a smartphone and a cloud back end.

Who Cares?

So what does my long winded story have to do with shelfware? Well, every single tool I purchased prior to my iPhone 3G became shelfware. The tools were inconvenient and required a habit change that just had too much friction. My little story about personal organizers isn't limited to just that. I've spent a good chunk of my career working in companies that peddled enterprise software, and a lot of the times, that software became very expensive shelfware.

That thought is always front-of-mind when I'm building something. And it was front of mind when Vince and I came up with Assign It To Me.

How We Try To Avoid Making Shelfware

Assign It To Me has to accommodate two primary user types. People who do work and people who run projects. Each user type has a very different mindset, so we try to accommodate each of them differently.

Resistance to change is firmly ingrained in human nature, and it affects all of us, whether we'd like to believe it or not. From my experience in the software business, people in the front line don't like the changes associated with the new software that "management decided would make our lives easier". Front line workers are already super busy, and aren't really big fans of administrivia like status reports, time booking and having to use software that tends to make something simple more complicated.

On the other hand, the small population of power users who were instrumental in getting the software purchased and deployed tend to be very hands on and love the software.

With that, you have two different sets of users with different incentives and motivations with respect to a new application.

In Assign It To Me, front line workers, i.e., the people who do the work, don't want to be bothered with, for lack of a better term, "crap work". After all, they've got real work to do. For these users, we have tried to keep their exposure to the app simple and tight. The "Assigned To Me" view is where we hope they live most of the time, and we've tried to make it as frictionless as possible to update time and progress on their assigned tasks. We want these users to be "in and out". As long as they make a tiny amount of time to update their time and progress, they probably don't even need to put together a weekly status report of what they've done. For a front line worker, having to use Assign It To Me might be a necessary evil, but we try very hard to make it as painless as possible. In other words, what we've attempted to do is minimize habit changes and provide a lot of convenience at the same time.

With project owners, we consider them to be our power users. They need (and hopefully love) managing their projects. We offer them multiple perspectives to view their projects, and reports that hopefully help them have a better picture of a project's progress and health. Of course, the critical path is getting data from front line workers, and as mentioned earlier, we tried to make a system where users wouldn't hate inputting that data.

We won't know if our approach will fully work until we've had some extensive usage, but we do think it's a great start, and we hope you give Assign It To Me a try.

How To Avoid That Heavy Feeling With Weighted Tasks in Assign It To Me

Steven Ng on June 27, 2017

Estimated time to read: 3 minutes

Not All Tasks are Created Equal

Let's say you're running a small project with 10 tasks, with each task requiring 1 hour of effort by a team member who charges $100/hour. As your project progresses, each task completed represents 10% of your project's completion.

At first glance, that makes sense. All of your tasks have the same amount of effort and dollar value, so why not? The catch is that each task might have a different value with respect to the actual progress of your project. What if 8 of your tasks are coding, and 2 of your tasks are meetings? Do those two meetings truly represent 20% of forward progress on your projects? Probably not. They probably don't represent 0% of forward progress either.

Many other project management tools treat all tasks as somewhat equal outside of their effort. When we were creating Assign It To Me, we were trying to provide project owners with some flexibility in terms of deciding how much progress a task can contribute to the overall progress of their project.

The last thing a project owner needs is to get a heavy feeling because they're not comfortable with the degree of accuracy of their project's calculated percent complete.

Let Assign It To Me Do The Heavy Lifting

Our solution to addressing the variability of a task's contribution to the overall project percent complete had to be relatively simple and straightforward in order to balance usability and simplicity.

The mathematical solution was relatively simple— all we needed to do was make the project's percent complete a weighted average of all of the percent complete of all the project's tasks. While it would be more powerful for project owners to be able to set any value for a task's weight by themselves, having to manage such variable values on a large project would be a nightmare.

We basically decided to keep it simple. We have a 6 point scale from 0 to 5 to let you put a relative weight on a task:

  • 0 - Unimportant - This task represents 0% of the project's overall progress
  • 1 - Much Less Than Normal - This task contributes much less to a project's overall progress than a normal task
  • 2 - Less Than Normal - This task contributes less to a project's overall progress than a normal task
  • 3 - Normal - This task contributes a normal amount to a project's overall progress
  • 4 - More Than Normal - This task contributes more to a project's overall progress than a normal task
  • 5 - Much More Than Normal - This task contributes much more to a project's overall progress than a normal task

By default, all tasks in Assign It To Me start with a weight of 3. This way, project owners who don't want or care about task weight can have equally weighted tasks. In terms of the math, when we calculate the project's weighted average, we use this formula:

Σ(task percent complete × task weight) ÷ Σ(all task weights)

We use the same 0 to 5 scale for task weight in the calculation. So a 0 weighted task that is 100% complete represents a 0% contribution to the overall project's progress. A completed task weighted at 5 represents a (5 × 100%) ÷ Σ(all task weights) contribution to the overall project's progress.

A Note On Folders

Note that folders do not have a user-defined weight. From a project perspective, folders are simply containers for tasks. They have no bearing on any aggregation calculations made by Assign It To Me.

In a task list view, folders will show a calculated percent complete that is the weighted average of all of its tasks, including those in subfolders. Folders do not impact the calculation of the project's weighted average.

Weight In Practice

So how can you apply this in a real world project? Here are some ideas:

  • You can create milestones like sign offs in your project by creating 0 weighted tasks
  • You can reduce the progress contributed by meetings by setting them to 1 (Much Less Than Normal)
  • You can make some simpler but more critical tasks very important by setting them to 5 (Much More Than Normal)

Also, while our labels for the weight values are sensible defaults, remember that they are still 0 to 5 weightings mathematically. A power user can always choose to ignore our text labels make the numbers mean something else for you. For example, if you make a weight of 2 mean "normal" with respect to your particular project, a task with a weight of 5 will make a much larger contribution to your project's percent complete.

Remember, we are defaulting every task to 3, so you don't have to use weighting if you don't want to. We do, however, hope you take advantage of this feature in Assign It To Me, because it's a pretty unique and powerful feature.

Proof of Work

Steven Ng on June 21, 2017

Estimated time to read: 1 minute

Progress versus Proof

In developing Assign It To Me, we had a lot of interesting discussions about the definition of "What am I working on?"

In our previous life, the only way we got the answer to that was to either have your team send you a status report (which nobody liked to do) or to ask them. Both methods were a bit of a time suck. Your team members want to work on what they're working on, not waste time on status reports, meetings or calls. And the team leads would rather not waste time gathering this information, since there were bigger fires to fight.

On the surface, it sounds simple. If you update the percent complete, you worked on it. Easy peasy. Right?

Wait, Not So Fast

Well, of course, things aren't so simple. A team member can game the system by tweaking the percent complete progress even if no progress has been made.

But remembering that Assign It To Me is designed for companies that do time based billing, we realized that booked time on a task is a more authoritative piece of proof that work has been done. That time is an artifact that is highly likely to show up on an invoice to a customer. This proof of work, so to speak, was the best way to know what someone worked on.

Damned If You Do, Damned If You Don't

Of course, there's yet another catch. Time bookings generally happen in the past. They don't tell you what someone is working on now. And what does now mean? Does it mean the current moment? Does it mean today? Any mechanism to track what is being worked on "now" needs to provide some flexibility since now in your company might mean something else in my company.

I'm Working On...

We recently added a "working on" flag that you can set on any task assigned to you. The intent of this feature is for you to be able to say "I am working on this today". This gives your manager or project manager the ability to see what you're working on without having to ask you. We also plan to use it in Assign It To Me's status reporting. It also lets you prioritize your current work for the day.

This Working On feature will be appearing in Assign It To Me in the coming weeks, and we think you'll like it.

Boring, But It Works

Steven Ng on June 9, 2017

Estimated time to read: 2 minutes

Hot or Not

If I surveyed a hundred people about how pretty our user interface is, I would bet that about half would say "meh". And that's OK. Assign It To Me is boring, but it works.

First off, beauty is subjective. Beauty can help sell, but beauty won't keep customers around. If it did, enterprise software in general would not be nearly as ugly as it is today.

Assign It To Me is made by two people. We're bootstrapped. Right now, we don't have money for a designer. Because of that, we went all in on a web ui (user interface) framework to allow us to develop an application quickly without it being horrifically ugly.

For us, flow and functionality come before beauty. If we can get those two things right, people will use our application in spite of the fact that it doesn't have a glossy finish.

From Here To There

The web ui framework we adopted was Angular Material, which is a fast way to build applications that match Google's Material Design look and feel. Google made Material Design multi-platform, and to our eyes, it was a decent foundation to get from point A to point B. As I was coding our Assign It To Me client, I could focus on flow and functionality while leaving the cosmetics to the canned modules of the Angular Material library.

But something happened along the way. We got to point B. Our app hit 1.0, and was starting to feel some growing pains with the Angular Material library. On large lists, we were seeing some performance issues that could become showstoppers. Because AngularJS has a reputation for being slower than ReactJS, my first inclination was to blame Angular. After further digging and some luck, we found out the bottleneck was Angular Material and not Angular itself. Our task lists are information dense, and each row has a menu. This menu (md-menu in Angular Material speak) was slowing down our page rendering big time.

Once I found the root cause, working around the issue was a lot easier. But in the process, we've moved away from a lot of Angular Material's components in favor of our own.

Firmitas, Utilitas, Venustas*

Now that our app is stable in terms of flow and function, we are going to start making cosmetic improvements to the application. This won't happen overnight. These improvements will be gradual and sensible. Once I've confined the use of Angular Material to some core modules, it will be easier for me to make these changes, because I'll have fewer constraints, and won't be beholden to as many breaking changes with Angular Material library updates.

As much as I would have loved for 1.0 to be splashy and flashy, it would have just slowed down development. Many of our better features were nothing like the original designs. A lot of trial and error while dogfooding the application produced a lot of design improvements. But now that the skeleton of the application is solid, we're going to build on it in a big way. By the time we hit 2.0, I want the description of "boring, but it works" to be replaced with "works beautifully".

* firmitas,utilitas, venustas means solid, useful, beautiful

Wheels, Mousetraps and Other Clichés

Steven Ng on June 7, 2017

Estimated time to read: 3 minutes

It's A Matter of Perspective

In just about every possible discipline, "reinventing the wheel" is considered a wasteful use of time and effort. To coin another cliché, what you really want to do is "build a better mouse trap". The problem, however, is that those two clichés describe the same activity. A lot of people who are criticized for reinventing the wheel are could just as easily be complimented for building a better mouse trap.

When we built Assign It To Me, we knew there were tons of other successful, well-made project management tools out there. Vince and I had a particular way of doing things, and none of the tools we tried were really optimized for that. For the longest time, we used a bug tracking tool (Fogbugz, in case you're wondering) for managing billable project work. We still use Fogbugz today, but we actually use it for what it's designed for— tracking bugs in Assign It To Me.

In the end, we wanted a project management tool that we would love using every day and prevent our projects from losing money. From one perspective, you could say "that wheel has been already reinvented many times". From our perspective, however, we thought that "there has to be a better mousetrap"... one that works the way we do. So we built it.

Horses for Courses

So why don't we use Assign It To Me for tracking bugs? Assign It To Me can certainly do that, but we like to use the best tool for the job. While we developed Assign It To Me with an opinionated design, we still made it flexible enough to accommodate multiple working styles. Even between the two of us, Vince and I have vastly different work styles in certain circumstances.

I personally use Assign It To Me in ways that don't match its intended purpose. While Assign It To Me might be best for billing companies, at its core, Assign It To Me is still like many other project management systems. While we regularly add useful features, we do only try to do one thing well— allow billing companies to manage the profitability of their projects. Some of our features support that, and some of our features overlap with other products, like our time tracking.

But I'll be the first to tell you, there are a lot of one-trick-ponies out there that can do things like time tracking better than us. And that's OK. We think that we do profitability better than a lot of other project management solutions out there, because that's where our primary focus is.

One Thing Well

We're a one-trick-pony too. Our focus is on project profitability. Sure, our pony's one trick is actually made up of a bunch of smaller tricks. Those smaller tricks aren't necessarily mind blowing on their own, but put together, Assign It To Me is greater than the sum of its parts.

It's not our goal to be the best insert feature here out there. There are a gazillion other products, products that do one thing well, that are better than Assign It To Me at insert feature here. Our position on these features is to provide a minimally viable set of functionality so that a company that doesn't already have a tool doesn't have to buy or subscribe to one.

If you try to be everything to everybody, you're only going to end up with a gigantic piece of bloatware. It's a slippery slope, because users are always going to demand more. Instead of becoming a giant piece of bloatware, we plan on building out an API for Assign It To Me to let our users integrate with other one-trick-ponies who are best at what they do.

Our Better Mousetrap

Assign It To Me is our mousetrap for project profitability. That might change in the future, if our user makeup is not what we expected, but that's our goal for now. You can still use it if you don't care about project profitability, because the same things that lead to project profitability lead to successful project completion. And Assign It To Me provides a strong foundation for running successful projects.

We've been hard at work improving our mousetrap to accommodate different work styles too. Our latest version now lets you toggle among new project views— a Kanban-like panel view, an Excel-like worksheet view and a beta Microsoft Project-like Gantt view. Check it out, we think you might like these new views.

We're Go People!

Vince Iarusci on June 4, 2017

Estimated time to read: 2 minutes

A Core Value for all companies.

Here's a story about an important core value that I learned during my Industrial Engineering course in college. Lloyd Bittle who was my professor for the course was a retired Industrial Engineer and his goal was not only to teach us how to improve organizational processes and systems but to become better workers and managers.

The Entrance

Without fail, every day it was the same routine. The lecture is about to start, my classmates and I are waiting for the big entrance. In walks Professor Bittle who makes his way up to the front of the room and turns the light on for the overhead projector.

alt text

The projector displays an image of a stacked red, yellow and green circle resembling a stop sign. He slams his hand down onto the green circle and points his boney finger towards my friend Terry who's sitting beside me. We know what's coming and we're ready for the volley of questions coming our way.

Go People

Bittle : "Terry, what kind of people are we?"

Terry : "We're Go People!"

Bittle : "Very good Terry…that's what I want to hear...and what kind of people are Go People?"

Terry : "Go People are motivated team players that have an open mind and are continually trying to improve their work and environment around them. They're forward thinkers who are involved for the common good and they make things happen. Go People inspire others to become Go People. Go People are leaders."

Bittle then moves his focus over to Sandra. This time he slams his hand on the red circle.

Stop People

Bittle : "Sandra, what kind of people do we want to avoid becoming?"

Sandra : "Stop People"

Bittle : "Ok Sandra, and why are stop people bad for the organization?"

Sandra : "Stop people wait for things to happen. They only do the work assigned to them and nothing more. They avoid taking any risks and are more interested in the status quo instead of growth and improvement. Stop people are followers not leaders. However, stop people are predictable and can be managed."

Bittle's eyes then focus on me while he slams his hand on the yellow circle. The answer has been repeatedly imprinted in my mind from previous lectures and I have no doubt how to answer the question…

Caution People

Bittle : "Vince, what kind of people are the most dangerous for an organization and the employees we want to avoid becoming at all costs?"

Me : "Caution People"

Bittle : "…and why should we be wary of these "Caution Employees"?"

Me : "Caution is needed as these workers are unpredictable. They are focussed on their own goals rather than the team's goals. They take credit for other people's ideas or work and may even try to sabotage the system or processes if it serves their purpose. Caution people will sometimes try to come across as Go People but will always be exposed for who they are in the end. Caution people are posers."

We're Go People

Sometimes I wonder why Bittle would continually repeat the Go People exercise over and over again, but years later I understood. Bittle's Industrial Engineering class wasn't only about how to improve the efficiency of a machine or process, it was about improving ourselves, teams and organizations. It's about the type of workers, managers or leaders we need to become.

Not Now, Later.

Steven Ng on May 26, 2017

Estimated time to read: 3 minutes

From Idea To Product

A lot of people have great ideas for products. The challenge of turning those products into ideas is that the ideas are usually only half-baked. What is in your head often comes out a lot different in reality. Things don't flow as well in the real world as they do in your head.

You can start building without a design, but if you're designing on the fly, you're going to spend a lot more time building whatever you're trying to build. Trust me, I know from experience.

Of course, many of us don't have the luxury of having a user interface designer on hand. So we download a user interface framework like Bootstrap and start building. And then for whatever reason, we find out Bootstrap doesn't do some particular thing we want, and integrating that becomes a bit of a challenge. So then we throw that away and try some other framework. And all of a sudden, something that seemed straightforward in our head became a lot more work than we originally thought.

MVP 3.0

"In the biz", we like to refer to building MVPs, or minimal viable products. That is to say, something with the least amount of functionality that would satisfy the requirements for an initial release. If you're building a free consumer app, that strategy works well. If you descope the idea in your head to a minimal set of functions that can be built quickly, it will work to your benefit.

If, however, you plan to charge a significant amount of money for your product, your MVP needs a bit of polish. Nobody's going to pay $50 a month for something that barely does anything and looks like crap doing whatever it does.

But in either case, you need to build something before you build everything. You can't achieve feature completion in version 1.0. In my experience, the best products I've used tend to be the 3.0 version. Microsoft Word 3.0 was the pinnacle of the application, in my mind. While some useful features have been added in the two plus decades since 3.0, most of it has been cruft and wiz-bang features that marketing types use to justify a paid upgrade from existing users.

Back to the 1.0 thing. When you're building a product, you need to figure out what your killer features are, and then decide what the bare minimum for each of those features can be built in a relatively short period of time.

When we started out building Assign It To Me, Vince and I each had our own grand visions of a perfect 1.0 release that had everything under the sun and the kitchen sink. We learned pretty quickly that if that was our release list, we would never, ever release anything.

You can't get to a 3.0 if you don't have yourself a 1.0.

Less. Much Less.

So we descoped. We pared down the functionality down to the minimum set of things that would make our application worth using.

  • Project management. Check.
  • Task Level Time Keeping. Check.
  • Project health dashboard. Check.
  • Task Level Collaboration. Check.

There are a few other things that we included, but all of those features had to be in a minimally viable state.

But that's not all. When you're building a software-as-a-service (saas) solution, you need the infrastructure to handle subscriptions. Whoa. More scope. Shoot me now. All of a sudden, there's more to build than just a client app.

  • Web application server. Check.
  • Database. Check.
  • Secure Payment Processing. Check.
  • Multi-tenant architecture. Check.

I think you're starting to get the picture. It took us a while to get the core infrastructure and base application in place. And we had to say "no" to a lot of features while getting to 1.0 (Vince can attest to all the pushback I'd give him every time he had a good idea for a new feature). The best thing you can do while getting to 1.0 is to push as much as you can into your backlog. Get a solid foundation and make sure you design it to be expandable. But be careful not to overdesign. Just don't design yourself into a tiny box. Once you get that foundation, adding things gets easier.

Not Now, Later

When we reached 1.0, our application wasn't the prettiest thing out there, but it was serviceable. It worked, and it did what it needed to do. Making it prettier was easy, because all the hard parts were now in place. Since hitting 1.0, improvements have been coming at a furious pace. If we tried adding some of our latest features to the 1.0 version, we would have never released. Seriously. We'd still be developing.

The path to 1.0 was not smooth at all. We hit roadbumps, got demotivated, made progress and then got re-motivated. This vicious/virtuous cycle is pretty typical, but if you're looking to make a product, it's not an insurmountable task. The key is to manage your releases and to be ready to look at some of your less important features and say "Not Now, Later". Focus on getting something out. If you're self-bootstrapped, it's unlikely that you're going to get an A+ product out on your first try. Pare down your product and aim for a B product instead. It's much easier turning a B into a B+ and then into an A than it is to start with nothing and end with an A+.

One of Vince's favorite sayings is "continuous improvement over delayed perfection". It's much easier said than done, but if you can find the discipline to adhere to that saying, you'll get better results faster.

Not Invented Here

Steven Ng on May 24, 2017

Estimated time to read: 3 minutes

Reduce, Reuse, Recycle

When you're building an application, it makes sense to take advantage of as many open source libraries as you can. These libraries can often save a lot of time... or not.

Fit or Misfit

When you're building an application, it's easy to fall into the trap of assuming your Google results for some function you want will actually do what you want. While these libraries can be pretty good at what they do, they tend to come with three common pitfalls.

First -- Some libraries are trying to be everything to everyone. The programmer(s) have done a fantastic job of building a complete piece of functionality and have trapped all sorts of edge cases. This isn't a problem if you're OK with the library's out-of-the-box functionality, but if you're trying to do something very specific, you may quickly find yourself trying to ram a square peg into a round hole.

Second -- In a lot of cases, these libraries are black boxes. Documentation can be hit or miss with these libraries. The examples work great, but when you try to write an example tailored to your needs, things get dicey. You don't know how well the libraries scale with large amounts of data without doing your own testing. In some cases, you also don't know how secure the code bases are. Sure, you can dig into the code, but the reason why you even considered the library was to save time, effort, and headaches.

Third -- Since most libraries are borne from a programmer's own need, they are developed with themselves in mind. That is to say, there's an opinionated design. The API or data structures are a certain way, and they may not match the way your application is built. They may also be a mismatch for the other libraries you're dependent on. Just figuring out the learning curve for remapping your data structures could take longer than if you wrote your own library from scratch.

Not Invented Here

Someone wise once said "If you think something is easy, you probably don't know what you're talking about".

Thinking you can easily build an application by just grabbing a pile of pre-written libraries is a trap. Are you going to add D3.js to your application just so you can put a single pie chart on a single page in your application? That's a lot of code to be adding just for a small feature.

Unless all of those libraries you wanted were written by similar thinking people (pro tip: they're not), you're going to be dealing with a bunch of different programming styles and API invocation approaches. Integrating a pile of code written by a bunch of randos may not be technically difficult, but if you're trying to do something non-trivial, integrating that code is going to be time-consuming. First you have to learn how each library works, and then you need to make the libraries talk to each other. And then you need to make sure that upgrades to one library doesn't break anything relying on the other libraries.

In some cases, you're better off writing your own new code. And you know what, it's not the end of the world.

Be Selective

Let's be clear, it makes no sense to re-invent the wheel if you can at all avoid it.

So what should you do? In building Assign It To Me, we've gone through a litany of different libraries. When we discuss adding a feature, we always see if any wheels have been already invented and whether they fit on our car, so to speak. If they don't we have to make our own wheel.

In general, I find that large libraries that do more than I need tend to be a bad fit. The best libraries are the smaller, "do one thing really well" libraries. They're easier to decode and integrate. Because we try and ensure that mobile users can use the same set of code, payload and dependencies matter. Or more clearly put, I don't want to deal with sizable pieces of new code or dependencies on libraries I don't already use. For example, we don't use jQuery in any of our client side code. I'm not going to add an extra 100KB or so of code to our client app just so we can do something trivial. Heck, I'm going to need convincing even to do something non-trivial. The cost is that I lose access to hundreds of canned user interface libraries, but it hasn't been nearly as big as a hindrance as it would seem.

From my perspective, it pays to be hypercritical about including any new libraries in your code. All of your externally sourced libraries move at their own pace. As mentioned earlier, an upgrade to one library can lead to a litany of negative side-effects in your other libraries.

There's a delicate balance between being able to show forward progress quickly by using some canned code and making sure that the rest of your code base is clean and performant. Do evaluate and consider open source libraries for your applications, but don't be afraid to write your own code either. Remember -- a lot of open web frameworks were written because existing frameworks didn't do the job that the programmer needed. It doesn't mean that you need to eventually rewrite all the third party libraries you're using. But if you outgrow them, it's better than being dependent on someone else's work and update schedule.

A Defining Moment

Steven Ng on May 11, 2017

Estimated time to read: 4 minutes


If you look for project management software, you'll find a ton of apps. A TON. Basecamp, Mavenlink, Zoho, Trello, Microsoft Project... the list goes on.

And yet, Vince and I still made Yet Another Project Management App. Are we crazy?

If you ask people who know us, they'll probably say that there is indeed a little bit of crazy in us.

But that's not why we built a project management app. I've worked with Vince since 2005, and we've been billing consultants for most, if not all, of that time period.

Project management tools are great for tracking your project completion, but they're not quite what you need when you're a small billing organization who can't afford full time, dedicated project managers. Your projects are run and owned by consulting or team leads who are often hands on, writing code or doing other project delivery tasks.

These project owners are busy. They don't want to be bogged down with chasing down team members for status reports and don't want to be thinking about the real dollars involved with running a project, even though it's their heads on the line when the project goes south.

Having run/owned projects myself, I've tried all sorts of tools - Excel, JIRA, Fogbugz, Microsoft Project. And none of them really did what I needed them to do. And what was that? Give me a constant overall picture of how my project was performing and being in-my-face when potential issues were arising. Having some time saving reports would also have been nice. I used to spend 2 hours a week per project collecting information from team members and compiling a status report. I'd rather have been coding.

The reason why there are so many project management apps on the market is simple. Different people have different ways of running projects, and one application can't address everyone's needs.

Assign It To Me

So that's why Vince and I created Assign It To Me. We wanted to make a tool for us. We know there are plenty of small to medium sized billing companies that are just like us. Companies that cared about running projects well, that had to keep an eye on the profitability of their projects, and who usually had leaders who weren't certified project managers who ran projects and were hands on in the project delivery.

Aside: If you're wondering where the name "Assign It To Me" came from, Vince and I were struggling to come up with some fictitious, unique name that was easy to remember and had a .com domain available. When Vince and I divide up work, our most common demand to each other is "Just create a task and assign it to me". The phrase is easy to remember and spell, and heck, we said it all the time, and boom. The rest is history.

So fast forward more months than I'd like to count (let's save that for another blog post), and Assign It To Me turned into a real app on the web. It's not perfect (is anything?) but it's finally gotten to the point where we're very proud of what we've built and are incredibly excited about adding new features. We "dogfooded" the application the whole time we developed it. And we think that made the application better, and more flexible. Vince and I use the app in very different ways on a daily basis. That Assign It To Me lets us manage projects differently is a testament to the benefits of eating your own dogfood while building an application. We used to sell enterprise software that made it obvious that its developers didn't actually use the software. We didn't want to do that, and, and in our own delusional minds, think Assign It To Me was made with love.

Who, What, Why

So back to the defining moment. We have discussions all the time about who Assign It To Me is intended to benefit, what makes Assign It To Me so different from our competition (many of which are great apps), and why those people should use it, since that ultimately defines what Assign It To Me is all about.

Who is Assign It To Me for? In a nutshell, it's for small to medium sized companies who charge by the hour for their services. Digging deeper, these companies aren't at the scale where they can hire full time project managers to run their projects. Also, these companies are owned by one or a few owners who need to keep an eye on the profitability of their projects so they can keep their company afloat. Keep in mind, however, that 80% of Assign It To Me's functionality overlaps with other project management tools, so other people can still use it to run projects.

What makes Assign It To Me different is the 20% of its functionality/design that isn't in other project management applications. Making money through well run projects is the mantra of Assign It To Me. Most project management software is just about the project. We try to capture the small pieces of seemingly trivial information that help inform company owners and project owners how their project is performing, and whether there may be any risks to the project's success. We get that it's not rocket science, but we try to deliver this value in ways that also make life easier for project owners and their team members.

And that's why we think billing companies should use Assign It To Me. Wouldn't you love to know if your project is healthy or sick? Wouldn't your team members prefer to focus on their actual work than dealing with administrivia? Wouldn't project owners prefer to let an application do some of the grunt work of running a project while giving them more time to do work? And wouldn't it be great if the software was affordable enough that you didn't have an excuse not to at least try it? In a nutshell, you only pay for project owners, and in most cases, it can pay itself off with a billable hour per month per project owner. We think Assign It To Me will save you more than that hour a month.

Watch This Space

So now you know what Assign It To Me is all about. Keep an eye on our blog (or subscribe to the RSS feed). Vince and I will be posting here regularly on a multitude of topics related to project management, running a consulting business, running a software business, and building an application.