Categories
Entrepreneurship Software

Project Management Checklist: Before You Start

Managing a project is no easy task. What makes it even harder is that if you omit or downplay an important step early on, the hurdles start mounting later. Our ‘starter’ checklist is designed to help you avoid such pitfalls and tricky situations. We’ve also made a checklist for ongoing projects to help you get organized.

Project management checklist: or the Project Starter

We’ll be honest: this project management checklist was first created for our internal use. However, we’ve decided there’s too much solid advice for it to stay on Google Drive. Because we know this works. It’s based on years of our PM experience. After all, there’s more to a real software house than just code! Great project managers deserve ‘ninja’ and ‘rockstar’ titles of their own.

The “project starter” is our guarantee that the project will be kicked off in the best way possible, and no important issue will be omitted. The list has been divided into several fields, though there is a chronological feel to it as well, the sequence is not necessarily set in stone.

We’ll be returning to this topic with another checklist! Next time, we’ll talk about what boxes you need to tick off with an ongoing project. Meanwhile, don’t forget to check our other agile and management resources.

What tips do you have for project management, especially at early stages? Let us know in the comments!

See also:

Categories
Software Technology

Show me your Definition of Done & I’ll tell you who you are

Analyzing a company’s Definition of Done (DoD) can tell you a lot about their work ethic and what they put the ‘quality’ sticker on. I’ll explain a few concepts about and around DoD to make it clearer.

First question: do they have a DoD?

There are some vendors who don’t have a DoD at all. That usually doesn’t spell anything good. If you’re set on signing a fixed-price contract (which I don’t recommend for software development), then it’s likely the contract will include certain definitions. However, there are some things that are hard to put into that initial agreement you sign. This makes them tough to enforce on an agreement level.

If you’re using Scrum/agile practices, then a missing DoD document is odd and should be worrisome. Are the quality criteria arbitrary, depending on a particular developer’s current mood? Or perhaps – the list exists, but you’ve never seen it? Ask yourself why that could be the case. The answer can’t be good.

Scrum

The DoD is a frequent element of agile practices. Just a word here, though. Scrum doesn’t dictate what exactly your Definition of Done should be, it just suggests that the functionalities that the team delivers in a sprint should meet a set of criteria you’ve established together. It’s a form of agreement between the team and – usually – the Product Owner on the client side.

What is it?

It’s basically a set of expectations software has to live up to. If it doesn’t meet the criteria you’ve established with your team, it can’t go to production. Let’s say you can determine two things out of the triangle of scope, quality and time. We’re establishing a firm timespan of a scrum iteration and constant (high!) quality. That’s the basis for DoD.

Some general rules

You usually establish code and functionality checks, and code coverage percentage, so that you can objectively state how well-tested the code is. Is it implemented according to all user requirements? Has it built and have all tests passed locally? Last but not least, you look at performance and security issues – and, of course, the code must go through a code review.

Don’t confuse it with the Definition of Ready, which is a set of minimum criteria that a particular item in your backlog (or your list of tasks or features you want to have) must fulfill before it gets moved to development. DoR is designed to weed out badly defined tasks.

The DoD document isn’t a contract per se, but it’s sometimes referred to as such. One of our teams (working on one of our bigger, scalable projects) recently printed out the DoD list and everyone signed it, client and team, old school style! This is just to underline how seriously this document is treated.

definition of done

Transparency is key!

As a client, you shouldn’t just be familiar with the Definition of Done. You should understand it. If there’s anything that you don’t quite get, it’s the software partner’s job to explain it to you. After all, you’re agreeing on a common definition of quality, and quality that can be – and will be – checked and measured. Working with agencies that obscure the meaning of certain phrases or are deliberately vague about what ‘done’ means will be problematic.

Maintaining your documentation in order is also a part of the Definition of Done. There are other transparency issues connected indirectly with the DoD, such as accountability, transparency when it comes to reporting, not to mention a clear process.

Other matters of quality

If you’re asking your vendor about quality and what is means to really be ‘done’, ask them about code reviews and testing. Code reviews and audits are derivatives of DoD. Another developer should evaluate the feature you want – a second opinion is necessary. This is an ongoing process. Software testing is part of Quality Assurance. Good automatic and manual tests will ensure nothing blows up in your face once you get your feature released.

A really good software development offer should be complemented with design and hosting services, experience with monitoring and performance scaling, as your application is designed to grow, right? If you’re at the starting point, product design (the whole package) is certainly a nice thing for an agency to have.

If you’d like to grab our Definition of Done list (we’ve worked hard on doing it right), drop us an email at hi@espeo.eu with ‘DoD’ in the title.

Categories
Uncategorized

My beliefs on time-material and why I don’t see it any other way

The toughest dilemma I’ve been dealing with over my past five years with a software consultancy house is “how do you make an agile project, or any project for that matter, successful with an inhibiting agreement with fixed key terms?”. Having tried various approaches, combinations of approaches and bending the continuum, I’ve arrived at the conclusion – “you don’t, and there is no way around it.”

Here are some lessons I’ve gathered over that period of time – about the projects that have been a success and had the same common denominator – a time-material agreement.

Trusting and earning trust

  • let’s start small, or even very small
  • let’s see after a week or two what both parties bring to the table
  • let’s look back at that initial period and decide if we can work efficiently together

Playing for the same team and sharing the same goal

  • both parties are vested in growing the client’s business
  • mutual understanding that long-term success benefits both parties more than any short term wins on either side – this leads to mutual respect
  • thinking in ROI categories by all people involved on both sides
  • we love suggesting killer features – hey, at the end of the day everyone benefits

Minimum overhead

  • no debates on what’s in scope and what’s out
  • no debates on what’s a bug and what’s not
  • no debates on what’s a bug and what’s a CR
  • hey, no CRs!
  • no development of features we don’t believe in
  • no more waste!

Endorsing agile

  • there can be no real agile with an inhibiting agreement underneath. Give your success a chance!
  • agile is still the best approach to software development
  • agile and time-material fit. No more artificial agile, calling it agile, iterations being just another name for weeks etc.,

Iterations and priorities

  • you’ve changed your mind about your business direction – very well, we’ll play right along
  • ”no offence, but the feature you’ve started working on is pointless now that the competition already has it” – “none taken, let’s build something they don’t have yet, and let’s start today”

Business driven development

  • you show needs, we advise, you decide, we do it
  • you need to grow your business in an optimal way, we’re there to help you achieve this goal even if it means taking a suboptimal route from the IT perspective at times

Longevity and sustainability

  • long-term motivation based on a common goal achieved together in small steps, not on bonuses, management pressure, fear and contractual penalties
  • long-term perspective motivates against taking intentional shortcuts that would remain unnoticed for a long time but are very costly when eventually TSHTF
  • this model has a significant impact on team morale which leads to attracting new team members and inhibits departures thereof

100% transparency

  • you get billed for the time we’ve spent working on your project. Every minute of it and not a minute more. No rounding up!
  • pay for what you get. Time spent on our self-development, training, company meetings is NOT billed!
  • if we think there’s a problem ahead – we tell you immediately
  • if we don’t think the feature is worth spending time on – we tell you, you might reconsider

Actions instead of words

  • PoC instead of multi-page specification and implementation documents
  • PoC instead of estimations, negotiations and assumptions
  • get an MVP ready and show it to the clients ASAP
  • estimate you budget and milestones based on facts (real team velocity) not promises (initial estimates based on documentation)

author: Tomasz Liberski

Categories
Uncategorized

Why var_dump is not always the best solution – debugging with xDebug

Every software developer needs to check what’s under the hood from time to time. For beginners first choice will be naturally print_r paired with <pre> or “more advanced” var_dump. Even if there is nothing really bad with this solution there it can be done better.

Of course such approach may need additional effort to make it work but in most cases it’s worth trying to debug like a pro.

In this article we’re recommending Xdebug. This PHP extension will allow you to see what’s happening inside your app, check global arrays like $_POST or $_GET, look inside objects and watch which variables are currently set. Moreover – Xdebug allows to execute your app line by line and see what is happening during request.

As a bonus – Xdebug is good for testing ajax requests. Normally your endpoint is returning JSON or XML. When you use var_dump inside such output you will ruin document formatting and get an error in your JavaScript, which should receive and parse a response. Using debugger you just delay execution but after debug process output will stay untouched.

To start with Xdebug you first need to install and configure php extension.

For installation on linux (debian-based) systems you can use:

sudo apt-get install -y php5-xdebug

Then you need locate configuration file which can be found in:
– apache: "/etc/php5/apache2/conf.d/20-xdebug.ini"
– php-fpm: "/etc/php5/fpm/conf.d/20-xdebug.ini"

Base configuration of Xdebug which should work on any environment is:

xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_connect_back=1
xdebug.remote_port=9000
xdebug.idekey = "idesecretkey"
xdebug.remote_handler=dbgp
xdebug.remote_mode=req

Depending on the IDE you are using you need to configure it as well.

If you see Fatal error: Maximum function nesting level of ’100′ reached you should set xdebug.max_nesting_level = XXX where XXX is nesting depth = 200 (or more) in your configuration.

Configuring PhpStorm to use Xdebug on dev environment

For PhpStorm which claims “zero configuration”, so it’s as easy as setting IDE Key and port (if needed – by sticking with the key “PHPSTORM” and port 9000 then it’s already done for you) and starting listening for incoming connections.

Procedure is well described on PhpStorm zero configuration Xdebug manual so there is no need to copy it here.

Additionally if you want to provide your own IDE key or change listen port just provide them like described here. There is nothing more to do. If Xdebug extension is configured properly and IDE key and port match those in Xdebug config, plus when you’re debugging external host-path mappings are correct everything should just work.

Configuring Netbeans to use Xdebug on dev environment

1. Setup general NetBeans properties in Tools → Options → PHP → Debugging

2. Setup project properties in File → Project properties
– select in left menu “Run Configuration” and check or specify your project URL

– click on “Advanced” button under “Arguments” field and select “Do not open browser”. In this case NetBeans will not open new windows after debug session will be started.

3. Select in project configuration in right menu item “Sources” and specify small and but very important configuration option “Web Root”. Click on “Browse” button and select the folder where your init php script is placed.

Start Xdebug session inside your web browser

Install Xdebug plug-in for you dev browser and configure idekey for remote debugging.

After this you should enable debug plug-in in browser, set breakpoint and start debugging session in IDE, refresh browser page. IDE (if listening for incoming debug connections) should handle debug session and will focus cursor on first breakpoint.

Mozilla: addons.mozilla.org/EN-US/firefox/addon/the-easiest-xdebug/

Chrome: chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc

authors: Sergii Shostak; Bartek Telesiński