For this additional INFO 324 assignment, I was tasked with investigating two projects from the point of view of an interested contributor.
VuFind is “a library resource portal designed and developed for libraries by libraries.”
How many people are working on the project?
From combing through 5 pages of issues on their JIRA issue tracker, I found 36 people submitting bugs or who were assigned to bugs. There were no other easily accessible metrics on the total number of people involved in all the different aspects (development, design, marketing, community management, etc.) of the project.
How active is the project?
The project has regular updates released on the website, as well as new bugs submitted and responded to regularly.
How do the developers communicate with each other? What channels or tools are available within the project?
How are bugs and feature requests tracked?
Are there a lot of open items?
At the time of writing, there were 204 open tickets out of 1046 total tickets, for a 19.5% total open ticket rate. I’d say that’s a lot less than other projects I’ve seen, even if the total number of open tickets is a lot for any one person to handle.
Are they being worked on?
Thirty-two tickets had someone actively assigned to them.
Are issues being addressed?
Yes; most tickets have some form of discussion going on, or at the very least, a few comments or questions from someone other than the original submitter.
Mifos is a product that enables financial groups to more readily support the needs of people in developing countries that need relatively small amounts of financing in order to support their businesses and their region’s economy.
Does this look like a credible project?
I would say so. The Who’s using Mifos page lists 43 different organizations who have deployed Mifos and over 1 million (1,002,665) clients benefitting from the system.
What’s the business model? How is all this happening as “free and open source”?
The most obvious hint as to their business model was the presence of a donation page on the website. On their FAQ page, there was a reference to the ability for organizations to pay for support in installation, maintenance, and updates to the system, but further research revealed that this money probably benefits individuals or businesses external to Mifos that provide these services.
So, it seems like Mifos is able to function solely on donations.
Do you think you could download and install this product?
I was able to download the product easily; a link was provided to download the project from SourceForge.
As for installation, an INSTALL document is provided in the download that has many steps related to setting up components of the project (e.g., the database). While I could understand some or most of the directions, my experience with Java server programs and infrastructure is not developed enough to understand how to quickly install the product; I would probably have to do a lot of Googling and get lost many times.
Are there usable technical documents that describe the project (e.g., functional requirements, design documents, installation documentation, etc.)?
Yes. The Mifos website has a Functional Specifications page with detailed specifications on all of the components of the system, including system setup, account management, transaction processing, and internationalization.
What has been the most interesting thing you learned through this exercise?
The biggest thing I’ve learned is how important it is to have a website, wiki, or other informational repository for your open source project. For 99.9% of the people who may potentially contribute to your project, simply being able to view the code is nowhere near sufficient to get involved.
It was actually quite fun! I’m a huge fan of the Ruby on Rails framework, and it was really interesting to see people coming in to ask questions and others being able to instantly help them.
For example, one of the basic tools available to a Rails developer is generating a scaffold, or a series of files that will enable a developer to create, read, update, and delete data quickly without having to code the files from scratch. It’s a really useful tool if you either want to build a really basic application, or if you want to have a starting point for building a specific object (say, Students) and be able to start with the best practices used in Rails for free.
A user on the IRC channel came in and asked a few questions about the specific syntax used in the command line when generating a scaffold; very quickly, a few other users came out to help him. He was able to ask a few follow-up questions, and receive answers on those, as well (e.g., validation of an email address on the front-end using HTML5’s email input type validation).
IRC seems like a really great tool for the open-source community; users from all around the world can meet and have questions answered, discuss complex topics, or pretty much anything that’s considered “on-topic” for a channel. I think the important thing to note is how much work needs to be done to write out rules and guidelines for participating in an IRC channel like this (here’s the rules for the #RubyOnRails channel: https://gist.github.com/radar/996779). Having a document like this really helps to make it clear what’s okay to do, ask, or say, and what’s not appropriate for that specific community.
For smaller teams, though, I’m not sure on the value of IRC as a communications system. Perhaps for a team that has already had a lot of experience using it, it could work well, but most teammates I’ve worked with at Drexel don’t use it that often, and a more accessible tool can be a lot easier to work with (e.g., Google Hangouts or Facebook Chat).
One of the classes I’m taking this Fall term is called Team Process & Product. It focuses on a few things in the world of software development, including the phase when a software development team is figuring out what the system should do. This is formally called requirements gathering.
We had a few readings on the subject:
- Writing Quality Requirements by Karl E. Weigers (processimpact.com)
- Business Requirements - What Is The Difference Between Good And Bad? by Thomas Hathaway (ezinearticles.com)
- Writing good requirements is a lot like writing good code by The Rational Edge (ibm.com) (the link was broken at the time of writing, unfortunately)
Weigers focuses on the specific qualities and characteristics that define a “high-quality” requirement (including examples), while Hathaway focuses more on the process of how requirements are gathered, including the steps of Capturing, Clarifying, and Confirming.
My view on requirements gathering is that it is a valuable tool when your team truly understands how to take vague needs or feature requests and turn them into requirements that meet all the criteria in Weigers’ article. In my experiences on co-op, though, formal requirements statements or specifications were never involved in the work I did as a front-end Web developer. It’s unfortunate, because it would be cool to see how requirements are used in the real world.
I think it says something though when small businesses and startups are skipping requirements gathering and jump straight to product design, prototyping, and actual development. Are formal requirements as defined by these articles truly needed? Perhaps in much larger companies or the “enterprise”, the process might be a better fit for formal requirements gathering; unfortunately for me, though, I don’t see much requirements gathering or analysis in my future career.
In short, I like the concept of requirements gathering and really want to be able to understand it well enough to have it be a part of my toolbelt when trying to build software, but it seems like my “real-world” job won’t have much of that involved.
I was curious about how to include Twitter Bootstrap’s source files in a Rails app; @mdepolli has the answer!
With that experience, I’ve been starting to see a need for a platform that can support the activities that occur during such events; something that is valuable both to event organizers and event attendees.
Through my senior design program at Drexel, I’m finally getting the opportunity to build this product, and hopefully make it into something that gets used at large-scale LAN parties across the world.
Here are some notes that I’ve put together so far, in an attempt to recruit other people in my class:
- I’ve been looking to build a platform that supports both the organizers of these kinds events as well as the people attending them. There’s lots of ideas I have about specific features, but I’m very interested in learning from customers what want, too.
- Primarily the project would be web-based, to make for easy access for both event organizers and attendees, but there is potential for features that might have development in other areas too (for example, networking products or hardware; but we’d need to be careful about scope creep). For example:
- There could be a feature that works with game servers; this might get beyond regular web development and into the domain of networking protocols, deployment technologies, VMs, etc. (managed through the web interface)
- There might be other networking-related features that would be valuable (since, after all, this is aimed at larger-scale LAN parties, and it can be assumed that these kinds of events will have some form of network routing involved, even if it’s just the default setup on a router).
- This project would be built on open-source technologies, and I plan on it being open-source, too.
While you the reader may not be able to join my team (unless you’re in Professor Booker’s INFO 424 class, then contact me!), if you are reading this and are interested in seeing where this project goes, feel free to let me know; I’d like for our development progress to be something that’s open and public.
Watch this space for future updates!
In a nutshell, I got my hands dirty with code, and I got my feet wet at a growing startup. This has been one of the most satisfying co-op positions I’ve ever had while studying at Drexel.
Projects I contributed to
- RJMetrics Chart Descriptions
- RJMetrics.com redesign
- RJMetrics Engineering Blog
- RJMetrics eCommerce Blog update
Other contributions of mine
- Assisted marketing team with development on marketing website and content
- Documentation on company wiki, internal Q&A systems
- Helped educate coworkers on processes and guidelines related to contributing content for the RJMetrics engineering blog
Skills I developed on the job
I learned a bit more about what it means to use “semantic” HTML, good class names, and to avoid using IDs for presentational purposes when possible.
A lot of my work involved styling elements and building content that matched a design comp. I’ve been able to get a lot more familiar with the purpose and function of a ton of different CSS properties, and how they can all come together when building content. One of my favorite things I learned was that “overflow: hidden;” creates a new floating context1!
Sass is the CSS pre-processor language of choice at RJMetrics, and I really enjoyed learning more about its power and flexibility. One key accomplishment that I’ve been able to achieve is understanding more about Bootstrap’s2 modularity; before this co-op, I mainly worked with Bootstrap by including the complete CSS file. Now, I understand how all the individual pieces come together to create the framework, and have included smaller portions of the Bootstrap framework for specific projects at RJMetrics.
A library used in conjunction with Sass, Compass3 makes it easier to write CSS that achieves broader compatibility and completeness without having to remember browser prefixes or non-standard Microsoft properties. I hadn’t used it before coming to RJMetrics, but from now on it will definitely be something I consider for future projects and has significantly helped me with my work.
For one of my projects, we used the Sinatra web framework. Ruby has always been a fun language to learn about, and I’m encouraged to continue learning more about Ruby.
Before my co-op, I tended to avoid the command-line version of Git, and my version control experience was limited to the basics of SVN and how to contribute code with it. I’ve been able to learn a lot about Git, not only how to commit code via the command-line, but also how to properly use branches to develop features and then submit pull requests to merge features back into the main project. GitHub has been the gravy on top that makes using Git a real pleasure; I’ve learned a good deal about how it helps software development teams stay organized.
Of course, this description wouldn’t be complete without all the non-technical benefits. It’s been great getting to learn about the business progress of the company, for example. As a group, we regularly talked about where the company was headed in the future, and how each team was going to help get us there. The size of the company was just right- I had plenty of co-workers to learn from, but I still got the chance to meet everyone in the office. RJMetrics is a great place to work, period. Any co-op student will truly enjoy and value time spent there.
If you’re interested in working for RJMetrics, take a look at their jobs page and let me know if anything piques your interest!
Behind the Scenes at Simple
We recently published this post about how to budget with our Goals feature. It mentions a new feature we’ve recently released: Send Money Goals. We thought our Tumblr audience might be interested in hearing a little detail from the engineer who designed it. Meet Bar.
I’ve been working at Simple for a few months now. When I started out here, I was given the freedom to keep myself busy while I adjusted to my new workplace. I read through many of our outstanding technical issues and started keeping a list of the one’s I’d like to tackle.
One thing that really excited me was the idea of linking a goal to a payment, so that people could schedule payments and save up for them without destroying their Safe-to-Spend. I loved this idea (and personally required it for my own sanity) and got started immediately.
There’s more about how this feature works in the post, and it’s pretty effortless, but of course Bar knows how to hyper-optimize. Here’s how to be a power user, from the engineer herself:
What I like to do is to schedule payment-goals for all of my recurring bills, and then pause the big ones, making bi-weekly contributions to keep the score settled. This gives me a better idea of where I stand on my Safe-to-Spend. I even do this for my credit cards (even though they don’t even make it easy to find out where to send checks) because it’s easier to build this into my Safe-to-Spend on Simple’s end than to try to remember when the credit card companies are going to withdraw an automatic payment. Shoot, if your other banks’ websites are like mine, it’s hard even to find out when your payment will happen with them.
Thank you, Bar! Tumblr friends, let us know what you think of this!