Not Invented Here

Steven NgSoftwareLeave a Comment

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.

Enterprise Business Intelligence Can Be Hard

Vince IarusciBusiness Intelligence, KnodeoLeave a Comment

We’ve seen it happen many times. A customer is sitting through a polished demo of some commercial-of-the-shelf product from one of the big Business Intelligence vendors. Screen after screen of dashboards and reports with perfect data flash by. The customer’s first thought is that this is the tool that will improve all business decisions. The salesperson’s goal is to close the sale. In most cases, these customers are walking into a world of hurt.

I’m not saying that big BI vendors are evil, they just have their place. Steven and I have sold and installed commercial-off-the-shelf software to many companies and these BI tools are used every day by our clients. We’ve found that these BI stacks often work well in larger companies with big IT budgets and resources but implementing enterprise BI can be hard for most small to midsize companies. In many cases, it’s like trying to “crack a peanut with a sledgehammer”.

Let’s take a look at the BI pains experienced by different users in an organization.

Business Intelligence Pains for C-Level Executives

  1. High Costs – Current BI vendors make money selling software which is feature rich and over-engineered. These big enterprise business intelligence vendors make their money selling you solutions with features you don’t need. Furthermore, licensing fees are often complex and have annual maintenance costs as well.
  2. Esoteric Skill Sets – Content development requires specialized skills and these skilled-up developers often move to greener pastures. The market for talent in any given enterprise BI product is limited to the people who have had access to them which creates an artificial scarcity that drives up prices. In addition, market value increases as your people get “skilled up”.  This can lead to increased turnover and high replacement costs.
  3. Shelfware & Adoption of technology – Most BI vendors have many embedded tools. These features and options show well during the sales cycle but are often not used after implementation. In order to satisfy a broad set of the buyer’s checklist, many business intelligence vendors focus on feature abundance over feature excellence. After implementation, most solutions use only 20% of a product’s tools, in spite of paying for 100% of a product.

Business Intelligence Pains for Users

  1. Inconsistent information – A common mistake is that users rely on the front end BI tools to define the business rules instead of a common information database.
  2. Multiple Versions of the Truth – In spite of the “Single Version of the Truth” benefit of business intelligence solutions, the reality is that it is difficult to achieve. Part of the problem lies with the fact that there is a lot of leeway in how a solution is implemented. Improperly implemented solutions scatter multiple versions of the same business logic across multiple layers of the solution. This eliminates the possibility of achieving that “Single Version of the Truth”.
  3. Learn new complex tools – Users just want the information they need in the tools they already use but users are often forced to navigate & learn complex software.  Enterprise software is known for being user-unfriendly. Part of the problem is that the designers and developers rarely use the software themselves. Forcing users to navigate and learn complex software costs your company money. Having to learn new technology can also increase the stress level of your team members.Enterprise Business Intelligence Tools
  4. Forced to use standard tools – Different users have different information needs. Out of the box query, reporting, analytics, and dashboard tools restrict the user’s delivery options.
  5. Limited Functionality – Different users have different information needs. Out of the box functionality of enterprise business intelligence tools can make or break your company’s implementation.Users are often beholden to the release schedules and feature prioritization of their enterprise software vendors when looking for new features.

Business Intelligence Pains for Developers

  1. Specialized knowledge required – IT managers and developers don’t want one more complex tool to manage.
  2. One More Tool – Most IT departments are already busy and adding one more tool to the mix simply adds more complexity and work. Enterprise solutions build on the same underlying principles of moving data and querying databases. They have their own way of doing things and ultimately that leads to increased training, development and maintenance costs.
  3. Constraints on development – Customizing packaged software can be like “stuffing a square block in a round hole”. Developers can’t customize solutions when the proprietary software is “locked down”.
  4. Software administration is hard – BI vendors make money with version support changes and licensing. Upgrading and migrating content between versions can be difficult and time-consuming.

Pain relief with Knodeo

Relief for C-Level Executives

  1. Reduced Costs – Knodeo software costs are $0. Knodeo base components build on open source software and have no software costs.
  2. Commodity skill sets – Many of the technologies used already exist within most companies. Using common technology makes it easier for the business to find the needed skill sets.
  3. Adapts to your business – Many of today’s technologies used are open and extensible. Businesses change daily and Knodeo’s tools adapt to your business without the constraints of proprietary software.

Relief for Users

  1. Trusted Information – A common information backbone contains all the business definitions. The centralized analytics database defines the business definitions instead of the individual BI tools.
  2. Use established familiar tools – Users are already familiar with tools like MS Excel for reporting or MS Access for queries. Knodeo can integrate with any existing BI tool.
  3. Customized reporting – Create customized reports, analytics, and dashboards in the open Knodeo Launchpad. Develop apps to help with your business processes.

Relief for Developers

  1. Unlimited toolsets to support business needs –  Developers have options to select the toolsets that fit best for the required business case.
  2. Open Extensible architecture – Open architecture gives developers the freedom to implement solutions based on the user requirements and not the constraints of proprietary software.
  3. Automated systems – Tasks like installations, upgrades, data loads and report delivery execute using the open Knodeo automation tools.

A Defining Moment

Steven NgProject Management, SoftwareLeave a Comment


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.

We’re Go People!

Vince IarusciTeam BuildingLeave a Comment

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.

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.