My Top 4 Ideal Dev Shop & Product Characteristics, Yours?

What is an ideal software project? What is an ideal delivery cycle? What is an ideal culture? From a client’s perspective do they see the team as a sluggish liability or is the development team proactive and looking for the next strategic or tactical step to take?

Ideally, I see the development team as a group that should be leading a company with technology. If a team isn’t doing that, they’re likely to be running the risk of appearing as a liability and risk. Often these are the types of teams that are often outsourced or off-shored because it seems easier to the clients or management.

I don’t like the idea of getting stuck in a team like that. However, I’d do everything in my power to change that situation. In the past I’ve done just that. It is hard, but it is worth it. It boils down, unfortunately, to a perception and practice problem most of the time. A little like herding cats. Once you get them all together… well, you can read the picture. ;)

Herding Cats, Oh yeah!

Herding Cats, ain't a feeling like it in the world!

So what is my ideal team, product, and environment look like? That’s simple to answer.

  1. Team cohesion through pairing, eating lunch together, having a beer once in a while, easy conversations, hallway troubleshooting, and other social interactions. These interactions should be easy, comfortable, almost as if everybody were friends. Better yet, the ideal situation is simply that people working on a project actually be friends. No reason, in and ideal situation, for everyone not to be.
  2. Frequent delivery of product. Weekly, maybe every two weeks, but not much longer than that. The customer or client needs to be kept informed. If it is difficult to deliver something every week or two, that should be the top fix it item on the list of things to do. In this ideal environment of mine, I’d like to keep conversation and delivery on a weekly basis. Two weeks, often is a long time between delivery points.
  3. Communication among all lines of the company. There should be zero resistance to talking to any part of the company, developer directly to whoever is involved in the product. If there is a user, the developers should have access to them.
  4. Casual work environments are important. Generation Y especially, but X and others also don’t particularly like an environment to be socially stuffy because of forced attire. Dress comfortably, yet respectfully.

Usually with three out of four of these I’m a happy developer. If I get lucky enough to actually find 4 of 4, I’m happier than a kid in a toy store!

What other characteristics draw you into a team or a product to work on? What gets you excited about the software you’re going to build or the team you’re going to work with?

If you write up your thoughts or ideas on an ideal dev shop or ideal product, let me know and I’ll provide a link to your blog as well!  :)

Service & Scheduler: Using Topshelf, Quartz, & Other OSS Bits Part 2

In the previous entry in this series I setup a service using TopShelf. Now it is time to jump into scheduling with Quartz. I’ve started an entirely new service to work through an example of this service functionality.

To read more about Quartz.NET from the source, check out the Quartz.NET Project Site or the Github Repo.

Open up Visual Studio and create another Windows Console Project. Next add a reference to Quartz.NET with Nuget.

Adding Quartz.

Adding Quartz.

Next add a class called SomeJob as shown.

using System;
using Quartz;

namespace quartz
{
    public class SomeJob : IJob
    {
        public SomeJob() { }

        public void Execute(JobExecutionContext context)
        {
            Console.WriteLine("DumbJob is executing.");
        }
    }
}

Next add and change the code in Program.cs to the code below.

using System;
using Quartz;
using Quartz.Impl;

namespace quartz
{
    class Program
    {
        static void Main()
        {
            var schedFact = new StdSchedulerFactory();

            var sched = schedFact.GetScheduler();
            sched.Start();

            var jobDetail =
                new JobDetail("myJob", null, typeof(SomeJob));

            var trigger = TriggerUtils.MakeSecondlyTrigger(5);
            trigger.StartTimeUtc = DateTime.UtcNow;
            trigger.Name = "myTrigger";
            sched.ScheduleJob(jobDetail, trigger);
        }
    }
}

NOTES: Working code available on Github under my Quartz Repo.