linusdm
Small scale project management
I’d like to seek advice about small scale project management. Although this isn’t Elixir specific, I’m quite confident this is a good place to start a discussion about it, since Elixir is such a good fit for small cross-functional teams that want to get things done with fewer resources.
We are a team of two developers and one person who’s more customer faced but only involved part-time (with other roles and duties in our company). We’ve ventured into a software project for a client that has little experience in custom software development. It’s been a very educational journey until now. We’ve been working on the project almost fulltime for more than a year now. The software is a rewrite of an existing application. But of course they are dreaming up a lot of new features too, so it’s not only replacing the old with something new. The specifics are not really important.
Extracting the current feature set, and the new wishes has been a challenge. Knowledge is distributed over several people (not too many, but still, not everybody knows how to share that knowledge in a structured way). It took way more time than I had anticipated, and I think about half of the time we spent analysing and making sure we understood how everything fit together. Unfortunately, there was no one at the client company that had the role of product owner or product manager (or whatever the name of the role, I’m not really knowledgeable in those terms).
I don’t think that was necessarily bad, but I could imagine a smoother process if someone would have stood up and was the liaison for all functional issues. I think we did great, given the circumstances.
But now, more than a year later, we went into production. Not with the full feature set, but with a subset that is good enough to strangle a big part of the old system. I really stressed that going into production rather earlier than later was necessary. And I was right: now that sh*t hit the fan (read: they actually started using the software), a lot of feedback began poring in. Although we always shared our work transparently on an acceptance environment, with real data, that never led to the same feedback we receive now, when they really are forced to use the system. I guess I’m not surprising anyone ![]()
A lot of words, just to set the scene, sorry. At this point, we’re really getting a lot of input and feedback from a lot of different people. It’s like an avalanche, and we still have to add new features too. I’m often overwhelmed by all the unstructured input that’s coming at us. At several points in time we’ve tried to take stock of which features are on the radar. We also tried to involve the client into picking priorities (“if we do this first, then that will have to wait”), so we were sure to be working on the highest priority tasks first. It resulted in a bunch of lists and kanban boards that were soon losing their value in providing insight for all involved parties. None of the attempts stuck.
I’m really interested in how people working in small teams (it can’t get smaller than a team of two, can it?) analyse, plan and coordinate their work with clients that don’t really know what it takes to be a good customer for custom-built software (specifying clear features, short feedback loops, facilitating communication with the end-user, etc.). Don’t get me wrong, I really like the small scale of it all, but we could really benefit from better processes. I used to work in larger agile teams, where roles and processes were all set up. I didn’t have to think about those things (nor did I really want to, at that time). I also don’t believe in all the agile fairy-dust that’s being sprinkled on large corporate software projects. I believe that every project is unique, and that there’s no one-fits-all solution.
I’m curious if any of you have good experiences to share, that apply to these small scale scenarios. Maybe stories about how teams got through these chaotic times by introducing some kinds of collaboration, or other kinds of turning points. Maybe good books on the topic? Or any other anecdotes (ideally with a positive twist at the end). I like to learn about what worked, and what didn’t in those situations. I feel like a lot has to do with communication and clearer processes. Enlighten me! ![]()
Most Liked
LostKobrakai
I’ve been there a lot having worked for a long time as sole developer on projects. I’ve not been in a position to need to deal with the issues in a while though, so not sure how well my suggestions would turn out in practise.
My expectation would be that the problem is less of a “what do we do”, but more in “how consistently do we do it”. Project management takes time and as developers we’re not that used to manage projects. We much rather deal with the work than trying to line up work in an orderly fashion. So imo the first step is acknowledging the fact that dealing with those things can’t happen “on the side”. It’s work that needs to happen like any other work and prevents you from doing development at the same time.
My suggestion would be starting with the smallest amount of process. Gather feedback (not act on it yet) and bring it together to a single meeting/timeslot (choose some fixed cadance and stick to it), where feedback is aggregated and sorted and at best prioritised with the client. Try to get a single person of the client to own prioritization. I like to compare this “upkeep work” to a library. Libraries only stay orderly by having a shared drop off point and then a few select people putting books back in order to a maintained system. Then everyone can continue to enjoy the orderly fashion of finding most books.
As for reading material: I really liked shape up. It’s probably too much process for your setup, but the ideas can be implemented with less process as well.
al2o3cr
Somebody needs to be responsible for triaging / deduplicating / prioritizing this feedback, or else your effective team size is three people + everybody sending feedback.
In my experience this is the MOST DANGEROUS time in a rewrite; it’s very easy to skip the hard & unimpressive work of replacing the last bits of the old system in favor of shipping shiny new features.
But until you actually remove the old app, all you’ve accomplished is increasing the complexity of the system (by adding a second copy)!
Your team is small enough that I’d skip the lists and ask a single question: “what is the MOST IMPORTANT THING to deliver right away?”. Between replacing the last of the old system and whatever they pick, that should be more than sufficient to keep your small team busy.
Lucassifoni
Hello Linus,
I’ve been freelancing either solo or with a few people forming tiny ephemeral teams for a long time now and have been in this situation a few times.
When this has been solved for me (because being an human process problem, sometimes it does not get solved), it boiled down to these things :
- Frequent collaboration and workshops with the client, if possible, on-site : this solves the lack of implication on the client’s side by not letting time pass by. The busiest the client industry, the easier for them to let the project slip. The project must not slip.
- Designation at the client of a clear project coordinator who understands the goals, stakes and specifications, sifts through internal feedback, filters, and prioritizes it. This solves the “design by commitee” issue that can arise in some organizations.
Basically, the belief that the project is a team effort (the team being you and them) must be established and a shared culture. Asking for new features all the time is anti-team effort.
Some other companies were very good at giving me / my small team a very clear spec of what they needed, and we only needed a launch meeting, a “first delivery” meeting, a feedback phase and a final delivery meeting. But that’s the less frequent situation.
In the situation you are describing, the client forming a small, project-focused team that could make feedback loop quicker, with a single person tasked with being a source of truth, helps a lot.
Once, when a project was really slipping despite my very frequent e-mails and calls, I just took the cost of an unplanned trip and told them I’d go on-site for a week and we’d put everything back on track. Nobody asked me for that, but we were able to wrap it up.
Sometimes organizations are not able to take decisions in their own interest, even if the project itself is still of interest. Sometimes, a one-year-of-work project can happen in three months when interests and personalities align. Sometimes, unclear hierarchies and scopes can spread a one-month effort over three years of you trying to get people collaborating…
Props to you for being a small shop, it’s very interesting to read about other’s experiences.
Edit : thinking about it more, it’s all about getting to a shared truth on what the project really is. The method to get there can vary. I like workshops & short feedback cycles a lot but YMMV.
Last Post!
linusdm
Yes! It sounds very enticing to just slap on a few more weeks, before actually shipping a first version, to have some more time to add new features. But in reality risk just grows and grows. I’m very aware of the dangers of postponing go-live.
Thanks for noticing ![]()
We’ll be transitioning into a second phase soon. I’ve already arranged to be working on-site some days of the week, which will be a very interesting experiment. I’ll try to tighten some feedback loops and take ownership of keeping more order in our backlog. Meanwhile we’ll invite them to take on the responsibility of prioritizing the most pressing features for the next development cycle.
Thanks everyone taking the time to add to this discussion ![]()
Popular in Discussions
Other popular topics
Chat & Discussions>Discussions
Latest on Elixir Forum
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex









