lately I realized I'm struggeling to keep myself accountable, mainly for work I am the main stakeholder in.
When working "after spec" or together with someone else on the same code, I can to stick to it and deliver quality I'm satisfied with. But as soon as I work for myself my standards, quality and even goals start going down hill. Short term I'm okay with less and sloppy work, and after a while I regrett no doing a better job.
Do you guys have ideas, techniques etc. to deal with this behaviour?
Are you doing work where you don't care about it's quality? Why do the work? Some part of you didn't care about the result, or didn't believe that the additional quality would actually pay off.
That's completely normal.
Understanding which one and why is honestly far more interesting than most personal software projects.
So there's the two versions of you. The one that diagnosed it important, and the one that behaves as if it isn't.
Which is correct? There's a philosophical concept akrasia that might be worth reading about.
But for a shortcut, here's what I like to do. Get very disciplined and explicit on the Why. Ideally, every priority of yours should be traceable - through strict logic based on sufficiency and necessity - down to values that are important to you.
That explains why that split sometimes happens.
Because sometimes the You that diagnosed it important is correct, because it really is implied by a basic value of yours, and is necessary as well - but the You that behaves is wrong because the Why pathway isn't explicit enough. An example might be putting off signing up for life insurance if you have kids. If you're more explicit to yourself about the reasoning pathway, it can add more motivation to see the effort through.
And sometimes it's the opposite. The You that behaves is correct to ignore it, and the You that diagnosed it important is wrong. And this can be because your convoluted Why pathway is wrong somewhere. Perhaps a premise that originally justified its importance is no longer true, but you haven't realized all the implications yet.
For technical people in particular, it's all too easy to start amassing an unbelievably huge todo list just because of ideas that sound cool. They turn into goals "just because". Keeping yourself aligned with your own values can help you pare down your priorities.
I don't submit it to anyone, it's just for myself. And, it turned out that I wasn't slipping at all. But, the peace of mind of being able to prove it to myself was good. A nice side effect is seeing which projects or types of activities take up my time.
Other accountability things I've been doing lately is writing more comments, documentation, and focusing on writing code that is easy for others to jump into (well structured modules, one-click dev setup, automated deploys, etc). That is, even on projects for myself or where I'm likely to be the only person ever to touch it. It is good practice to get into and it does help a lot when you're coming back to something after 6 months.
I also publicly announce a time frame I'm working to - I'll have this complete by 4pm for example.
Often you need far less time than you think to do a good job of a spec or other written doc, so saying 'next week' won't improve the results and will likely just mean it drops down my priority list.
I'm in a relatively senior role, but still need these 'hacks' to get the best out of myself.
First, I find this happens to me when I get busy. The key is doing the work "for me" before the work "for others". Wait up earlier and make my work matter.
Second, I used to get up from my desk where I met clients, and literally sit on the other side to write out what needed to change. And then I would get up and go back to the first side and get to it. That mental shift of looking the other way was very useful.
Alternatively you can set up a linter that doesn’t let you push your code until it’s properly formatted and/or well-tested.
With regards to more higher level stuff such as setting and working towards goals, I find a “mastermind” group invaluable. It’s a group of like-minded insividuals who meet up regularly (offline or online) and discuss what they are working on. Having a structure in place to make sure everyone has to share their progress or lack thereof is key.
Shameless plug: I built WIP ( https://WIP.chat ) To solve this exact problem. It’s a community + group chat of makers where we actually share our todos and the progress we make. (this makes it very different from your typical group chat)
Of course you could also set up something similar yourself with a group of friends. A weekly Skype call with Google Doc. Etc. Whatever works best for you.
Edit: typos
Another thing to think about is what part of what you are making do you actually care about. Code quality/idioms/dialects/languages? functionality? Look and feel? You might be so caught up in making a kick-ass gizmo that you completely forget to write "nice" code (for certain values of nice). THIS IS COMPLETELY OK- you are not unaccountable, you are just prioritizing.
Every day she would start with a white board or piece of paper and write down everything she needed to do for that day. The next day she'd take whatevers left and start the list over. Her goal was to make sure nobody ever could say they have no idea what was happening in the company, and honestly she did a phenomenal job at it: she wrote up transcripts, shared videos and pictures as well. You just knew what was going on: some people don't like reading: there's audio / video, or they don't like video: there's a transcript.
In any regard, what I personally do is I create tickets in whatever ticketing system I'm working with be it Jira, Trac, GitHub Issues, whatever system and I write out or take the tasks / stories / issues (man devs really need to pick a darn uniform term) and write out a checklist of what I need to do even if I go back to the ticket. As I'm working and I realize something new I need to do, I write it down. I check things off, or cross them off (to make it more obvious what isn't done in longer lists) and I found this helps me when I go "what was I trying to do again?"
(Example if I am interested in a side project, I promise to speak at a local meetup about my work)
Having someone confirm whether you've done certain things as their job seems like something that will help me, and even if it doesn't fully help they can reduce the amount of work I need to do to start on something which is helpful on its own.
I'd be curious to hear if anyone here is doing something like this?
Even better, follow the full process
1) Problem Identification
2) Requirements Capture
2a) Technology selection (optional)
3) Specification
4) verification and validation
Maybe you do some TDD and mix it up on 3 and 4, but this is the minimum process to meet an intent for a v-model, call it a shallow v.
Try and maintain at least minimum traceability thru the stages, but can easily fit each on a tab on a spreadsheet and link cells across the phases.
Once you get a few done, they are really very little work compared to the benefits yielded.
If you can't articulate what you need, want, how to do and how to check, even if only one stage in advance as you go, then you probably aren't ready to start.
Sometimes it might be instructive to write one to throw away if you aren't sure how it might best pan out, then make the plan for the actual thing.
Any interval of time with a discrete task, even if it’s answering emails, I note and occasionally provide supplemental information.
I’ve noticed that it’s helped most with clearing through lots of small tasks, because when I record my start and stop times, I feel less inclined to let “answered an email” take any more than a few minutes.
I still don’t have a productivity boosting solution for big complex projects with lots of research, except “lots of coffee.”
What are your expectations? What would go good or bad if you do or do not succeed?
How much do you really regret, what aspect of it do you regret the most? Identify one specific problem and seek to improve that specifically. Once you are good at that little thing, pick the next one.
I start the day by creating a new day title with the date and then add empty checkbox items for the things I want to get done, then I move over stuff from the previous day that I did not get around to yesterday.
And I also have a list at the bottom for stuff I need to do eventually but is not a priority, I review this list every morning as well.
I have recently found success in working backwards to determine why things aren't getting addressed. I'm using Clockify [https://clockify.me/] to track time spent on tasks. My flow is to stop the timer when I switch tasks, and start a new entry.
My job has a high amount of interruptions, which causes quite a bit of context switching. Not the most productive situation when working on long form tasks.
I've found that keeping an inventory of these interruptions helps me to determine what my stakeholders might need assistance with through utilities or fixes. It also keeps me semi-accountable in relation to how much of my day is being used appropriately.
But, I think the long and short of it is, keeping yourself accountable starts with being honest about where your time is being spent.
Is this code you're writing for yourself a product that is intended to become a full-time endeavor? If yes, then it makes sense that you'd find yourself frustrated, and it is likely that the quality isn't actually the problem. It's a frustration with not having the bandwidth to work on your own project 100% of your time. You're not financially independent and recognize that you don't have the time to actually deliver the quality and content you'd like to. It is a sense of futility working on something during odd hours that you'd rather spend decompressing from having to deliver quality all day long at a paying job.
What does that even mean?
Are you talking about an entirely private project on your home PC that no one but you will ever see? Then it's a hobby and you can make it as good or half assed as you feel like.
Or is this open source? If so, then decide what your goals are or your reasons for doing it.
Most people don't appreciate free stuff and people who work for free often resent the way they get treated for idealistically providing high quality stuff completely for free. You don't owe "your best" to random strangers who won't appreciate it. If you are resenting that or feeling burned out or something, take a break, re-assess your reasons for doing it and decide whether to quit, lower your expectations, scale back your involvement, or whatever.
The expectation of a stranger for you to show up and work is powerful and effective.
To make sure it's high quality, pay for code review - https://www.codementor.io/
The expectation that someone with minimal competence will be looking at your code is powerful and effective. Note: You don't even need a super experienced person (read expensive) you can get 90% of the motivation from even a junior reviewer.
Build the cost of these into your pricing structure.
Aside: I'm still looking for on demand project management for 1 or 2 weekly 30 minute sessions to track progress since I hate (and thus don't do) this overhead work.
1. Go through my agenda for the next day every evening and commit to no more than 3 categories of tasks multiple, unplanned context switches don't work for me)
2. Try to religiously track my time. Easy to do for planned items but still struggling with tracking unproductive time. But within a couple of weeks, you start to see patterns even with such vague notes as (1230-1430: YouTube, etc)
3. Review your weekly / fortnightly patterns every Saturday. Takes no more than 30 mins a week to reflect on the well gone by and come up with one change to try the next week.
Orgmode has been a huge help with tracking the time and it ties in my workflow. And of course, the overall process itself keeps evolving, as it should.
I think self-discipline doesn't cut it. What you need is commitment devices: put yourself in a situation where it's harder/more costly to not do the work rather than do it. Have the environment do the motivation work for you, "tie yourself to the mast"
For example: time tracking, deadline for a public speech, deadline for a demo day, going to a dedicated room where only work is allowed, working with other people (even if they don't work on the same stuff as you), developing a good routine/habits. Keeping a log of progress/failures is good too.
It's hard stuff
Doing this attaches your reputation to your code. Anybody reading it knows to expect a certain level of quality given it is written by you, and you get the much needed motivation to write good code.
Amazing piece of advice I picked from the Pragmatic Programmer.
[1] http://blog.viktorpetersson.com/remote-work/2019/05/18/a-dec...
The first thing you have to do is to identify what is the real problem.
I don't know you, most of the people here do not know you personally so even if someone here is an expert on human behavior and productivity, is is way easier to identify the real problem if you are face to face with an expert.
Odds are that the problem(usually they are several problems) that you have is different to what you see as a problem(the consequence of the real problem).
This expert will read your body language, your voice nuances, your attitude much better than through plain text. This person could ask you about your life habits, that are super important(do you sleep , eat well, exercise, make love with your partner? Do you play and enjoy life?) and tell you what to do.
You probably are doing several things wrong, like working too much, not exercising, isolating yourself, judging yourself too harshly.
Over this you will probably feel anxiety that makes you procrastinate and do no work at all.
It takes a lot of reading, watching videos and practice over years in order to master productivity on your own. Just raw ideas and techniques are not enough, you need to whatch them in action, being applied to really understand. Specially watching masters.
And most important, you need to apply those techniques in your life, not just understand them. A mentor would be your external feedback if you apply the techniques or not.
Would you learn judo reading blogs? Or books? That would help, but a master will skyrocket your learning.
There are programs like "wake up productive"(from Eben Pagan) that you can watch as videos. There are torrents of it if you just want to know what is all about before buying.
A good psychologist could also help you a lot with any issues that you have while working on your own.
There are experts in programming that know the best techniques. Just ask them, make them your mentors if you can.
There are experts in human behavior. Ask them or make them your mentors.
There are experts in productivity...
Find people that are in the same place that you are, a support group. You can create it if it does not exist.
Put someone else in charge of ensuring quality and make sure they've got the ability to spot when you're not delivering and the authority to bust your chops for it.
In my place, this is often referred to as "QA". He makes sure requirements are identified, tests are agreed and suitable, processes followed, design and code reviews done properly, code source controlled correctly, builds done properly, automated test suites are good, all that sort of thing.
It all started with reading the book called “The anatomy of peace”, and then reading the two other books from the same author, this helped me a lot and I then went all-in and took their coaching education, and now i am much less stuck and helping others get unstuck at the same time :)
Then I pull them into programs as I go, document throughly, and close.
This helps me later work through my progress, but has also helped me onboard people to help on my side projects. If you think you’ll be adding people, it’s good to just develop with the same rigor as work. It’ll help you improve and keeping yourself accountable
You know that you work well with other people, so find ways for other people to help you be accountable.
Every piece of code you work on should be signed by you. Your reputation gets attached to your work, fear of what your impression will be on someone reading sloppy code written by you should be motivation enough to write good code.
This is just one of the many useful tips I learned from the Pragmatic Programmer.
Or real people. Ha!
Clearly, there is some difference in how your emotional arousal works to motivate you in working with someone else vs doing your own work.
Look into doing some introspection and try to uncover and compare the difference in core belief/subconscious commitments you work with others vs for your self
check out the link if what I said interests you. https://www.youtube.com/watch?v=3HoE_PKlanc&
tl:dr; I get myself into the headspace that I'm working for someone else to overcome my own ability to undervalue my own projects.